作業系統複習攻略:引論
作業系統所處的位置
多數計算機由兩種執行模式:核心態和使用者態。軟體中最基礎的部分是作業系統,它執行在核心態,在這個模式中,作業系統具有對所有硬體的完全訪問權,可以執行機器能夠執行的任何指令。軟體的其餘部分執行在使用者態下,只使用機器指令中的一個子集。
使用者介面程式(shell 或 GUI)處於使用者態程式中的最低層次,允許使用者執行其他程式。
作業系統執行在裸機之上,為所有其他軟體提供基礎的執行環境。作業系統中的程式由硬體進行保護,防止使用者試圖對其進行修改。
什麼是作業系統
作業系統主要有兩個方面的重要作用:管理系統中的各種資源,併為使用者提供良好的介面。
作業系統有兩個基本上獨立的任務:為應用程式提供一個資源集的清晰抽象,並管理這些硬體資源。
- 作為擴充套件機器:例如,硬碟驅動。
- 作為資源管理者:資源管理包括用兩種不同的方式實現多路複用(共享)資源:時間複用和空間複用。
作業系統的歷史
- 真空管和穿孔卡片
- 電晶體和批處理系統
- 積體電路和多道程式設計(SPOOLing)
- 個人計算機
SPOOLing 假離線
同時的外部裝置聯機操作(Simultaneous Peripheral Operation On-Line)
SPOOLing 系統的三大組成部分:
- 輸入井和輸出井
- 輸入緩衝和輸出緩衝
- 輸入程序和輸出程序
若有程序要求對它列印輸出時,SPOOLing系統並不是將這臺印表機直接分配給程序,而是在共享裝置(磁碟或磁鼓)上的輸出SPOOLing儲存區中為其分配一塊儲存空間,程序的輸出資料以檔案形式存放於此。各程序的資料輸出檔案形成了一個輸出佇列,由輸出SPOOLing系統控制這臺印表機程序,依次將佇列中的輸出檔案實際列印輸出。在SPOOLing 系統中,實際上並沒有為任何程序分配,而只是在輸入井和輸出井中,為程序分配一儲存區和建立一張I/O請求表。這樣,便把獨佔裝置改造為共享裝置。
技術特點
- 提高了I/O速度。從對低速I/O裝置進行的I/O操作變為對輸入井或輸出井的操作,如同離線操作一樣,提高了I/O速度,緩和了CPU與低速I/O裝置速度不匹配的矛盾。
- 裝置並沒有分配給任何程序。在輸入井或輸出井中,分配給程序的是一儲存區和建立一張I/O請求表。
- 實現了虛擬裝置功能。多個程序同時使用一獨享裝置,而對每一程序而言,都認為自己獨佔這一裝置,不過,該裝置是邏輯上的裝置。
工作原理
1、SPOOLing的含義是什麼?試述SPOOLing系統的特點、功能以及控制過程。
答:SPOOLing是Simultaneous Peripheral Operation On-Line(即外部裝置聯機並行操作)的縮寫,它是關於慢速字元裝置如何與計算機主機交換資訊的一種技術,通常稱為"假離線技術"。SPOOLing技術是在通道技術和多道程式設計基礎上產生的,它由主機和相應的通道共同承擔作業的輸入輸出工作,利用磁碟作為後援儲存器,實現外圍裝置同時聯機操作。SPOOLing系統由專門負責I/O的常駐記憶體的程序以及輸入井、輸出井組成;它將獨佔裝置改造為共享裝置,實現了虛擬裝置功能。
2、SPOOLing技術如何使一臺印表機虛擬成多臺印表機?
答:將一臺獨享印表機改造為可供多個使用者共享的印表機,是應用SPOOLing技術的典型例項。具體做法是:系統對於使用者的列印輸出,但並不真正把印表機分配給該使用者程序,而是先在輸出井中申請一個空閒盤塊區,並將要列印的資料送入其中;然後為使用者申請並填寫請求打印表,將該表掛到請求列印佇列上。若印表機空閒,輸出程式從請求列印隊首取表,將要列印的資料從輸出井傳送到記憶體緩衝區,再進行列印,直到列印佇列為空。
計算機硬體簡介
- 處理器
- 儲存器
- 磁碟
- I/O裝置
- 匯流排
- BIOS(基本輸入輸出系統,Basic Input Output Stream)
作業系統概念
程序
程序本質上是正在執行的一個程式。與每個程序相關的是地址空間,這是從某個最小值的儲存位置(通常是零)到某個最大值的儲存位置的列表。
與一個程序有關的所有資訊,除了該程序自身地址空間的內容以外,均存放在作業系統的一張表中,稱為程序表,程序表是陣列或連結串列結構,當前存在的每個程序都要佔用其中的一項。
一個掛起的程序包括:程序的地址空間(磁芯映像,紀念過去使用的磁芯儲存器,即主存),以及對應的程序表項(其中包括暫存器以及稍後重啟該程序所需要的許多其他資訊)。
與程序管理有關的最關鍵的系統呼叫是那些進行程序建立和程序終止的系統呼叫。
一個程序能夠建立一個或多個子程序,而這些子程序又可以建立子程序,得到程序樹。合作完成某些作業的相關程序經常需要彼此通訊以便同步它們的行為,這種通訊稱為程序間通訊。
由於定時器到期,或各種由硬體檢測出來的陷阱,如非法指令或使用了無效地址,作業系統會向該程序傳送一個警告訊號,此訊號引起該程序暫時掛起,系統將其暫存器的值儲存到堆疊,並開始執行一個特別的訊號處理過程,如重新發送可能丟失的資訊。
系統管理器授權每個程序使用一個給定的UID。每個被啟動的程序都有一個啟動該程序的使用者 UID。子程序擁有和父程序一樣的 UID。使用者可以是某個組的成員,每個組也有一個 GID。在 UNIX 中,有一個 UID 稱為超級使用者,在 Windows 中為管理員,它具有特殊的權力,可以違背一些保護規則。
地址空間
較複雜的作業系統允許在記憶體中同時執行多道程式。為了避免它們互相干擾,需要有某種保護機制。雖然這種機制必然是硬體形式的,但是由作業系統掌控。
管理程序的地址空間同樣重要,在本質上,作業系統建立了一個地址空間的抽象,作為程序可以引用地址的集合。該地址空間與機器的實體記憶體解耦,可能大於也可能小於該地址空間,作業系統可以把部分地址空間裝入主存,部分留在磁碟上,並且在需要時來回交換它們。對地址空間和物理空間的管理組成了作業系統功能的一個重要部分。
檔案
目錄層結構中的每一個檔案都可以通過從目錄的頂部即根目錄開始的路徑名來確定。
在例項中,每個程序有一個工作目錄,對於沒有斜線開頭給出絕對地址的路徑,將在這個工作目錄下尋找。程序可以通過使用系統呼叫指定新的工作目錄,從而變更其工作目錄。
提供特殊檔案是為了使 I/O 裝置看起來像檔案一般,這樣,I/O 裝置可以像使用系統呼叫讀寫檔案一樣進行讀寫。
- 塊特殊檔案:指那些由可隨機存取的塊組成的裝置,如磁碟等。
- 字元特殊檔案:用於印表機、調變解調器和其他接收或輸出字元流的裝置。
按照慣例,特殊檔案儲存在/dev目錄中。
管道是一種虛檔案,它可連線兩個程序。這樣在 UNIX 中兩個程序之間的通訊就非常類似於普通檔案的讀寫了。而且若程序想發現它所寫入的輸出檔案不是真正的檔案而是管道,則需要特殊的系統呼叫。
輸入/輸出
某些 I/O 軟體是裝置獨立的,即這些 I/O軟體部分可以同樣應用於許多或者全部的 I/O 裝置上。
I/O 軟體的其他部分,如裝置驅動程式,是專門為特定的 I/O 裝置設計的。
保護
rwx 位:所有者、其他組成員、其他人。
shell
作業系統是進行系統呼叫的程式碼。編輯器、編譯器、彙編程式、連結程式、效用程式以及命令直譯器等都不是作業系統的組成部分。
shell 本身不是作業系統的一部分,但它體現了許多作業系統的特性,並很好地說明了系統呼叫的具體用法。shell 同時也是終端使用者與作業系統之間的介面。現在,很多個人計算機使用 GUI,GUI 與 shell 類似,GUI 只是一個執行在作業系統頂部的程式。
系統呼叫
任何單 CPU 計算機一次只能執行一條指令。如果一個程序正在使用者態執行一個使用者程式,並且需要一個系統服務,比如從一個檔案讀取資料,那麼它就必須執行一個陷阱(trap)或系統呼叫(system call)指令,將控制轉移到作業系統。作業系統接著通過引數檢查找出所需要的呼叫程序。然後,它執行系統呼叫,並把控制返回給在系統呼叫後面跟隨著的指令。在某種意義上,進行系統呼叫就像進行一個特殊的過程呼叫,但是隻有系統呼叫可以進入核心,而過程呼叫則不能。
TRAP 指令實際上與過程呼叫指令非常類似,它們後面都跟隨一個來自遠處位置的指令,以及供以後使用的一個儲存在棧中的返回地址。然而,TRAP 指令與過程指令存在兩個方面的差別:
- TRAP 指令的副作用是切換到核心態,而過程呼叫指令並不改變模式。
- 不像給定過程所在的相對或絕對地址那樣,TRAP 指令不能跳轉到任意地址上。根據機器的體系結構,或者跳轉到一個單固定地址上,或者指令中有一8位長的欄位,它給定了記憶體中一張表格的索引,這張表格中含有跳轉地址。
跟隨在 TRAP 指令後的核心程式碼開始檢查系統呼叫編號,然後分派給正確的系統呼叫處理器。
此時,系統呼叫處理器執行。
一旦系統呼叫處理器完成其工作,控制可能會在跟隨 TRAP 指令後面的指令中返回給使用者空間庫過程。
這個過程接著以通常的過程呼叫返回的方式,返回到使用者程式。
什麼是陷阱指令(TRAP)?在作業系統中解釋它的用途?
答:TRAP 是由於系統呼叫引起處理機中斷的指令。在系統呼叫中,TRAP 負責由使用者模式切換為核心模式,並將返回地址儲存至堆疊中以備後用。
讀取日期-時鐘指令可以在非核心態使用。
讀取使用者地址空間可以在非核心態使用。
陷阱指令和中斷的區別?
答:陷阱指令可以使執行流程從使用者態陷入核心;而中斷是由外部事件導致並且它發生的時間是不可預測的。外部事件主要是指時鐘中斷,硬體中斷等。所以說中斷的主要作用是完成程序間切換,從而支援CPU和裝置之間的並行。
系統呼叫的目的是?
答:作業系統編制了許多不同功能的子程式,供使用者程式執行中呼叫。這些由作業系統提供的子程式稱為系統功能呼叫,簡稱系統呼叫。
系統呼叫型別
- 程序管理
- 檔案管理
- 目錄和檔案系統管理
- 雜項
fork 是唯一可以在 POSIX 中建立程序的途徑,它建立一個原有程序的精確副本。在 fork 之後,原有的程序及其副本就分開了,fork 呼叫返回一個值,在子程序中該值為零,在父程序中等於子程序的程序識別符號(PID),所以根據返回的 PID, 就可以在兩個程序中看出哪一個是父程序,哪一個是子程序。
作業系統特性
- 併發
- 共享
- 虛擬化
- 非同步
作業系統結構
- 單體系統:整個作業系統在核心態以單一程式的方式執行。整個作業系統以過程集合的方式編寫,連結成一個大型可執行二進位制程式。
- 層次式系統:把單體系統進一步通用化,就變成一個層次式結構的作業系統,它的上層軟體都是在下一層軟體的基礎之上構建的。
- 微核心:為了實現高可靠性,將作業系統劃分成小的、良好定義的模組,只有其中一個模組——微核心——執行在核心態,其餘的模組由於功能相對弱些,則作為普通使用者程序執行。特別地,由於把每個裝置驅動和檔案系統分別作為普通使用者程序,這些模組中的錯誤雖然會使這些模組崩潰,但是不會使得整個系統宕機。
- 客戶端-伺服器模式:客戶端和伺服器之間的通訊是訊息傳遞。為了獲得一個服務,客戶端程序構造一段訊息,說明所需要的服務,並將其發給合適的伺服器(微核心)。該伺服器完成工作,傳送迴應。
- 虛擬機器:
- 第一代虛擬機器:沒有底層支援,必須自己實現所有功能。
- 第二代虛擬機器:利用宿主作業系統並通過其檔案系統建立程序、儲存檔案等。安裝在虛擬盤上,實際上只是宿主作業系統的檔案系統中的一個大檔案。
- Java 虛擬機器:JVM 具有非常簡單的、只需要解釋的體系結構;還要對所輸入的 JVM 進行安全性檢查,然後在一種保護環境下執行,這樣程式就不能進行任何有害的操作。
- 外核:在底層中,一種稱為外核的程式在核心態執行。它的任務是為虛擬機器分配資源,並檢查使用這些資源的企圖,以確保沒有機器會使用他人的資源。減少了映像層,不需要重映像磁碟地址(在其他設計中,每個虛擬機器都認為它有自己的硬碟,盤塊號從0到最大編號);它還將多道程式(在外核內)與使用者操作程式碼(在使用者空間內)加以分離,而且相應負載並不重,因為外核所做的只是保持多個虛擬機器彼此不發生衝突。
Booting 啟動計算機
- BIOS:硬體自檢,按啟動順序啟動外部儲存裝置。
- 主引導記錄:BIOS按照啟動順序,把控制權轉交給排在第一位的儲存裝置。讀取該裝置的第一個扇區,也就是讀取最前面的512個位元組,如果這512個位元組的最後兩個位元組是0x55和0xAA,表明這個裝置可以用於啟動。
- 硬碟啟動:將計算機的控制權就要轉交給硬碟的某個分割槽,卷引導記錄告訴計算機,作業系統在這個分割槽裡的位置。然後,計算機就會載入作業系統了。
- 作業系統:控制權轉交給作業系統後,作業系統的核心首先被載入記憶體。