天天看點

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

第一章 引論

多數計算機有兩種運作模式:核心态和使用者态

作業系統運作在核心态(又稱管态、和心态)中,用于對所有硬體的完全通路權,能使用硬體可以運作的任何機器指令。

其它軟體運作在使用者态,隻能使用機器指令中的一個子集,特别禁止運作那些會影響機器的控制或者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 個體重複系統發育

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

這由于此,更重要的是要了解為什麼一個概念會過時,什麼樣環境的變化又會啟用“過時概念”。

軟體的發展是受制于技術的。

繼續閱讀