《現代操作系統》筆記第一章 引論

第一章 引論

多數計算機有兩種運行模式:內核態和用戶態

操作系統運行在內核態(又稱管態、和心態)中,用於對所有硬件的完全訪問權,能使用硬件可以運行的任何機器指令。

其它軟件運行在用戶態,只能使用機器指令中的一個子集,特別禁止運行那些會影響機器的控制或者I/O操作的指令。

但在嵌入式系統(沒有內核態)和解釋系統(基於Java的操作系統,它採用解釋方式而非硬件方式區分組件),上述區別是模糊的。

在許多系統中,一些在用戶態上運行的程序協助操作系統運行特權功能,比如修改密碼的程序,它不是操作系統的一部分,也不在內核態運行,但具有敏感功能。在這類系統中,很難將操作系統與其它軟件劃分開來。

1.1 什麼是操作系統

1.1.1 作爲擴展機器的操作系統

體系結構:指令集、存儲組織、I/O和總線結構

操作系統的任務是創建好的抽象,並實現和管理它所創建的抽象對象

操作系統的一個主要任務是隱藏硬件,呈現給程序(及程序員)良好、清晰、優雅、一致的抽象

1.1.2 作爲資源管理者的操作系統

從這個角度看,操作系統的任務是在相互競爭的程序之間有序的控制處理器、存儲器以及其他I/O接口設備的分配

有兩種方式實現多路複用資源:

  • 時間上覆用:當一種資源在時間上覆用時,不同的程序或用戶輪流的使用它。比如多個程序使用一個CPU
  • 空間上覆用:每個客戶都得到資源的一部分。比如多個程序分割內存

1.3 計算機硬件介紹

1.3.1 處理器

程序員可見的專用寄存器:

  • 程序計數器:保存了將要取出的下一條指令的內存地址,當指令取出後,程序計數器被更新以指向後繼的指令
  • 堆棧指針:指向內存中當前棧的頂端。該棧包含了所有執行過程的棧幀
  • 程序狀態字:包含了條件碼位、CPU優先級、模式(用戶態或者內核態),以及各種控制位

在多數流水線設計中,一旦一條指令被取進流水線中,它就必須執行完畢,即使前一條取出的指令是條件轉移,它也必須執行完畢。

超標量CPU:在這種設計中,有多個執行單元。比如一個CPU用來做整型算術運算,一個CPU用來進行浮點算術運算。設置一個指令緩衝區,任何執行單元有空閒時,都在緩衝區尋找可執行的指令。這種設計會造成程序的指令經常不按順序執行。

爲了從操作系統獲得服務,用戶程序必須使用系統調用以陷入內核並調用操作系統。計算機使用陷阱而不是一條指令來執行系統調用。

在程序發生異常時,操作系統首先獲得控制權,再檢查程序是否提前宣佈處理該異常,如果有控制權交給程序,如果無,由操作系統處理異常,可能會停止程序,也可能會忽略異常。

多線程(超線程):多線程允許CPU保持兩個不同的線程狀態,然後在納秒級的時間尺度內來回切換。多線程並不提供真正的並行處理,在一個時刻只有一個進程在運行,但是線程的切換時間減少到納秒數量級

現代GPU擅長處理大量並行的簡單計算,比如在圖像應用中渲染多邊形,它們不太能勝任串行任務嗎,並且很難編程。

1.3.2 存儲器

典型存儲層次結構:寄存器、高速緩存、主存、磁盤

緩存系統都需要儘快考慮的問題:

  • 何時把一個新的內容放入緩存
  • 把新內容放在緩存的哪一行上
  • 在需要時,應該把哪個內容從緩存中移走
  • 應該把新移走的內容放在下級存儲器的何處

二級緩存:

  • L1緩存:在CPU中,用來將已解碼的指令調入CPU,大小通常爲16KB
  • L2緩存:用來存放最近使用的若干兆字節的內存字

二級緩存的差別在時序,對L1的訪問,不存在延時;對L2的訪問。會延時1或者2個時鐘週期

