計算機硬件linux
計算機的基本結構程序員
底層硬件、操做系統、用戶程序(軟件)web
- 操做系統Operating System(OS)是管理和控制計算機硬件和軟件資源的計算機程序,是直接運行在裸機上最基本的系統軟件,任何其餘軟件都必須在操做系統的支持下才能運行。
- 軟件必須運行在操做系統之上
- 若是沒有操做系統,那麼程序員就必須掌握如何操做硬件的全部具體細節,嚴重影響了開發效率。
- 操做系統運行於硬件之上,用來控制硬件。
- 在開發的時候,只須要調用操做系統爲應用程序提供的方便的抽象接口便可。
一套完整的計算機系統算法
- 控制操做系統(最終仍是控制了底層的硬件)
- 必須遵循操做系統提供的標準
- 最終都是交由底層硬件來執行
- 控制全部硬件
- 操做系統自己也是一種軟件
- 若是沒有操做系統,在編寫應用軟件的時候就須要同時把那些可以控制對應硬件的程序,這樣致使很是麻煩和低效
計算機硬件 編程
- CPU、內存以及IO設備都有一條總線鏈接起來並經過與其餘設備通訊
- CPU是人的大腦,負責運算
- 內存是人的記憶
- 硬盤是人的筆記本,負責永久存儲
- 輸入設備是耳朵和眼睛,負責接受外部信息來傳遞給CPU
- 輸出設備是表情,負責輸出通過處理後的結果
- 以上設備都是經過總線鏈接,總線至關於人的神經
CPUwindows
- 每個CPU都有一套可執行的專門指令集,任何軟件的執行最終都要轉化成CPU能識別的指令去執行,其中包含操做其餘硬件的命令
- 應用被CPU執行的過程
- 從存儲介質中取出指令 ——> 解碼 ——> 執行(周而復始,直到整個程序被執行完成)
- 用來保存關鍵變量和臨時數據
- 存取速度和CPU幾乎相同(與CPU相同材質製造,CPU訪問它無時延),訪問內存並獲取指令或數據所須要花費的時間遠長與CPU執行命令花費的時間
- 程序狀態字寄存器PSW
- 包含CPU的優先級、模式(內核態、用戶態)、條碼位(由比較指令設置)以及其餘控制位
- 在系統調用中,程序狀態字寄存器很是重要。
- 算術運算和邏輯運算指令
- 操做其餘計算機硬件的指令
對於操做系統而言,其指令被CPU轉換成操做其餘硬件的指令;但對於用戶的應用軟件而言,其指令被CPU轉換成算術運算和邏輯運算這類計算指令緩存
- 內核態:操做系統被CPU執行的狀態
- 用戶態:應用程序被CPU執行的狀態
- 二者區別?
-
- 處於內核態的CPU執行的是操做系統,能夠控制硬件,此狀態下能夠獲取CPU的全部指令集(包括控制其餘硬件的指令集)
- 處於用戶態的CPU執行的是玉壺軟件,不能夠操做硬件,並且只能獲取CPU指令集的一個子集,該子集中不包括操做硬件的指令集
- 內核態與用戶態的互換
- 應用程序想要控制底層硬件,就須要將CPU所處的用戶態轉換成內核態,當應用程序操做完硬件以後,再切換回內核態來繼續運行應用程序
- 用戶態下工做的軟件不能操做硬件,可是有些軟件好比暴風影音,必定會由操做硬件的需求,好比從磁盤上讀取一個電影文件,那就必須經歷從用戶態切換到內核態的過程。所以,用戶程序必須使用系統調用(system call ),系統調用會先入內核並調用操做系統,CPU的狀態從用戶態切換到內核態,並啓用操做系統而會的服務。
- 一個CPU中的處理邏輯增多,稱爲多線程。對於用戶來講每個擁有兩線程的CPU就至關於兩個CPU。(進程是資源單位,而線程纔是CPU的執行單位)
- 一個物理CPU中能夠模擬出多個虛擬的CPU來工做
- 一個計算機上能夠同時有多個物理級別的CPU
存儲器網絡
- 內存中有高速緩存行按照064字節爲行0,64127爲行1。。。最經常使用的高速緩存行放置在cpu內部或者很是接近cpu的高速緩存中
- 緩存在計算機科學的許多領域中起着重要的做用,並不只僅只是RAM(隨機存取存儲器)的緩存行。只要存在大量的資源能夠劃分爲小的部分,那麼這些資源中的某些部分確定會比其餘部分更頻發地獲得使用,此時用緩存能夠帶來性能上的提高
一個典型的例子就是操做系統一直在使用緩存,好比,多數操做系統在內存中保留頻繁使用的文件(的一部分),以免從磁盤中重複地調用這些文件,相似的/root/a/b/c/d/e/f/a.txt的長路徑名轉換成該文件所在的磁盤地址的結果真後放入緩存,能夠避免重複尋找地址,還有一個web頁面的url地址轉換爲網絡地址(IP)地址後,這個轉換結果也能夠緩存起來供未來使用。多線程
圖5.3 計算機的存儲器類型分類性能
- 主存(隨機訪問存儲RAM,存儲器系統主力)
- 易失性存儲,斷電後,保存的數據就消失了
- 全部不能再高速緩存中找到的,都會到主存中找
- ROM(read only memory,非易失性隨機訪問存儲)
- 在電源切斷以後,非易失性存儲的內容並不會丟失
- ROM只讀存儲器在工廠中就被編程完畢,而後不再能修改
- 在有些計算機中,用於啓動計算機的引導加載模塊就存放在ROM中,另一些I/O卡也採用ROM處理底層設備的控制
- EEPROM(electrically erasable PROM ,電可擦除可編程ROM)和閃存(flash memory)
- 非易失性
- 能夠擦除和重寫(重寫花費時間比寫入RAM時間久)
- 在便攜式電子設備中中,閃存一般做爲存儲媒介(固態硬盤)
- 閃存在速度上介於RAM和磁盤之間,但與磁盤不一樣的是,閃存擦除的次數2過多,就被磨損了
- 易失性存儲
- CMOS能夠用來保存配置的參數,好比計算機啓動時其中就保存了啓動磁盤的配置信息
磁盤
- 磁頭:經過磁性原理讀取磁性介質上數據的部件(利用特殊材料的電阻值隨着磁場變化的原理來讀寫盤片上的數據)
- 磁道:磁盤旋轉時,磁頭在磁盤表面畫出的一個圓形軌跡
- 扇區:磁盤上的每個磁道被分爲若干個弧段,這些弧段就是磁盤的山區。磁盤的讀寫以扇區爲基本單位(512字節)
- 柱面:上下一串盤片中,相同半徑的刺刀所組成的一個圓柱形環壁。
- 數據都存放於一段段的扇區,從磁盤讀取一段數據須要經歷尋道時間和延遲時間
- 平均尋道時間:機械手臂從一個柱面隨機移動到相鄰柱面的時間就是尋道時間,找到了磁道就意味着磁頭找到了數據所在的磁道,可是此時還沒法確認數據具體在磁道上的扇區
- 磁盤調度算法
-
- FCFS 先來先服務
- SSTF 最短尋道時間優先
- SCAN 不只考慮到欲訪問的磁道與當前磁道間的距離,更優先考慮的是磁頭當前的移動方向。
- CSCAN 磁頭單向移動,循環掃描
- NSepSCAN和FSCAN調度算法
- 平均延遲時間:機械手臂到達正確的磁道以後還必須等待旋轉到數據所在的扇區下,這段時間就是延遲時間
計算機的啓動
- 硬盤中,電腦啓動時,最終操做系統的代碼要給CPU去運行。也就是說,硬盤中操做系統的代碼首先會加載到內存,CPU讀取內存中操做系統的指令以後再執行。可是必須有一種機制明確的告訴計算機哪個硬盤是啓動盤,而這個機制就是BIOS程序(基本輸出輸出程序)。
- BIOS就至關於一個系統操做系統,它有底層的I/O軟件,包括讀鍵盤,寫屏幕,進行磁盤I/O。BIOS回到它對應的存儲設備CMOS存儲器中去讀取上次認爲配置的啓動盤位置,所以BIOS能夠肯定啓動盤是那一塊硬盤。
- 計算機加電
- BIOS開始運行,檢測硬件:CPU、內存、硬盤
- BIOS讀取CMOS存儲器中的參數,選擇啓動設備(BIOS告訴啓動硬盤在哪兒)
- 從啓動設備上讀取第一個扇區的內容(MBR主引導記錄512字節,前446爲引導信息,後64爲分區信息,最後兩個爲標誌位)
- 根據MBR讀入grub(一種bootloader)以後找到內核,將內核代碼讀入內存,以後CPU加載代碼並運行,進而啓動操做系統
- 操做系統詢問BIOS,獲取配置信息。對於每種設備,系統會檢查其設備驅動程序是否存在,若是沒有,系統則會要求用戶安裝設備驅動程序。一旦有了所有的設備驅動程序,操做系統就將它們調入內核,而後初始有關的表格(如進程表),建立須要的進程,並在每個終端上啓動登錄程序或GUI
用戶應用軟件的啓動
1.雙擊快捷方式
2.告訴操做系統一個文件路徑
3.操做系統從硬盤讀取文件到內存中
4.cpu從內存中讀取數據執行