(路徑名轉(zhuǎn)換成的文件所在磁盤地址的結(jié)果也可以保存緩存中以避免重復(fù)尋址)有圖形界面的操作系統(tǒng)被稱為圖形用戶界面GUI基于文本命令行的通常稱為Shell
帶有圖形界面的操作系統(tǒng)被稱為 圖形用戶界面(Graphical User Interface, GUI),而基于文本、命令行的通常稱為 Shell
https://m.toutiaocdn.com/i6790914684917645835/?app=news_article×tamp=1598778579&use_new_style=1&req_id=202008301709390101290480362483208E&group_id=6790914684917645835
操作系統(tǒng)
現(xiàn)代操作系統(tǒng)由一個(gè)或多個(gè)處理器、主存、打印機(jī)、鍵盤、鼠標(biāo)、顯示器、網(wǎng)絡(luò)接口以及各種輸入/輸出設(shè)備構(gòu)成。計(jì)算機(jī)操作系統(tǒng)是一個(gè)復(fù)雜的系統(tǒng)。
然而,程序員不會(huì)直接和這些硬件打交道,而且每位程序員不可能會(huì)掌握所有操作系統(tǒng)的細(xì)節(jié),這樣我們就不用再編寫代碼了,所以在硬件的基礎(chǔ)之上,計(jì)算機(jī)安裝了一層軟件,這層軟件能夠通過(guò)響應(yīng)用戶輸入的指令達(dá)到控制硬件的效果,從而滿足用戶需求,這種軟件稱之為 操作系統(tǒng),它的任務(wù)就是為用戶程序提供一個(gè)更好、更簡(jiǎn)單、更清晰的計(jì)算機(jī)模型。
我們一般常見(jiàn)的操作系統(tǒng)主要有 Windows、Linux、FreeBSD 或 OS X ,這種帶有圖形界面的操作系統(tǒng)被稱為 圖形用戶界面(Graphical User Interface, GUI),而基于文本、命令行的通常稱為 Shell。下面是我們所要探討的操作系統(tǒng)的部件
這是一個(gè)操作系統(tǒng)的簡(jiǎn)化圖,最下面的是硬件,硬件包括芯片、電路板、磁盤、鍵盤、顯示器等我們上面提到的設(shè)備,在硬件之上是軟件。大部分計(jì)算機(jī)有兩種運(yùn)行模式:內(nèi)核態(tài) 和 用戶態(tài),軟件中最基礎(chǔ)的部分是操作系統(tǒng),它運(yùn)行在 內(nèi)核態(tài) 中,內(nèi)核態(tài)也稱為 管態(tài) 和 核心態(tài),它們都是操作系統(tǒng)的運(yùn)行狀態(tài),只不過(guò)是不同的叫法而已。操作系統(tǒng)具有硬件的訪問(wèn)權(quán),可以執(zhí)行機(jī)器能夠運(yùn)行的任何指令。軟件的其余部分運(yùn)行在 用戶態(tài) 下。
用戶接口程序(shell 或者 GUI)處于用戶態(tài)中,并且它們位于用戶態(tài)的最低層,允許用戶運(yùn)行其他程序,例如 Web 瀏覽器、電子郵件閱讀器、音樂(lè)播放器等。而且,越靠近用戶態(tài)的應(yīng)用程序越容易編寫,如果你不喜歡某個(gè)電子郵件閱讀器你可以重新寫一個(gè)或者換一個(gè),但你不能自行寫一個(gè)操作系統(tǒng)或者是中斷處理程序。這個(gè)程序由硬件保護(hù),防止外部對(duì)其進(jìn)行修改。
操作系統(tǒng)與運(yùn)行操作系統(tǒng)的內(nèi)核硬件關(guān)系密切。操作系統(tǒng)擴(kuò)展了計(jì)算機(jī)指令集并管理計(jì)算機(jī)的資源。因此,操作系統(tǒng)因此必須足夠了解硬件的運(yùn)行,這里我們先簡(jiǎn)要介紹一下現(xiàn)代計(jì)算機(jī)中的計(jì)算機(jī)硬件。
從概念上來(lái)看,一臺(tái)簡(jiǎn)單的個(gè)人電腦可以被抽象為上面這種相似的模型,CPU、內(nèi)存、I/O 設(shè)備都和總線串聯(lián)起來(lái)并通過(guò)總線與其他設(shè)備進(jìn)行通信?,F(xiàn)代操作系統(tǒng)有著更為復(fù)雜的結(jié)構(gòu),會(huì)設(shè)計(jì)很多條總線,我們稍后會(huì)看到。暫時(shí)來(lái)講,這個(gè)模型能夠滿足我們的討論。
CPU 是計(jì)算機(jī)的大腦,它主要和內(nèi)存進(jìn)行交互,從內(nèi)存中提取指令并執(zhí)行它。一個(gè) CPU 的執(zhí)行周期是從內(nèi)存中提取第一條指令、解碼并決定它的類型和操作數(shù),執(zhí)行,然后再提取、解碼執(zhí)行后續(xù)的指令。重復(fù)該循環(huán)直到程序運(yùn)行完畢。
每個(gè) CPU 都有一組可以執(zhí)行的特定指令集。因此,x86 的 CPU 不能執(zhí)行 ARM 的程序并且 ARM 的 CPU 也不能執(zhí)行 x86 的程序。由于訪問(wèn)內(nèi)存獲取執(zhí)行或數(shù)據(jù)要比執(zhí)行指令花費(fèi)的時(shí)間長(zhǎng),因此所有的 CPU 內(nèi)部都會(huì)包含一些寄存器來(lái)保存關(guān)鍵變量和臨時(shí)結(jié)果。因此,在指令集中通常會(huì)有一些指令用于把關(guān)鍵字從內(nèi)存中加載到寄存器中,以及把關(guān)鍵字從寄存器存入到內(nèi)存中。還有一些其他的指令會(huì)把來(lái)自寄存器和內(nèi)存的操作數(shù)進(jìn)行組合,例如 add 操作就會(huì)把兩個(gè)操作數(shù)相加并把結(jié)果保存到內(nèi)存中。
除了用于保存變量和臨時(shí)結(jié)果的通用寄存器外,大多數(shù)計(jì)算機(jī)還具有幾個(gè)特殊的寄存器,這些寄存器對(duì)于程序員是可見(jiàn)的。其中之一就是 程序計(jì)數(shù)器(program counter),程序計(jì)數(shù)器會(huì)指示下一條需要從內(nèi)存提取指令的地址。提取指令后,程序計(jì)數(shù)器將更新為下一條需要提取的地址。
另一個(gè)寄存器是 堆棧指針(stack pointer),它指向內(nèi)存中當(dāng)前棧的頂端。堆棧指針會(huì)包含輸入過(guò)程中的有關(guān)參數(shù)、局部變量以及沒(méi)有保存在寄存器中的臨時(shí)變量。
還有一個(gè)寄存器是 PSW(Program Status Word) 程序狀態(tài)字寄存器,這個(gè)寄存器是由操作系統(tǒng)維護(hù)的8個(gè)字節(jié)(64位) long 類型的數(shù)據(jù)集合。它會(huì)跟蹤當(dāng)前系統(tǒng)的狀態(tài)。除非發(fā)生系統(tǒng)結(jié)束,否則我們可以忽略 PSW 。用戶程序通??梢宰x取整個(gè)PSW,但通常只能寫入其某些字段。PSW 在系統(tǒng)調(diào)用和 I / O 中起著重要作用。
操作系統(tǒng)必須了解所有的寄存器。在時(shí)間多路復(fù)用(time multiplexing) 的 CPU 中,操作系統(tǒng)往往停止運(yùn)行一個(gè)程序轉(zhuǎn)而運(yùn)行另外一個(gè)。每次當(dāng)操作系統(tǒng)停止運(yùn)行一個(gè)程序時(shí),操作系統(tǒng)會(huì)保存所有寄存器的值,以便于后續(xù)重新運(yùn)行該程序。
為了提升性能, CPU 設(shè)計(jì)人員早就放棄了同時(shí)去讀取、解碼和執(zhí)行一條簡(jiǎn)單的指令。許多現(xiàn)代的 CPU 都具有同時(shí)讀取多條指令的機(jī)制。例如,一個(gè) CPU 可能會(huì)有單獨(dú)訪問(wèn)、解碼和執(zhí)行單元,所以,當(dāng) CPU 執(zhí)行第 N 條指令時(shí),還可以對(duì) N + 1 條指令解碼,還可以讀取 N + 2 條指令。像這樣的組織形式被稱為 流水線(pipeline),
比流水線更先進(jìn)的設(shè)計(jì)是 超標(biāo)量(superscalar)CPU,下面是超標(biāo)量 CPU 的設(shè)計(jì)
在上面這個(gè)設(shè)計(jì)中,存在多個(gè)執(zhí)行單元,例如,一個(gè)用來(lái)進(jìn)行整數(shù)運(yùn)算、一個(gè)用來(lái)浮點(diǎn)數(shù)運(yùn)算、一個(gè)用來(lái)布爾運(yùn)算。兩個(gè)或者更多的指令被一次性取出、解碼并放入緩沖區(qū)中,直至它們執(zhí)行完畢。只要一個(gè)執(zhí)行單元空閑,就會(huì)去檢查緩沖區(qū)是否有可以執(zhí)行的指令。如果有,就把指令從緩沖區(qū)中取出并執(zhí)行。這種設(shè)計(jì)的含義是應(yīng)用程序通常是無(wú)序執(zhí)行的。在大多數(shù)情況下,硬件負(fù)責(zé)保證這種運(yùn)算的結(jié)果與順序執(zhí)行指令時(shí)的結(jié)果相同。
除了用在嵌入式系統(tǒng)中非常簡(jiǎn)單的 CPU 之外,多數(shù) CPU 都有兩種模式,即前面已經(jīng)提到的內(nèi)核態(tài)和用戶態(tài)。通常情況下,PSW 寄存器中的一個(gè)二進(jìn)制位會(huì)控制當(dāng)前狀態(tài)是內(nèi)核態(tài)還是用戶態(tài)。當(dāng)運(yùn)行在內(nèi)核態(tài)時(shí),CPU 能夠執(zhí)行任何指令集中的指令并且能夠使用硬件的功能。在臺(tái)式機(jī)和服務(wù)器上,操作系統(tǒng)通常以內(nèi)核模式運(yùn)行,從而可以訪問(wèn)完整的硬件。在大多數(shù)嵌入式系統(tǒng)中,一部分運(yùn)行在內(nèi)核態(tài)下,剩下的一部分運(yùn)行在用戶態(tài)下。
用戶應(yīng)用程序通常運(yùn)行在用戶態(tài)下,在用戶態(tài)下,CPU 只能執(zhí)行指令集中的一部分并且只能訪問(wèn)硬件的一部分功能。一般情況下,在用戶態(tài)下,有關(guān) I/O 和內(nèi)存保護(hù)的所有指令是禁止執(zhí)行的。當(dāng)然,設(shè)置 PSW 模式的二進(jìn)制位為內(nèi)核態(tài)也是禁止的。
為了獲取操作系統(tǒng)的服務(wù),用戶程序必須使用 系統(tǒng)調(diào)用(system call),系統(tǒng)調(diào)用會(huì)轉(zhuǎn)換為內(nèi)核態(tài)并且調(diào)用操作系統(tǒng)。TRAP 指令用于把用戶態(tài)切換為內(nèi)核態(tài)并啟用操作系統(tǒng)。當(dāng)有關(guān)工作完成之后,在系統(tǒng)調(diào)用后面的指令會(huì)把控制權(quán)交給用戶程序。我們會(huì)在后面探討操作系統(tǒng)的調(diào)用細(xì)節(jié)。
需要注意的是操作系統(tǒng)在進(jìn)行系統(tǒng)調(diào)用時(shí)會(huì)存在陷阱。大部分的陷阱會(huì)導(dǎo)致硬件發(fā)出警告,比如說(shuō)試圖被零除或浮點(diǎn)下溢等你。在所有的情況下,操作系統(tǒng)都能得到控制權(quán)并決定如何處理異常情況。有時(shí),由于出錯(cuò)的原因,程序不得不停止。
Intel Pentinum 4也就是奔騰處理器引入了被稱為多線程(multithreading) 或 超線程(hyperthreading, Intel 公司的命名) 的特性,x86 處理器和其他一些 CPU 芯片就是這樣做的。包括 SSPARC、Power5、Intel Xeon 和 Intel Core 系列 。近似地說(shuō),多線程允許 CPU 保持兩個(gè)不同的線程狀態(tài)并且在納秒級(jí)(nanosecond) 的時(shí)間完成切換。線程是一種輕量級(jí)的進(jìn)程,我們會(huì)在后面說(shuō)到。例如,如果一個(gè)進(jìn)程想要從內(nèi)存中讀取指令(這通常會(huì)經(jīng)歷幾個(gè)時(shí)鐘周期),多線程 CPU 則可以切換至另一個(gè)線程。多線程不會(huì)提供真正的并行處理。在一個(gè)時(shí)刻只有一個(gè)進(jìn)程在運(yùn)行。
對(duì)于操作系統(tǒng)來(lái)講,多線程是有意義的,因?yàn)槊總€(gè)線程對(duì)操作系統(tǒng)來(lái)說(shuō)都像是一個(gè)單個(gè)的 CPU。比如一個(gè)有兩個(gè) CPU 的操作系統(tǒng),并且每個(gè) CPU 運(yùn)行兩個(gè)線程,那么這對(duì)于操作系統(tǒng)來(lái)說(shuō)就可能是 4 個(gè) CPU。
除了多線程之外,現(xiàn)在許多 CPU 芯片上都具有四個(gè)、八個(gè)或更多完整的處理器或內(nèi)核。多核芯片在其上有效地承載了四個(gè)微型芯片,每個(gè)微型芯片都有自己的獨(dú)立CPU。
如果要說(shuō)在絕對(duì)核心數(shù)量方面,沒(méi)有什么能贏過(guò)現(xiàn)代 GPU(Graphics Processing Unit),GPU 是指由成千上萬(wàn)個(gè)微核組成的處理器。它們擅長(zhǎng)處理大量并行的簡(jiǎn)單計(jì)算。
計(jì)算機(jī)中第二個(gè)主要的組件就是內(nèi)存。理想情況下,內(nèi)存應(yīng)該非??焖?比執(zhí)行一條指令要快,從而不會(huì)拖慢 CPU 執(zhí)行效率),而且足夠大且便宜,但是目前的技術(shù)手段無(wú)法滿足三者的需求。于是采用了不同的處理方式,存儲(chǔ)器系統(tǒng)采用一種分層次的結(jié)構(gòu)
頂層的存儲(chǔ)器速度最高,但是容量最小,成本非常高,層級(jí)結(jié)構(gòu)越向下,其訪問(wèn)效率越慢,容量越大,但是造價(jià)也就越便宜。
存儲(chǔ)器的頂層是 CPU 中的寄存器,它們用和 CPU 一樣的材料制成,所以和 CPU 一樣快。程序必須在軟件中自行管理這些寄存器(即決定如何使用它們)
位于寄存器下面的是高速緩存,它多數(shù)由硬件控制。主存被分割成高速緩存行(cache lines) 為 64 字節(jié),內(nèi)存地址的 0 - 63 對(duì)應(yīng)高速緩存行 0 ,地址 64 - 127 對(duì)應(yīng)高速緩存行的 1,等等。使用最頻繁的高速緩存行保存在位于 CPU 內(nèi)部或非常靠近 CPU 的高速緩存中。當(dāng)應(yīng)用程序需要從內(nèi)存中讀取關(guān)鍵詞的時(shí)候,高速緩存的硬件會(huì)檢查所需要的高速緩存行是否在高速緩存中。如果在的話,那么這就是高速緩存命中(cache hit)。高速緩存滿足了該請(qǐng)求,并且沒(méi)有通過(guò)總線將內(nèi)存請(qǐng)求發(fā)送到主內(nèi)存。高速緩存命中通常需要花費(fèi)兩個(gè)時(shí)鐘周期。緩存未命中需要從內(nèi)存中提取,這會(huì)消耗大量的時(shí)間。高速緩存行會(huì)限制容量的大小因?yàn)樗脑靸r(jià)非常昂貴。有一些機(jī)器會(huì)有兩個(gè)或者三個(gè)高速緩存級(jí)別,每一級(jí)高速緩存比前一級(jí)慢且容量更大。
緩存在計(jì)算機(jī)很多領(lǐng)域都扮演了非常重要的角色,不僅僅是 RAM 緩存行。
隨機(jī)存儲(chǔ)器(RAM): 內(nèi)存中最重要的一種,表示既可以從中讀取數(shù)據(jù),也可以寫入數(shù)據(jù)。當(dāng)機(jī)器關(guān)閉時(shí),內(nèi)存中的信息會(huì) 丟失。
大量的可用資源被劃分為小的部分,這些可用資源的一部分會(huì)獲得比其他資源更頻繁的使用權(quán),緩存經(jīng)常用來(lái)提升性能。操作系統(tǒng)無(wú)時(shí)無(wú)刻的不在使用緩存。例如,大多數(shù)操作系統(tǒng)在主機(jī)內(nèi)存中保留(部分)頻繁使用的文件,以避免重復(fù)從磁盤重復(fù)獲取。舉個(gè)例子,類似于 /home/ast/projects/minix3/src/kernel/clock.c 這樣的場(chǎng)路徑名轉(zhuǎn)換成的文件所在磁盤地址的結(jié)果也可以保存緩存中,以避免重復(fù)尋址。另外,當(dāng)一個(gè) Web 頁(yè)面(URL) 的地址轉(zhuǎn)換為網(wǎng)絡(luò)地址(IP地址)后,這個(gè)轉(zhuǎn)換結(jié)果也可以緩存起來(lái)供將來(lái)使用。
在任何緩存系統(tǒng)中,都會(huì)有下面這幾個(gè)噬需解決的問(wèn)題
并不是每個(gè)問(wèn)題都與每種緩存情況有關(guān)。對(duì)于 CPU 緩存中的主存緩存行,當(dāng)有緩存未命中時(shí),就會(huì)調(diào)入新的內(nèi)容。通常通過(guò)所引用內(nèi)存地址的高位計(jì)算應(yīng)該使用的緩存行。
緩存是解決問(wèn)題的一種好的方式,所以現(xiàn)代 CPU 設(shè)計(jì)了兩種緩存。第一級(jí)緩存或者說(shuō)是 L1 cache 總是位于 CPU 內(nèi)部,用來(lái)將已解碼的指令調(diào)入 CPU 的執(zhí)行引擎。對(duì)于那些頻繁使用的關(guān)鍵字,多數(shù)芯片有第二個(gè) L1 cache 。典型的 L1 cache 的大小為 16 KB。另外,往往還設(shè)有二級(jí)緩存,也就是 L2 cache,用來(lái)存放最近使用過(guò)的關(guān)鍵字,一般是兆字節(jié)為單位。L1 cache 和 L2 cache 最大的不同在于是否存在延遲。訪問(wèn) L1 cache 沒(méi)有任何的延遲,然而訪問(wèn) L2 cache 會(huì)有 1 - 2 個(gè)時(shí)鐘周期的延后。
什么是時(shí)鐘周期?計(jì)算機(jī)處理器或 CPU 的速度由時(shí)鐘周期來(lái)確定,該時(shí)鐘周期是振蕩器兩個(gè)脈沖之間的時(shí)間量。一般而言,每秒脈沖數(shù)越高,計(jì)算機(jī)處理器處理信息的速度就越快。 時(shí)鐘速度以 Hz 為單位測(cè)量,通常為兆赫(MHz)或千兆赫(GHz)。 例如,一個(gè)4 GHz處理器每秒執(zhí)行4,000,000,000個(gè)時(shí)鐘周期。
計(jì)算機(jī)處理器可以在每個(gè)時(shí)鐘周期執(zhí)行一條或多條指令,這具體取決于處理器的類型。 早期的計(jì)算機(jī)處理器和較慢的 CPU 在每個(gè)時(shí)鐘周期只能執(zhí)行一條指令,而現(xiàn)代處理器在每個(gè)時(shí)鐘周期可以執(zhí)行多條指令。
在上面的層次結(jié)構(gòu)中再下一層是主存,這是內(nèi)存系統(tǒng)的主力軍,主存通常叫做 RAM(Random Access Memory),由于 1950 年代和 1960 年代的計(jì)算機(jī)使用微小的可磁化鐵氧體磁芯作為主存儲(chǔ)器,因此舊時(shí)有時(shí)將其稱為核心存儲(chǔ)器。所有不能再高速緩存中得到滿足的內(nèi)存訪問(wèn)請(qǐng)求都會(huì)轉(zhuǎn)往主存中。
除了主存之外,許多計(jì)算機(jī)還具有少量的非易失性隨機(jī)存取存儲(chǔ)器。它們與 RAM 不同,在電源斷電后,非易失性隨機(jī)訪問(wèn)存儲(chǔ)器并不會(huì)丟失內(nèi)容。ROM(Read Only Memory) 中的內(nèi)容一旦存儲(chǔ)后就不會(huì)再被修改。它非常快而且便宜。(如果有人問(wèn)你,有沒(méi)有什么又快又便宜的內(nèi)存設(shè)備,那就是 ROM 了)在計(jì)算機(jī)中,用于啟動(dòng)計(jì)算機(jī)的引導(dǎo)加載模塊(也就是 bootstrap )就存放在 ROM 中。另外,一些 I/O 卡也采用 ROM 處理底層設(shè)備控制。
EEPROM(Electrically Erasable PROM,) 和 閃存(flash memory) 也是非易失性的,但是與 ROM 相反,它們可以擦除和重寫。不過(guò)重寫它們需要比寫入 RAM 更多的時(shí)間,所以它們的使用方式與 ROM 相同,但是與 ROM 不同的是他們可以通過(guò)重寫字段來(lái)糾正程序中出現(xiàn)的錯(cuò)誤。
閃存也通常用來(lái)作為便攜性的存儲(chǔ)媒介。閃存是數(shù)碼相機(jī)中的膠卷,是便攜式音樂(lè)播放器的磁盤。閃存的速度介于 RAM 和磁盤之間。另外,與磁盤存儲(chǔ)器不同的是,如果閃存擦除的次數(shù)太多,會(huì)出現(xiàn)磨損。
還有一類是 CMOS,它是易失性的。許多計(jì)算機(jī)都會(huì)使用 CMOS 存儲(chǔ)器保持當(dāng)前時(shí)間和日期。
下一個(gè)層次是磁盤(硬盤),磁盤同 RAM 相比,每個(gè)二進(jìn)制位的成本低了兩個(gè)數(shù)量級(jí),而且經(jīng)常也有兩個(gè)數(shù)量級(jí)大的容量。磁盤唯一的問(wèn)題是隨機(jī)訪問(wèn)數(shù)據(jù)時(shí)間大約慢了三個(gè)數(shù)量級(jí)。磁盤訪問(wèn)慢的原因是因?yàn)榇疟P的構(gòu)造不同
磁盤是一種機(jī)械裝置,在一個(gè)磁盤中有一個(gè)或多個(gè)金屬盤片,它們以 5400rpm、7200rpm、10800rpm 或更高的速度旋轉(zhuǎn)。從邊緣開(kāi)始有一個(gè)機(jī)械臂懸橫在盤面上,這類似于老式播放塑料唱片 33 轉(zhuǎn)唱機(jī)上的拾音臂。信息會(huì)寫在磁盤一系列的同心圓上。在任意一個(gè)給定臂的位置,每個(gè)磁頭可以讀取一段環(huán)形區(qū)域,稱為磁道(track)。把一個(gè)給定臂的位置上的所有磁道合并起來(lái),組成了一個(gè)柱面(cylinder)。
每個(gè)磁道劃分若干扇區(qū),扇區(qū)的值是 512 字節(jié)。在現(xiàn)代磁盤中,較外部的柱面比較內(nèi)部的柱面有更多的扇區(qū)。機(jī)械臂從一個(gè)柱面移動(dòng)到相鄰的柱面大約需要 1ms。而隨機(jī)移到一個(gè)柱面的典型時(shí)間為 5ms 至 10ms,具體情況以驅(qū)動(dòng)器為準(zhǔn)。一旦磁臂到達(dá)正確的磁道上,驅(qū)動(dòng)器必須等待所需的扇區(qū)旋轉(zhuǎn)到磁頭之下,就開(kāi)始讀寫,低端硬盤的速率是50MB/s,而高速磁盤的速率是 160MB/s。
需要注意,固態(tài)硬盤(Solid State Disk, SSD)不是磁盤,固態(tài)硬盤并沒(méi)有可以移動(dòng)的部分,外形也不像唱片,并且數(shù)據(jù)是存儲(chǔ)在存儲(chǔ)器(閃存)中,與磁盤唯一的相似之處就是它也存儲(chǔ)了大量即使在電源關(guān)閉也不會(huì)丟失的數(shù)據(jù)。
許多計(jì)算機(jī)支持一種著名的虛擬內(nèi)存機(jī)制,這種機(jī)制使得期望運(yùn)行的存儲(chǔ)空間大于實(shí)際的物理存儲(chǔ)空間。其方法是將程序放在磁盤上,而將主存作為一部分緩存,用來(lái)保存最頻繁使用的部分程序,這種機(jī)制需要快速映像內(nèi)存地址,用來(lái)把程序生成的地址轉(zhuǎn)換為有關(guān)字節(jié)在 RAM 中的物理地址。這種映像由 CPU 中的一個(gè)稱為 存儲(chǔ)器管理單元(Memory Management Unit, MMU) 的部件來(lái)完成。
緩存和 MMU 的出現(xiàn)是對(duì)系統(tǒng)的性能有很重要的影響,在多道程序系統(tǒng)中,從一個(gè)程序切換到另一個(gè)程序的機(jī)制稱為 上下文切換(context switch),對(duì)來(lái)自緩存中的資源進(jìn)行修改并把其寫回磁盤是很有必要的。
CPU 和存儲(chǔ)器不是操作系統(tǒng)需要管理的全部,I/O 設(shè)備也與操作系統(tǒng)關(guān)系密切??梢詤⒖忌厦孢@個(gè)圖片,I/O 設(shè)備一般包括兩個(gè)部分:設(shè)備控制器和設(shè)備本身??刂破鞅旧硎且粔K芯片或者一組芯片,它能夠控制物理設(shè)備。它能夠接收操作系統(tǒng)的指令,例如,從設(shè)備中讀取數(shù)據(jù)并完成數(shù)據(jù)的處理。
在許多情況下,實(shí)際控制設(shè)備的過(guò)程是非常復(fù)雜而且存在諸多細(xì)節(jié)。因此控制器的工作就是為操作系統(tǒng)提供一個(gè)更簡(jiǎn)單(但仍然非常復(fù)雜)的接口。也就是屏蔽物理細(xì)節(jié)。任何復(fù)雜的東西都可以加一層代理來(lái)解決,這是計(jì)算機(jī)或者人類社會(huì)很普世的一個(gè)解決方案
I/O 設(shè)備另一部分是設(shè)備本身,設(shè)備本身有一個(gè)相對(duì)簡(jiǎn)單的接口,這是因?yàn)榻涌诩炔荒茏龊芏喙ぷ?,而且也已?jīng)被標(biāo)準(zhǔn)化了。例如,標(biāo)準(zhǔn)化后任何一個(gè) SATA 磁盤控制器就可以適配任意一種 SATA 磁盤,所以標(biāo)準(zhǔn)化是必要的。ATA 代表 高級(jí)技術(shù)附件(AT Attachment),而 SATA 表示串行高級(jí)技術(shù)附件(Serial ATA)。
AT 是啥?它是 IBM 公司的第二代個(gè)人計(jì)算機(jī)的高級(jí)技術(shù)成果,使用 1984 年推出的 6MHz 80286 處理器,這個(gè)處理器是當(dāng)時(shí)最強(qiáng)大的。
像是高級(jí)這種詞匯應(yīng)該慎用,否則 20 年后再回首很可能會(huì)被無(wú)情打臉。
現(xiàn)在 SATA 是很多計(jì)算機(jī)的標(biāo)準(zhǔn)硬盤接口。由于實(shí)際的設(shè)備接口隱藏在控制器中,所以操作系統(tǒng)看到的是對(duì)控制器的接口,這個(gè)接口和設(shè)備接口有很大區(qū)別。
每種類型的設(shè)備控制器都是不同的,所以需要不同的軟件進(jìn)行控制。專門與控制器進(jìn)行信息交流,發(fā)出命令處理指令接收響應(yīng)的軟件,稱為 設(shè)備驅(qū)動(dòng)程序(device driver)。 每個(gè)控制器廠家都應(yīng)該針對(duì)不同的操作系統(tǒng)提供不同的設(shè)備驅(qū)動(dòng)程序。
為了使設(shè)備驅(qū)動(dòng)程序能夠工作,必須把它安裝在操作系統(tǒng)中,這樣能夠使它在內(nèi)核態(tài)中運(yùn)行。要將設(shè)備驅(qū)動(dòng)程序裝入操作系統(tǒng),一般有三個(gè)途徑
每個(gè)設(shè)備控制器都有少量用于通信的寄存器,例如,一個(gè)最小的磁盤控制器也會(huì)有用于指定磁盤地址、內(nèi)存地址、扇區(qū)計(jì)數(shù)的寄存器。要激活控制器,設(shè)備驅(qū)動(dòng)程序回從操作系統(tǒng)獲取一條指令,然后翻譯成對(duì)應(yīng)的值,并寫入設(shè)備寄存器中,所有設(shè)備寄存器的結(jié)合構(gòu)成了 I/O 端口空間 。
在一些計(jì)算機(jī)中,設(shè)備寄存器會(huì)被映射到操作系統(tǒng)的可用地址空間,使他們能夠向內(nèi)存一樣完成讀寫操作。在這種計(jì)算機(jī)中,不需要專門的 I/O 指令,用戶程序可以被硬件阻擋在外,防止其接觸這些存儲(chǔ)器地址(例如,采用基址寄存器和變址寄存器)。在另一些計(jì)算機(jī)中,設(shè)備寄存器被放入一個(gè)專門的 I/O 端口空間,每個(gè)寄存器都有一個(gè)端口地址。在這些計(jì)算機(jī)中,特殊的 IN 和 OUT 指令會(huì)在內(nèi)核態(tài)下啟用,它能夠允許設(shè)備驅(qū)動(dòng)程序和寄存器進(jìn)行讀寫。前面第一種方式會(huì)限制特殊的 I/O 指令但是允許一些地址空間;后者不需要地址空間但是需要特殊的指令,這兩種應(yīng)用都很廣泛。
實(shí)現(xiàn)輸入和輸出的方式有三種。
在操作系統(tǒng)中,中斷是非常重要的,所以這需要更加細(xì)致的討論一下。
如上圖所示,這是一個(gè)三步的 I/O 過(guò)程,第一步,設(shè)備驅(qū)動(dòng)程序會(huì)通過(guò)寫入設(shè)備寄存器告訴控制器應(yīng)該做什么。然后,控制器啟動(dòng)設(shè)備。當(dāng)控制器完成讀取或?qū)懭氡桓嬷枰獋鬏數(shù)淖止?jié)后,它會(huì)在步驟 2 中使用某些總線向中斷控制器發(fā)送信號(hào)。如果中斷控制器準(zhǔn)備好了接收中斷信號(hào)(如果正忙于一個(gè)優(yōu)先級(jí)較高的中斷,則可能不會(huì)接收),那么它就會(huì)在 CPU 的一個(gè)引腳上面聲明。這就是步驟3
在第四步中,中斷控制器把該設(shè)備的編號(hào)放在總線上,這樣 CPU 可以讀取總線,并且知道哪個(gè)設(shè)備完成了操作(可能同時(shí)有多個(gè)設(shè)備同時(shí)運(yùn)行)。
一旦 CPU 決定去實(shí)施中斷后,程序計(jì)數(shù)器和 PSW 就會(huì)被壓入到當(dāng)前堆棧中并且 CPU 會(huì)切換到內(nèi)核態(tài)。設(shè)備編號(hào)可以作為內(nèi)存的一個(gè)引用,用來(lái)尋找該設(shè)備中斷處理程序的地址。這部分內(nèi)存稱作中斷向量(interrupt vector)。一旦中斷處理程序(中斷設(shè)備的設(shè)備驅(qū)動(dòng)程序的一部分)開(kāi)始后,它會(huì)移除棧中的程序計(jì)數(shù)器和 PSW 寄存器,并把它們進(jìn)行保存,然后查詢?cè)O(shè)備的狀態(tài)。在中斷處理程序全部完成后,它會(huì)返回到先前用戶程序尚未執(zhí)行的第一條指令,這個(gè)過(guò)程如下
當(dāng)另一個(gè)中斷處理程序正在運(yùn)行時(shí),中斷可能(并且經(jīng)常)發(fā)生在不合宜的時(shí)間。 因此,CPU 可以禁用中斷,并且可以在之后重啟中斷。在 CPU 關(guān)閉中斷后,任何已經(jīng)發(fā)出中斷的設(shè)備,可以繼續(xù)保持其中斷信號(hào)處理,但是 CPU 不會(huì)中斷,直至中斷再次啟用為止。如果在關(guān)閉中斷時(shí),已經(jīng)有多個(gè)設(shè)備發(fā)出了中斷信號(hào),中斷控制器將決定優(yōu)先處理哪個(gè)中斷,通常這取決于事先賦予每個(gè)設(shè)備的優(yōu)先級(jí),最高優(yōu)先級(jí)的設(shè)備優(yōu)先贏得中斷權(quán),其他設(shè)備則必須等待。
上面的結(jié)構(gòu)(簡(jiǎn)單個(gè)人計(jì)算機(jī)的組件圖)在小型計(jì)算機(jī)已經(jīng)使用了多年,并用在早期的 IBM PC 中。然而,隨著處理器核內(nèi)存變得越來(lái)越快,單個(gè)總線處理所有請(qǐng)求的能力也達(dá)到了上線,其中也包括 IBM PC 總線。必須放棄使用這種模式。其結(jié)果導(dǎo)致了其他總線的出現(xiàn),它們處理 I/O 設(shè)備以及 CPU 到存儲(chǔ)器的速度都更快。這種演變的結(jié)果導(dǎo)致了下面這種結(jié)構(gòu)的出現(xiàn)。
上圖中的 x86 系統(tǒng)包含很多總線,高速緩存、內(nèi)存、PCIe、PCI、USB、SATA 和 DMI,每條總線都有不同的傳輸速率和功能。操作系統(tǒng)必須了解所有的總線配置和管理。其中最主要的總線是 PCIe(Peripheral Component Interconnect Express) 總線。
Intel 發(fā)明的 PCIe 總線也是作為之前古老的 PCI 總線的繼承者,而古老的 PCI 總線也是為了取代古董級(jí)別的 ISA(Industry Standard Architecture) 總線而設(shè)立的。數(shù)十 Gb/s 的傳輸能力使得 PCIe 比它的前身快很多,而且它們本質(zhì)上也十分不同。直到發(fā)明 PCIe 的 2004 年,大多數(shù)總線都是并行且共享的。共享總線架構(gòu)(shared bus architeture) 表示多個(gè)設(shè)備使用一些相同的電線傳輸數(shù)據(jù)。因此,當(dāng)多個(gè)設(shè)備同時(shí)發(fā)送數(shù)據(jù)時(shí),此時(shí)你需要一個(gè)決策者來(lái)決定誰(shuí)能夠使用總線。而 PCIe 則不一樣,它使用專門的端到端鏈路。傳統(tǒng) PCI 中使用的并行總線架構(gòu)(parallel bus architecture) 表示通過(guò)多條電線發(fā)送相同的數(shù)據(jù)字。例如,在傳統(tǒng)的 PCI 總線上,一個(gè) 32 位數(shù)據(jù)通過(guò) 32 條并行的電線發(fā)送。而 PCIe 則不同,它選用了串行總線架構(gòu)(serial bus architecture),并通過(guò)單個(gè)連接(稱為通道)發(fā)送消息中的所有比特?cái)?shù)據(jù),就像網(wǎng)絡(luò)數(shù)據(jù)包一樣。這樣做會(huì)簡(jiǎn)化很多,因?yàn)椴辉俅_保所有 32 位數(shù)據(jù)在同一時(shí)刻準(zhǔn)確到達(dá)相同的目的地。通過(guò)將多個(gè)數(shù)據(jù)通路并行起來(lái),并行性仍可以有效利用。例如,可以使用 32 條數(shù)據(jù)通道并行傳輸 32 條消息。
在上圖結(jié)構(gòu)中,CPU 通過(guò) DDR3 總線與內(nèi)存對(duì)話,通過(guò) PCIe 總線與外圍圖形設(shè)備 (GPU)對(duì)話,通過(guò) DMI(Direct Media Interface)總線經(jīng)集成中心與所有其他設(shè)備對(duì)話。而集成控制中心通過(guò)串行總線與 USB 設(shè)備對(duì)話,通過(guò) SATA 總線與硬盤和 DVD 驅(qū)動(dòng)器對(duì)話,通過(guò) PCIe 傳輸以太網(wǎng)絡(luò)幀。
不僅如此,每一個(gè)核
USB(Univversal Serial Bus) 是用來(lái)將所有慢速 I/O 設(shè)備(比如鍵盤和鼠標(biāo))與計(jì)算機(jī)相連的設(shè)備。USB 1.0 可以處理總計(jì) 12 Mb/s 的負(fù)載,而 USB 2.0 將總線速度提高到 480Mb/s ,而 USB 3.0 能達(dá)到不小于 5Gb/s 的速率。所有的 USB 設(shè)備都可以直接連接到計(jì)算機(jī)并能夠立刻開(kāi)始工作,而不像之前那樣要求重啟計(jì)算機(jī)。
SCSI(Small Computer System Interface) 總線是一種高速總線,用在高速硬盤,掃描儀和其他需要較大帶寬的設(shè)備上?,F(xiàn)在,它們主要用在服務(wù)器和工作站中,速度可以達(dá)到 640MB/s 。
那么有了上面一些硬件再加上操作系統(tǒng)的支持,我們的計(jì)算機(jī)就可以開(kāi)始工作了,那么計(jì)算機(jī)的啟動(dòng)過(guò)程是怎樣的呢?下面只是一個(gè)簡(jiǎn)要版的啟動(dòng)過(guò)程
在每臺(tái)計(jì)算機(jī)上有一塊雙親板,也就是母板,母板也就是主板,它是計(jì)算機(jī)最基本也就是最重要的部件之一。主板一般為矩形電路板,上面安裝了組成計(jì)算機(jī)的主要電路系統(tǒng),一般有 BIOS 芯片、I/O 控制芯片、鍵盤和面板控制開(kāi)關(guān)接口、指示燈插接件、擴(kuò)充插槽、主板及插卡的直流電源供電接插件等元件。
在母板上有一個(gè)稱為 基本輸入輸出系統(tǒng)(Basic Input Output System, BIOS)的程序。在 BIOS 內(nèi)有底層 I/O 軟件,包括讀鍵盤、寫屏幕、磁盤I/O 以及其他過(guò)程。如今,它被保存在閃存中,它是非易失性的,但是當(dāng)BIOS 中發(fā)現(xiàn)錯(cuò)誤時(shí),可以由操作系統(tǒng)進(jìn)行更新。
在計(jì)算機(jī)啟動(dòng)(booted)時(shí),BIOS 開(kāi)啟,它會(huì)首先檢查所安裝的 RAM 的數(shù)量,鍵盤和其他基礎(chǔ)設(shè)備是否已安裝并且正常響應(yīng)。接著,它開(kāi)始掃描 PCIe 和 PCI 總線并找出連在上面的所有設(shè)備。即插即用的設(shè)備也會(huì)被記錄下來(lái)。如果現(xiàn)有的設(shè)備和系統(tǒng)上一次啟動(dòng)時(shí)的設(shè)備不同,則新的設(shè)備將被重新配置。
藍(lán)后,BIOS 通過(guò)嘗試存儲(chǔ)在 CMOS 存儲(chǔ)器中的設(shè)備清單嘗試啟動(dòng)設(shè)備
CMOS是 Complementary Metal Oxide Semiconductor(互補(bǔ)金屬氧化物半導(dǎo)體)的縮寫。它是指制造大規(guī)模集成電路芯片用的一種技術(shù)或用這種技術(shù)制造出來(lái)的芯片,是電腦主板上的一塊可讀寫的 RAM 芯片。因?yàn)榭勺x寫的特性,所以在電腦主板上用來(lái)保存 BIOS 設(shè)置完電腦硬件參數(shù)后的數(shù)據(jù),這個(gè)芯片僅僅是用來(lái)存放數(shù)據(jù)的。
而對(duì) BIOS 中各項(xiàng)參數(shù)的設(shè)定要通過(guò)專門的程序。BIOS 設(shè)置程序一般都被廠商整合在芯片中,在開(kāi)機(jī)時(shí)通過(guò)特定的按鍵就可進(jìn)入 BIOS 設(shè)置程序,方便地對(duì)系統(tǒng)進(jìn)行設(shè)置。因此 BIOS 設(shè)置有時(shí)也被叫做 CMOS 設(shè)置。
用戶可以在系統(tǒng)啟動(dòng)后進(jìn)入一個(gè) BIOS 配置程序,對(duì)設(shè)備清單進(jìn)行修改。然后,判斷是否能夠從外部 CD-ROM 和 USB 驅(qū)動(dòng)程序啟動(dòng),如果啟動(dòng)失敗的話(也就是沒(méi)有),系統(tǒng)將從硬盤啟動(dòng),boots 設(shè)備中的第一個(gè)扇區(qū)被讀入內(nèi)存并執(zhí)行。該扇區(qū)包含一個(gè)程序,該程序通常在引導(dǎo)扇區(qū)末尾檢查分區(qū)表以確定哪個(gè)分區(qū)處于活動(dòng)狀態(tài)。然后從該分區(qū)讀入第二個(gè)啟動(dòng)加載程序,該加載器從活動(dòng)分區(qū)中讀取操作系統(tǒng)并啟動(dòng)它。
然后操作系統(tǒng)會(huì)詢問(wèn) BIOS 獲取配置信息。對(duì)于每個(gè)設(shè)備來(lái)說(shuō),會(huì)檢查是否有設(shè)備驅(qū)動(dòng)程序。如果沒(méi)有,則會(huì)向用戶詢問(wèn)是否需要插入 CD-ROM 驅(qū)動(dòng)(由設(shè)備制造商提供)或者從 Internet 上下載。一旦有了設(shè)備驅(qū)動(dòng)程序,操作系統(tǒng)會(huì)把它們加載到內(nèi)核中,然后初始化表,創(chuàng)建所需的后臺(tái)進(jìn)程,并啟動(dòng)登錄程序或GUI。
操作系統(tǒng)已經(jīng)存在了大半個(gè)世紀(jì),在這段時(shí)期內(nèi),出現(xiàn)了各種類型的操作系統(tǒng),但并不是所有的操作系統(tǒng)都很出名,下面就羅列一些比較出名的操作系統(tǒng)
高端一些的操作系統(tǒng)是大型機(jī)操作系統(tǒng),這些大型操作系統(tǒng)可在大型公司的數(shù)據(jù)中心找到。這些計(jì)算機(jī)的 I/O 容量與個(gè)人計(jì)算機(jī)不同。一個(gè)大型計(jì)算機(jī)有 1000 個(gè)磁盤和數(shù)百萬(wàn) G 字節(jié)的容量是很正常,如果有這樣一臺(tái)個(gè)人計(jì)算機(jī)朋友會(huì)很羨慕。大型機(jī)也在高端 Web 服務(wù)器、大型電子商務(wù)服務(wù)站點(diǎn)上。
下一個(gè)層次是服務(wù)器操作系統(tǒng)。它們運(yùn)行在服務(wù)器上,服務(wù)器可以是大型個(gè)人計(jì)算機(jī)、工作站甚至是大型機(jī)。它們通過(guò)網(wǎng)絡(luò)為若干用戶服務(wù),并且允許用戶共享硬件和軟件資源。服務(wù)器可提供打印服務(wù)、文件服務(wù)或 Web 服務(wù)。Internet 服務(wù)商運(yùn)行著許多臺(tái)服務(wù)器機(jī)器,為用戶提供支持,使 Web 站點(diǎn)保存 Web 頁(yè)面并處理進(jìn)來(lái)的請(qǐng)求。典型的服務(wù)器操作系統(tǒng)有 Solaris、FreeBSD、Linux 和 Windows Server 201x
獲得大型計(jì)算能力的一種越來(lái)越普遍的方式是將多個(gè) CPU 連接到一個(gè)系統(tǒng)中。依據(jù)它們連接方式和共享方式的不同,這些系統(tǒng)稱為并行計(jì)算機(jī),多計(jì)算機(jī)或多處理器。他們需要專門的操作系統(tǒng),不過(guò)通常采用的操作系統(tǒng)是配有通信、連接和一致性等專門功能的服務(wù)器操作系統(tǒng)的變體。
個(gè)人計(jì)算機(jī)中近來(lái)出現(xiàn)了多核芯片,所以常規(guī)的臺(tái)式機(jī)和筆記本電腦操作系統(tǒng)也開(kāi)始與小規(guī)模多處理器打交道,而核的數(shù)量正在與時(shí)俱進(jìn)。許多主流操作系統(tǒng)比如 Windows 和 Linux 都可以運(yùn)行在多核處理器上。
接下來(lái)一類是個(gè)人計(jì)算機(jī)操作系統(tǒng)?,F(xiàn)代個(gè)人計(jì)算機(jī)操作系統(tǒng)支持多道處理程序。在啟動(dòng)時(shí),通常有幾十個(gè)程序開(kāi)始運(yùn)行,它們的功能是為單個(gè)用戶提供良好的支持。這類系統(tǒng)廣泛用于字處理、電子表格、游戲和 Internet 訪問(wèn)。常見(jiàn)的例子是 Linux、FreeBSD、Windows 7、Windows 8 和蘋果公司的 OS X 。
隨著硬件越來(lái)越小化,我們看到了平板電腦、智能手機(jī)和其他掌上計(jì)算機(jī)系統(tǒng)。掌上計(jì)算機(jī)或者 PDA(Personal Digital Assistant),個(gè)人數(shù)字助理 是一種可以握在手中操作的小型計(jì)算機(jī)。這部分市場(chǎng)已經(jīng)被谷歌的 Android 系統(tǒng)和蘋果的 IOS主導(dǎo)。
嵌入式操作系統(tǒng)用來(lái)控制設(shè)備的計(jì)算機(jī)中運(yùn)行,這種設(shè)備不是一般意義上的計(jì)算機(jī),并且不允許用戶安裝軟件。典型的例子有微波爐、汽車、DVD 刻錄機(jī)、移動(dòng)電話以及 MP3 播放器一類的設(shè)備。所有的軟件都運(yùn)行在 ROM 中,這意味著應(yīng)用程序之間不存在保護(hù),從而獲得某種簡(jiǎn)化。主要的嵌入式系統(tǒng)有 Linux、QNX 和 VxWorks
有許多用途需要配置微小傳感器節(jié)點(diǎn)網(wǎng)絡(luò)。這些節(jié)點(diǎn)是一種可以彼此通信并且使用無(wú)線通信基站的微型計(jì)算機(jī)。這類傳感器網(wǎng)絡(luò)可以用于建筑物周邊保護(hù)、國(guó)土邊界保衛(wèi)、森林火災(zāi)探測(cè)、氣象預(yù)測(cè)用的溫度和降水測(cè)量等。
每個(gè)傳感器節(jié)點(diǎn)是一個(gè)配有 CPU、RAM、ROM 以及一個(gè)或多個(gè)環(huán)境傳感器的實(shí)實(shí)在在的計(jì)算機(jī)。節(jié)點(diǎn)上運(yùn)行一個(gè)小型但是真是的操作系統(tǒng),通常這個(gè)操作系統(tǒng)是事件驅(qū)動(dòng)的,可以響應(yīng)外部事件。
另一類操作系統(tǒng)是實(shí)時(shí)操作系統(tǒng),這些系統(tǒng)的特征是將時(shí)間作為關(guān)鍵參數(shù)。例如,在工業(yè)過(guò)程控制系統(tǒng)中,工廠中的實(shí)時(shí)計(jì)算機(jī)必須收集生產(chǎn)過(guò)程的數(shù)據(jù)并用有關(guān)數(shù)據(jù)控制機(jī)器。如果某個(gè)動(dòng)作必須要在規(guī)定的時(shí)刻發(fā)生,這就是硬實(shí)時(shí)系統(tǒng)??梢栽诠I(yè)控制、民用航空、軍事以及類似應(yīng)用中看到很多這樣的系統(tǒng)。另一類系統(tǒng)是 軟實(shí)時(shí)系統(tǒng),在這種系統(tǒng)中,雖然不希望偶爾違反最終時(shí)限,但仍可以接受,并不會(huì)引起任何永久性損害。數(shù)字音頻或多媒體系統(tǒng)就是這類系統(tǒng)。智能手機(jī)也是軟實(shí)時(shí)系統(tǒng)。
最小的操作系統(tǒng)運(yùn)行在智能卡上。智能卡是一種包含一塊 CPU 芯片的信用卡。它有非常嚴(yán)格的運(yùn)行能耗和存儲(chǔ)空間的限制。有些卡具有單項(xiàng)功能,如電子支付;有些智能卡是面向 Java 的。這意味著在智能卡的 ROM 中有一個(gè) Java 虛擬機(jī)(Java Virtual Machine, JVM)解釋器。
大部分操作系統(tǒng)提供了特定的基礎(chǔ)概念和抽象,例如進(jìn)程、地址空間、文件等,它們是需要理解的核心內(nèi)容。下面我們會(huì)簡(jiǎn)要介紹一些基本概念,為了說(shuō)明這些概念,我們會(huì)不時(shí)的從 UNIX 中提出示例,相同的示例也會(huì)存在于其他系統(tǒng)中,我們后面會(huì)進(jìn)行介紹。
文章參考:
《現(xiàn)代操作系統(tǒng)》第四版
https://baike.baidu.com/item/操作系統(tǒng)/192?fr=aladdin
《Modern Operating System》forth edition
http://faculty.cs.niu.edu/~hutchins/csci360/hchnotes/psw.htm
https://www.computerhope.com/jargon/c/clockcyc.htm
《B站-操作系統(tǒng)》
https://www.bilibili.com/video/av9555596?from=search&seid=8107077283516919308
聯(lián)系客服