1.3.5 總線

CPU通過DDR3總線和內存對話,通過PCIe總線與外圍圖形設備對話,通過DMI總線經集成中心與所有其他設備對話,而集成中心通過串行總線與USB設備對話,通過SATA總線大於硬盤和DVD驅動器對話,通過PCIe傳輸以太網絡幀

1.3.6 啓動計算機

計算機啓動時,BIOS開始運行。它首先檢查所安裝的RAM數量,鍵盤和其他基本設備是否已經安裝並正常響應。接着,它開始掃描PCIe和PCI總線並找出連接在上面的設備。即插即用設備也被記錄下來。如果現有的設備和系統上一次啓動的設備不同,則新的設備將被配置。

然後,BIOS通過嘗試存儲在CMOS存儲器中的設備清單決定啓動設備。啓動設備上第一個扇區被讀入內存並執行。這個扇區中包含一個對保存在啓動扇區末尾的分區表檢查的程序,以確定哪個分區是活動的。然後,從該分區讀入第二個啓動裝載模塊。來自活動分區的這個裝載模塊讀入操作系統,並啓動之。

然後,操作系統詢問BIOS,以獲得配置信息。對於每種設備,系統檢查對應的設備驅動程序是否存在。如果沒有,則要求用戶插入含有驅動程序的CD-ROM或者從網絡上下載驅動程序。一旦有了全部的設備驅動程序,操作系統就將它們調入內核。然後初始化有關表格,創建需要的任何背景進程,並在每個終端上啓動登錄程序或者GUI。

1.5 操作系統概念

1.5.1 進程

進程本質上是正在執行的一個程序。與進程相關的是地址空間,這是從某個最小的存儲位置到某個最大值存儲位置的列表。在這個地址空間中,進程可以讀寫並存放程序需要的信息。進程基本是容納運行一個程序所需要所有信息的容器。與一個進程有關的信息除了存放在自身的地址空間外,均放在操作系統的一張表中,稱爲進程表,它是數組或者是鏈表結構,當前存在的每一個進程都會佔用一項。

一個進程包括:進程的地址空間(磁芯映像)以及對應的進程表項。

1.5.3 文件

進程和文件都可以組織成樹狀結構,但又幾個不同之處:

  • 一般進程的樹狀結構層次不深(很少超過三層),而文件的樹狀結構層次多達四層
  • 進程樹層次結構是暫時的,而目錄層次則可能存在數年之久
  • 對於進程,只有父進程可以訪問子進程,而在文件和目錄中通常存在一種機制,使文件所有者之外的其它用戶也可以訪問該文件。

在讀寫文件之前,首先要打開文件,檢查其訪問權限。如果權限許可,系統返回一個小整數,稱爲文件描述符,供後續操作使用。如果禁止訪問,系統返回一個錯誤碼。

在UNIX中,有兩類特殊文件:

  • 塊特殊文件:可隨機存取的塊組成的設備,如磁盤。
  • 字符特殊文件:打印機、調制解調器和其它接受或者輸出字符流的設備。

管道是一種虛文件,可連接兩個進程,兩個進程希望通過管道對話,它們必須提前設置該管道。如果進程發現它所寫入的輸出文件不是真正的文件而是管道,則需要使用特殊的系統調用。

1.5.5 保護

UNIX操作系統通過對每個文件賦予一個9位的二進制保護代碼。該保護代碼有三個3位字段,一個用於所有者,一個用於與所有者同組的其它成員,一個用於其他人。每個字段一位用來標識讀訪問、一位標識寫訪問、一位標識執行訪問。這些位就是知名的rwx位。

rwxr-x—x就是所有者可以讀、寫、執行,同組可以讀、執行,其他人可以執行。

1.5.7 個體重複系統發育

技術的變化會導致某些思想過時並迅速消失,但技術的另一種變化還可能使某些思想再次復活。

這由於此,更重要的是要理解爲什麼一個概念會過時,什麼樣環境的變化又會啓用“過時概念”。

軟件的發展是受制於技術的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章