一.編程語言的作用及與操作系統和硬件的關系
編程語言是程序員用來控制計算機的工具,是一種標準化的交流技巧,使得人與計算機之間可以在某種程度上交流,使得計算機能夠完成人所下達的工作。
在計算機剛出現的時候,程序員直接控制硬件來使計算機工作,但是用機器語言(二進制代碼)編寫的程序無明顯特征,難以書寫和閱讀,具有很大的局限性。因此隨著計算機的發展,操作系統出現并成為了人與計算機硬件之間的橋梁,人直接控制操作系統,操作系統調用計算機硬件。
應用程序即是軟件,是程序員用編程語言寫的程序,應用程序在操作系統環境下運行,并通過操作系統調動計算機硬件完成工作。
二.計算機硬件
計算機由運算器、控制器、存儲器、輸入設備和輸出設備等五個邏輯部件組成,其中運算器和控制器合稱為中央處理器(Central Processing Unit,簡稱CPU),存儲器(Memory)分為內存和外存,輸入設備(Input Device)和輸出設備(Output Device)即是通過各種控制器能被計算機調用并實現輸入或輸出的設備。
CPU是計算機系統的核心,是運算中心和指揮中心。內存是存儲速度較快而容量較小的存儲器,外存(通常指磁盤)是存儲速度較慢而容量較大的存儲器。內存是通過電工作的存儲器,斷電則存儲的數據丟失;磁盤是通過磁工作的存儲器,可長時間保存數據。
計算機工作時,CPU從內存中取出指令解碼并執行,當需要用到磁盤中的數據時,則將磁盤中的數據送入內存后再使用。
三.CPU與寄存器
CPU是計算機的大腦,通過從內存中取出指令并解碼執行來控制計算機各個部件。每個CPU都有一套可執行的專門指令集,任何軟件的執行都必須轉換為CPU的指令去執行。
因訪問內存得到指令或數據花費的時間比CPU解碼執行指令的時間多得多,因此CPU內部有一些保存關鍵變量和臨時數據的寄存器,CPU可直接從寄存器中調用常用數據或者通過寄存器中的內存地址直接調用內存中的數據,使運行速度更快。
寄存器分類:
1.通用寄存器:保存變量和臨時結果。
2.程序計數器:保存了將要取出的下一條指令的內存地址,指令取出后,程序計數器就更新以執行后續指令。
3.堆棧指針:它指向內存中當前棧的頂端,該棧包含已經進入但還沒有退出的每個過程中的一個框架。在一個堆棧框架中保存了有關的輸入參數、局部變量以及那些沒有保存在寄存器中的臨時變量。
4.程序狀態字寄存器(Program Status Word,PSW):該寄存器包含條碼位(由比較指令設置)、CPU優先級、模式(用戶態和內核態)、以及各種其他控制位。用戶通常讀入整個PSW,但只對其中少量的字段寫入。在系統調用I/O設備中,PSW非常重要。
寄存器的維護:
在時間多路復用的CPU中,操作系統每次停止一個正在運行的程序時,都必須保存所有的寄存器,這樣在稍后該程序再次運行時,可以把這些寄存器重新裝入。
四.內核態與用戶態及如何切換
多數CPU有兩種模式,即內核態和用戶態,PSW中有一個二進制位控制這兩種模式。
內核態:當CPU在內核態運行時,可以執行指令集中的所有指令,即可以使用硬件的所有功能。
用戶態:當CPU在用戶態運行時,僅僅只能執行指令集中的一個子集,該子集不包含操作硬件功能的部分,一般情況下,在用戶態下不允許訪問外圍設備,不允許占用其他程序的用戶空間,將PSW的模式設置成內核態也是禁止的。
將用戶態切換到內核態的過程稱為系統調用(system call),CPU中對應的指令為陷阱指令(Trap Instruction),這個過程的實現需要通過調用操作系統。
五.存儲器系列
存儲器在計算機硬件中僅次于處理器(CPU),一般而言,隨著存儲器容量的增加,其讀寫速度會逐漸變慢。
L1緩存指寄存器:用與CPU相同材質制造,CPU訪問它無時延,典型容量是:在32位CPU中為32*32,在64位CPU中為64*64,兩種情況下容量均小于1KB。
L2緩存指高速緩存:主要由硬件控制高速緩存的存取,不同CPU,高速緩存行大小不同,如X86是32BYTES,ALPHA是64BYTES,并且始終在第32或64個字節出對齊(從0開始)。最常用的高速緩存行放置下CPU內部或者非常接近CPU的高速緩存中。高速緩存命中指當某個程序需要讀一個存儲數據時,高速緩存硬件檢查所需要的高速緩存行在高速緩存中。高速緩存的命中通常需要兩個時鐘周期(2ns),若高速緩存命中,就必須訪問內存,這需要付出大量時間代價。高速緩存價格昂貴,因此大小有限,有些機器具有兩級甚至三級高速緩存,每一級高速緩存比前一級慢但是容量大。
主存(即內存)通常稱為隨機訪問存儲(RAM),主存是易失性存儲,斷電后數據消失。
ROM(Read Only Memory)是非易失性隨機訪問存儲,但它是只讀存儲器。ROM速度快且便宜,在有些計算機中,用于啟動計算機的引導加載模塊就存放在ROM中,另外一些I/O卡也采用ROM處理底層設備的控制。
EEPROM(Electrically Erasable PROM,電可擦除可編程ROM)和閃存(flash memory)也是非易失性的,但它們可以被擦除和重寫,不過花費的時間比RAM多。閃存速度介于RAM和磁盤之間,但閃存擦除次數過多就會磨損。
CMOS是易失性的,許多計算機利用它來保持當前時間和日期。CMOS存儲器和遞增時間的電路由一小塊電池驅動。CMOS還可以保存配置的參數,比如哪一個是啟動磁盤等。CMOS耗電非常少,一塊原裝電池能用若干年。
BIOS基本輸入輸出程序儲存在ROM芯片中,CMOS用來存儲BIOS設置和系統時間。
六.磁盤
1.磁盤結構:在磁盤中有一個或多個金屬盤片,它們以5400,7200或10800RPM(RPM,revolutions per minute,轉速)的速度旋轉,從邊緣開始有一個機械臂懸在盤面上,信息寫在磁盤上的一些列的同心圓上,是一連串的二進制位(稱為bit位)
機械臂稱為磁頭。
每個磁頭在磁盤表面劃出的圓形軌跡,稱為磁道(Track)。
在有多個盤片構成的盤組中,由不同盤片的面,但處于同一半徑圓的多個磁道組成的一個圓柱面(Cylinder)。
磁盤上的每個磁道被等分為若干個弧段,這些弧段便是硬盤的扇區(Sector)。硬盤的第一個扇區,叫做引導扇區。
每個磁道劃分成多個扇區,扇區的典型值是512字節。
扇區是磁盤級別的最小讀寫單位,操作系統的最小讀寫單位是1block = 8 * 512Bytes。
2.平均尋道時間:機械手臂從一個柱面隨機移動到相鄰的柱面的時間稱為尋道時間,找到了磁道就找到了數據所在的那個圓圈,但是還是不知道這個數據在這個圓圈的具體位置。
3.平均延遲時間:機械臂到達正確的磁道之后還必須等待旋轉到數據所在的扇區下,這段時間成為延遲時間
數據存放于一段一段的扇區,即磁道這個圓圈的一小段圓弧,從磁盤讀取一段數據需要經歷尋道時間和延遲時間。
4.虛擬內存和MMU:將正在使用的程序放入內存,而將暫時不需要執行的程序放到磁盤的某個地方,這塊地方稱為虛擬內存(Virtual Memory),在linux中稱為swap。這種機制的核心在于快速映射內存地址,由cpu中的一個部件負責,稱為存儲器管理單元(Memory Management Unit,MMU)
從一個程序切換到另外一個程序,稱為上下午切換(context switch),緩存和MMU的出現提升了系統的性能,尤其是上下文切換。
5.磁帶:在價錢相同的情況下比硬盤擁有更高的存儲容量,雖然速度低于磁盤,但因其容量大,在地震水災火災時機動性強等特性,常被用來做備份。(常見于大型數據庫系統中)
6.I/O設備:I/O設備一般包括兩個部分:設備控制器和設備本身。
控制器:是主板上的一塊芯片或一組芯片,控制器負責控制連接的設備,它從操作系統接收命令,比如讀取硬盤數據,然后就對硬盤設備發起讀取請求來讀出內容。
控制器的功能:通常情況下對設備的控制是復雜而具體的,控制器的任務就是為操作系統屏蔽這些復雜而具體的工作,提供給操作系統一個簡單而清晰的接口。
設備本身:要想調用設備,必須根據該接口編寫復雜而具體的程序,于是有了控制器提供設備驅動接口給操作系統。必須把設備驅動程序安裝到操作系統中。
七.總線與南橋和北橋
南橋即ISA橋:連接慢速設備
北橋即PCI橋:連接高速設備
八.操作系統的啟動流程
1.計算機加電
2.BIOS開始運行,檢測硬件:CPU、內存、硬盤等
3.BIOS讀取CMOS存儲器中的參數,選擇啟動設備
4.從啟動設備上讀取第一個扇區的內容(MBR主引導記錄512字節,前446為引導信息,后64位為分區信息,最后兩個為標志位)
5.根據分區信息讀入bootloader啟動裝載模塊,啟動操作系統
6.然后操作系統詢問BIOS,獲得配置信息。對于每種設備,系統會檢查起設備驅動程序是否存在,如果沒有,系統則會要求用戶安裝設備驅動程序。一旦有了全部設備驅動程序,操作系統就將它們調入內核。然后初始有關的表格(如進程表),創建需要的進程,并在每個終端上啟動登錄程序或GUI。
九.應用程序的啟動流程
1.通過操作系統發出啟動程序的指令,并將之存入內存。
2.CPU從內存中調出指令,并解碼執行。
3.程序數據從硬盤讀入內存
4.CPU從內存中讀取程序數據并運行