1. 程式人生 > >計算機考研複試面試常問問題 作業系統篇

計算機考研複試面試常問問題 作業系統篇

計算機考研複試面試常問問題 作業系統篇

在複習過程中,我用心查閱並整理了在考研複試面試中可能問到的大部分問題,並分點整理了答案,可以直接理解背誦並加上自己的語言潤色!極力推薦列印下來看,效率更高!

此係列一共有8篇:程式語言篇|資料結構篇|作業系統篇|組成原理篇|計算機網路篇|資料庫篇|軟體工程篇|計算機專業英語篇(還未全部完成,敬請期待,你們的支援和關注是我最大的動力!)

個人整理,不可用於商業用途,轉載請註明出處。

作者各個平臺請搜尋:程式設計師寶藏。快來探索屬於你的寶藏吧!

需要pdf直接列印版,可在公眾號"程式設計師寶藏"回覆複試上岸獲取(會持續更新)

需要408電子書2021版,可在公眾號"程式設計師寶藏"回覆408電子書獲取

需要408初試視訊2021版,可在公眾號"程式設計師寶藏"回覆408視訊獲取

需要複試機試視訊,可在公眾號"程式設計師寶藏"回覆機試必過獲取

加油,大家都可以上岸!!!讓我們一起努力!!!

第一章、計算機系統概述

快速喚起記憶的知識框架

1.作業系統的目標和功能?(什麼是作業系統?)

1.作業系統是計算機資源的管理者

處理機管理(程序控制、程序同步、程序通訊、死鎖處理、處理機排程)

儲存器管理(提高記憶體利用率,記憶體的分配與回收、地址對映、記憶體保護與共享、記憶體擴充)

檔案管理(計算機中的資訊都是以檔案的形式存在的)

裝置管理(完成使用者的I/O請求,方便使用者使用裝置、並提高裝置的利用率**)**

2.作業系統為使用者提供使用計算機硬體系統的介面

命令介面(使用者通過控制檯或終端輸入操作命令,向系統提供各種服務要求)

程式介面(由系統呼叫組成,使用者在程式中使用這些系統呼叫來請求作業系統為其提供服務)

圖形介面 最常見的圖形使用者介面GUI(最終還是通過呼叫程式介面實現的)

3.作業系統用作擴充機器

沒有任何軟體支援的計算機稱為裸機,實際呈現在使用者面前的計算機系統是經過若干層軟體改造的計算機。作業系統將裸機改造成功能更強、使用更方便的機器。我們將覆蓋了軟體的機器稱為擴充機器或虛擬機器。


2.作業系統的執行機制?

1.核心程式和應用程式(核心態和使用者態)

在計算機系統中,通常CPU執行兩種不同性質的程式:一種是作業系統核心程式;另一種是使用者自程式設計序或系統外層的應用程式。核心程式是應用程式的”管理者”。“管理程式“可以執行一些特權指令,而”被管理程式“出於安全考慮不能執行這些指令。所謂特權指令,是指計算機中不允許使用者直接使用的指令,如:I/O指令、置中斷指令,存取用於記憶體保護的暫存器,送程式狀態字到程式狀態字暫存器等指令。

作業系統在具體實現上劃分了使用者態(目態)和核心態(管態),以嚴格區分兩類程式。

2.層次式結構

作業系統的各項功能分別被設定在不同的層次上。一些與硬體關聯較緊密的模組,諸如時鐘管理、中斷管理、裝置驅動等處於最底層。其次是執行頻率較高的程式,諸如程序管理、儲存管理和裝置管理等。 上面的這兩部分內容構成了作業系統的核心,這部分內容的指令操作工作在核心態。

3.核心

核心是計算機上配置的底層軟體,是計算機功能的延伸,包括以下4個方面的內容:

1)時鐘管理 時鐘的第一功能是計時,作業系統需要通過時鐘管理,向用戶提供標準的系統時間。其次,通過時鐘中斷的管理,可以實現程序的切換。在分時作業系統中,採用時間片輪轉排程的實現;在實時系統中,按截至時間控制執行的實現;在批處理系統中,通過時鐘管理來衡量一個作業的執行程度等。

2)中斷機制 引入中斷技術的初衷是提高多道程式執行環境中CPU的利用率,主要針對外部裝置。後來逐步得到發展,形成了多種型別,成為作業系統各項操作的基礎。如,鍵盤或滑鼠資訊的輸入、程序的管理和排程、系統功能的呼叫、裝置驅動、檔案訪問等。都依賴於中斷機制。可以說,現代作業系統是靠中斷驅動的軟體。中斷機制中,只有一小部分功能屬於核心,負責保護和恢復中斷現場的資訊,轉移控制權到相關的處理程式。這樣可以減少中斷的處理時間,提高系統的並行處理能力。

3)原語 作業系統底層是一些可被呼叫的公用小程式,它們各自完成一個規定的操作,其特點是:

------ 它們處於作業系統的最底層,是最接近硬體的部分。

------ 這些程式的執行具有原子性,其操作只能一氣呵成

------ 這些程式的執行時間都較短,而且呼叫頻繁。

定義原語的直接方法是關閉中斷,讓它的所有動作不可分割地進行完再開啟中斷。

4)系統控制的資料結構及處理 系統中用來登記狀態資訊的資料結構很多,比如:作業控制塊、程序控制塊、裝置控制塊、各類連結串列等。為了實現有效的管理,系統需要一些基本的操作,常見的操作有以下三種:

------ 程序管理:程序狀態管理、程序排程和分配、建立和撤銷程序控制塊等。

------ 儲存器管理:儲存器的空間分配和回收、記憶體資訊保護程式、程式碼對換程式等。

------ 裝置管理:緩衝區管理、裝置分配和回收等。


3.中斷和異常?

1.中斷的引入——為了支援CPU和裝置之間的並行操作

中斷也稱外中斷,指來自CPU執行指令以外的事件的發生,如裝置發出的I/O結束中斷、時鐘中斷等。這一類中斷通常是與當前執行的指令無關的事件。

2.異常的引入——表示CPU執行指令本身時出現的問題

異常也稱內中斷、例外或陷入,指源自CPU執行指令內部的事件,如程式的非法操作碼、地址越界、算術溢位、缺頁異常等。對異常的處理一般要依賴與當前程式的執行現場,不能被遮蔽。

3.中斷和異常的聯絡與區別

4.中斷執行的流程


以上是多重中斷的流程,其中,1~3步是由硬體(中斷隱指令)完成的;4-9步是由中斷服務程式完成的。

4.系統呼叫?

計算機系統的各種硬體資源是有限,為了更好的管理這些資源,程序是不允許直接操作的,所有對這些資源的訪問都必須有作業系統控制。也就是說作業系統是使用這些資源的唯一入口,而這個入口就是作業系統提供的系統呼叫。一般地,系統呼叫都是通過中斷實現的,比如,linux下中斷號0x80就是進行系統呼叫的。

作業系統為使用者態程序與硬體裝置進行互動提供了一組介面——系統呼叫:1.把使用者從底層的硬體程式設計中解放了出來;2.極大地提高了系統的安全性使使用者程式具有可移植性;使用者程式與具體硬體已經被抽象介面所替代。

系統呼叫流程圖如下:


5.大核心和微核心

1.大核心

大核心是將作業系統功能作為一個緊密結合的整體放到核心。由於各模組共享資訊,因此有很高的效能。

2.微核心

由於作業系統不斷複雜,因此將一部分作業系統功能移出核心,從而降低核心的複雜性。移出的部分根據分層的原則劃分成若干服務,相互獨立。
在微核心結構下,作業系統被劃分成小的、定義良好的模組,只有微核心這一個模組執行在核心態,其餘模組執行在使用者態。
因為需要頻繁地在使用者態和核心態之間進行切換,所以會有一定的效能損失。

第二章、程序管理

快速喚起記憶的知識框架


6.程序與執行緒?

1.程序的概念與定義

在多道程式環境下,允許多個程序併發執行,此時他們將失去封閉性,並具有間斷性及不可再現性的特徵。為此引入了程序的概念,以便更好地描述和控制程式的併發執行,實現作業系統的併發性和共享性。

程序是程式的執行過程,是系統進行資源分配和排程的一個獨立單位。

2.執行緒的概念和定義

早期,在OS中能擁有資源和獨立執行的基本單位是程序,然而隨著計算機技術的發展,程序出現了很多弊端,一是由於程序是資源擁有者,建立、撤消與切換存在較大的時空開銷,因此需要引入輕型程序;二是由於對稱多處理機(SMP)出現,可以滿足多個執行單位,而多個程序並行開銷過大。

執行緒是作業系統能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中一個單一順序的控制流,每條執行緒執行不同的任務。

3.程序和執行緒的區別

1.程序(Process)是系統進行資源分配和排程的基本單位,執行緒(Thread)是CPU排程和分派的基本單位;

2.執行緒依賴於程序而存在,一個程序至少有一個執行緒;

3.程序有自己的獨立地址空間,執行緒共享所屬程序的地址空間;

4.程序是擁有系統資源的一個獨立單位,而執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),和其他執行緒共享本程序的相關資源如記憶體、I/O、cpu等;

5.在程序切換時,涉及到整個當前程序CPU環境的儲存環境的設定以及新被排程執行的CPU環境的設定,而執行緒切換隻需儲存和設定少量的暫存器的內容,並不涉及儲存器管理方面的操作,可見,程序切換的開銷遠大於執行緒切換的開銷;

6.執行緒之間的通訊更方便,同一程序下的執行緒共享全域性變數等資料,而程序之間的通訊需要以程序間通訊(IPC)的方式進行;

7.多執行緒程式只要有一個執行緒崩潰,整個程式就崩潰了,但多程序程式中一個程序崩潰並不會對其它程序造成影響,因為程序有自己的獨立地址空間,因此多程序更加健壯

4.程序和程式的區別

(1) 程式是永存的;程序是暫時的,是程式在資料集上的一次執行,有建立有撤銷,存在是暫時的;
(2)程式是靜態的觀念,程序是動態的觀念;
(3)程序具有併發性,而程式沒有;
(4)程序是競爭計算機資源的基本單位,程式不是。
(5)程序和程式不是一一對應的: 一個程式可對應多個程序即多個程序可執行同一程式; 一個程序可以執行一個或幾個程式


7.程序的通訊方式?

1.共享記憶體

顧名思義,共享記憶體就是兩個程序同時共享一塊記憶體,然後在這塊記憶體上的資料可以共同修改和讀取,達到通訊的目的。

2.無名管道

無名管道是半雙工的通訊方式;並且只能在具有親緣關係的程序之間使用(親緣關係是指程序間的父子關係,兄弟關係等),具有親緣關係的程序在建立時同時擁有一個無名管道的控制代碼,可以進行讀寫;無名管道不存在磁碟節點,只存在與記憶體中用完即銷燬。

3.命名管道

命名管道也是半雙工的通訊方式;可以在不具有親緣關係的程序間通訊;有名管道存在磁碟節點,有對應的FIFO檔案,凡是可以訪問該路徑的檔案的程序均可以進行通訊。

4.訊息佇列

訊息佇列是由訊息的連結串列,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。

5.套接字

套接字是網路程式設計的api,通過套接字可以不同的機器間的程序進行通訊,常用於客戶端程序和伺服器程序的通訊。

6.訊號

訊號是Unix系統中使用的最古老的程序間通訊的方法之一。作業系統通過訊號來通知程序系統中發生了某種預先規定好的事件(一組事件中的一個),它也是使用者程序之間通訊和同步的一種原始機制。一個鍵盤中斷或者一個錯誤條件(比如程序試圖訪問它的虛擬記憶體中不存在的位置等)都有可能產生一個訊號。Shell也使用訊號向它的子程序傳送作業控制訊號。


8.程序的5種狀態及轉換過程?


9.程序的排程演算法有哪些?

1.先來先服務 first-come first-serverd(FCFS)

按照請求的順序進行排程。非搶佔式,開銷小,無飢餓問題,響應時間不確定(可能很慢);

對短程序不利,對IO密集型程序不利。

2.最短作業優先 shortest job first(SJF)

按估計執行時間最短的順序進行排程。非搶佔式,吞吐量高,開銷可能較大,可能導致飢餓問題;

對短程序提供好的響應時間,對長程序不利

3.優先順序排程演算法

為每個程序分配一個優先順序,按優先順序進行排程。為了防止低優先順序的程序永遠等不到排程,可以隨著時間的推移增加等待程序的優先順序。

4.時間片輪轉

將所有就緒程序按 FCFS 的原則排成一個佇列,用完時間片的程序排到佇列最後。搶佔式(時間片用完時),開銷小,無飢餓問題,為短程序提供好的響應時間;

若時間片小,程序切換頻繁,吞吐量低;若時間片太長,實時性得不到保證。

5.最高響應比優先

響應比 = 1+ 等待時間/處理時間。同時考慮了等待時間的長短和估計需要的執行時間長短,很好的平衡了長短程序。非搶佔,吞吐量高,開銷可能較大,提供好的響應時間,無飢餓問題。

6.多級反饋佇列排程演算法

設定多個就緒佇列1、2、3…,優先順序遞減,時間片遞增。只有等到優先順序更高的佇列為空時才會排程當前佇列中的程序。如果程序用完了當前佇列的時間片還未執行完,則會被移到下一佇列。

搶佔式(時間片用完時),開銷可能較大,對IO型程序有利,可能會出現飢餓問題。


10.同步和互斥?

1.同步

多個程序因為合作而使得程序的執行有一定的先後順序。比如某個程序需要另一個程序提供的訊息,獲得訊息之前進入阻塞態;

2.互斥

多個程序在同一時刻只有一個程序能進入臨界區

3.同步機制的4個準則

1.空閒讓進
當無程序處於臨界區,可允許一個請求進入臨界區的程序立即進入自己的臨界區

2.忙則等待
當已有程序進入自己的臨界區,所有企圖進入臨界區的程序必須等待

3.有限等待
對要求訪問臨界資源的程序,應保證該程序能在有限時間內進入自己的臨界區

4.讓權等待
當程序不能進入自己的臨界區,應釋放處理機


11.程序同步相關概念

為什麼需要程序同步:程序有時候會和其他程序共享一些資源,比如記憶體、資料庫等。當多個程序同時讀寫同一份共享資源的時候,可能會發生衝突。因此需要程序的同步,多個程序按順序訪問資源。

互斥量 Mutex:互斥量是核心物件,只有擁有互斥物件的執行緒才有訪問互斥資源的許可權。因為互斥物件只有一個,所以可以保證互斥資源不會被多個執行緒同時訪問;當前擁有互斥物件的執行緒處理完任務後必須將互斥物件交出,以便其他執行緒訪問該資源;

訊號量 Semaphore:訊號量是核心物件,它允許同一時刻多個執行緒訪問同一資源,但是需要控制同一時刻訪問此資源的最大執行緒數量。訊號量物件儲存了最大資源計數和當前可用資源計數,每增加一個執行緒對共享資源的訪問,當前可用資源計數就減1,只要當前可用資源計數大於0,就可以發出訊號量訊號,如果為0,則將執行緒放入一個佇列中等待。執行緒處理完共享資源後,應在離開的同時通過ReleaseSemaphore函式將當前可用資源數加1。如果訊號量的取值只能為0或1,那麼訊號量就成為了互斥量;

事件 Event:允許一個執行緒在處理完一個任務後,主動喚醒另外一個執行緒執行任務。事件分為手動重置事件和自動重置事件。手動重置事件被設定為激發狀態後,會喚醒所有等待的執行緒,而且一直保持為激發狀態,直到程式重新把它設定為未激發狀態。自動重置事件被設定為激發狀態後,會喚醒一個等待中的執行緒,然後自動恢復為未激發狀態。

臨界區 Critical Section:指的是訪問資源的那段程式碼,任意時刻只允許一個執行緒對臨界資源進行訪問。擁有臨界區物件的執行緒可以訪問該臨界資源,其它試圖訪問該資源的執行緒將被掛起,直到臨界區物件被釋放。


12.死鎖

1.死鎖的定義

是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。

2.死鎖原因:

① 系統資源不足(對不可剝奪資源的競爭)

② 程序推進順序不當(P1擁有A申請B,P2擁有B申請A)

3.產生死鎖的必要條件:

① 互斥條件:指程序對所分配到的資源進行排它性使用,即在一段時間內某資源只由一個程序佔用。

② 請求和保持條件:指程序已經保持至少一個資源,但又提出了新的資源請求,而該資源已被其它程序佔有,此時請求程序阻塞,但又對自己已獲得的其它資源保持不放。

③ 不剝奪條件:指程序已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放

④ 環路等待條件:指在發生死鎖時,必然存在一個程序資源的環形鏈。

4.處理死鎖的基本方法:

① 預防死鎖:這是一種較簡單和直觀的事先預防的方法。方法是通過設定某些限制條件,去破壞產生死鎖的四個必要條件中的一個或者幾個,來預防發生死鎖。預防死鎖是一種較易實現的方法,已被廣泛使用。但是由於所施加的限制條件往往太嚴格,可能會導致系統資源利用率和系統吞吐量降低。

② 避免死鎖:該方法同樣是屬於事先預防的策略,但它並不須事先採取各種限制措施去破壞產生死鎖的的四個必要條件,而是在資源的動態分配過程中,用 某種方法去防止系統進入不安全狀態,從而避免發生死鎖。

③ 檢測死鎖:這種方法並不須事先採取任何限制性措施,也不必檢查系統是否已經進入不安全區,此方法允許系統在執行過程中發生死鎖。但可通過系統所設定的檢測機構,及時地檢測出死鎖的發生,並精確地確定與死鎖有關的程序和資源,然後採取適當措施,從系統中將已發生的死鎖清除掉。

④ 解除死鎖:這是與檢測死鎖相配套的一種措施。當檢測到系統中已發生死鎖時,須將程序從死鎖狀態中解脫出來。常用的實施方法是撤銷或掛起一些程序,以便回收一些資源,再將這些資源分配給已處於阻塞狀態的程序,使之轉為就緒狀態,以繼續執行。


13.什麼是飢餓?與死鎖有什麼差別?

等待時間給程序推進和響應帶來明顯影響時成為程序飢餓。

飢餓並不代表系統已經死鎖,但至少有一個程式的執行被無限期地推遲。
差別:
① 進入飢餓的程序可以只有一個,但是死鎖必須大於等於兩個;
② 出於飢餓狀態的程序可以是一個就緒程序,但是死鎖狀態的程序必定是阻塞程序。


14.銀行家演算法

主要思想是避免系統進入不安全狀態,在每次進行資源分配時,它首先檢查系統是否有足夠的資源滿足要
求,如果有,則先試行分配,並對分配後的新狀態進行安全性檢查。如果新狀態安全,則正式分配上述資
源,否則拒絕分配上述資源。這樣就保證系統始終處於安全狀態,從而避免死鎖現象的發生。


15.死鎖定理

如果資源分配圖是可以完全簡化的(能消去所有的邊),則沒有死鎖。


第三章、記憶體管理

快速喚起記憶的知識框架


16.儲存器管理應具有的功能?

儲存管理的主要任務是為多道程式的執行提供良好的環境,方便使用者使用儲存器,提高儲存器的利用率以
及從邏輯上擴充儲存器,故應具有以下功能:

① 記憶體的分配和回收:實施記憶體的分配,回收系統或使用者釋放的記憶體空間。

② 地址變換:提供地址變換功能,將邏輯地址轉換成實體地址。

③ 擴充記憶體:藉助於虛擬儲存技術活其他自動覆蓋技術,為使用者提供比記憶體空間大的地址空間,從邏輯
上擴充記憶體。

④ 儲存保護:保證進入記憶體的各道作業都在自己的儲存空間內執行,互不干擾。

17.將使用者程式變為可在記憶體中執行的程式的步驟?

1.編譯:由編譯程式將使用者原始碼編譯成若干目標模組

2.連結:由連結程式將編譯後形成的一組目標模組及所需的庫函式連結在一起,形成一個完整的裝入模組。

3.裝入:由裝入程式將裝入模組裝入記憶體中執行。


18.程式的連結方式有哪些?

① 靜態連結:在程式執行之前,先把各個目標模組及所需庫連結為一個完整的可執行程式,以後不再拆
開。

② 裝入時動態連結:將應用程式編譯後所得到的一組目標模組在裝入記憶體時採用邊裝入邊連結的連結方
式。

③ 執行時動態連結:知道程式執行過程中需要一些模組時,才對這些模組進行連結。


19.程式的裝入方式有哪些?

① 絕對裝入:在編譯時就知道程式將要駐留在記憶體的實體地址,編譯程式產生含有實體地址的目的碼,
不適合多道程式設計。

② 可重定位裝入:根據記憶體當前情況,將裝入模組裝入到記憶體的適當位置,地址變換通常在裝入時一次
完成,之後不再改變,也稱靜態重定位。當作業系統為程式分配一個以某地址為起始地址的連續主存
區域後,重定位時將程式中指令或運算元的邏輯地址加上這個起始地址就得到了實體地址。

③ 動態執行裝入:允許程式執行時在記憶體中移動位置,把裝入模組裝入到記憶體後的所有地址都是相對地
址,在程式執行過程中每當訪問到相應指令或資料時,才將要 訪問的程式或資料的相對地址轉換為物
理地址。動態重定位的實現要依靠硬體地址變換機構。


20.覆蓋技術和交換技術?

1.覆蓋技術:

把一個大的程式劃分為一系列覆蓋,每個覆蓋是一個相對獨立的程式單位,把程式執行時並不要求同時 裝入記憶體的覆蓋組成一組,成為覆蓋段,這個覆蓋段分配到同一個儲存區域,這個儲存區域成為覆蓋區,它與覆蓋段一一對應。覆蓋段的大小由覆蓋段中最大的覆蓋來確定。(為了解決記憶體容量太小的問題,打破了必須將一個程式全部資訊裝入記憶體後才能執行的限制)

2.交換技術:

把暫時不用的某個程式及資料部分從記憶體移到外存中去,以便騰出必要的記憶體空間;或者把指定的程式或資料從外存讀到相應的記憶體中,並將控制權交給他,讓其在系統上執行的一種記憶體擴充技術。處理器的中級排程就是採用交換技術。

3.區別:
① 與覆蓋技術相比,交換技術不要求程式設計師給出的 程式段之間的覆蓋結構;

② 交換技術主要在程序和作業之間進行,覆蓋技術主要在同一個程序或作業中進行;交換技術主要在程序和作業之間進行,覆蓋技術主要在同一個程序或作業中進行;

③ 覆蓋技術只能覆蓋於覆蓋程式段無關的程式段,交換程序由換出和換入兩個過程組成。覆蓋技術只能覆蓋於覆蓋程式段無關的程式段,交換程序由換出和換入兩個過程組成。


21.記憶體連續分配管理方式有哪些?

1.單一連續分配

記憶體在此方式下分為系統區和使用者區,系統區僅提供給作業系統使用,通常在低地址部分;使用者區是為使用者提供的、除系統區之外的記憶體空間。這種方式無需進行記憶體保護。

這種方式的優點是簡單、無外部碎片,可以釆用覆蓋技術,不需要額外的技術支援。缺點是隻能用於單使用者、單任務的作業系統中,有內部碎片,儲存器的利用率極低。

2.固定分割槽分配

固定分割槽分配是最簡單的一種多道程式儲存管理方式,它將使用者記憶體空間劃分為若干個固定大小的區域,每個分割槽只裝入一道作業。當有空閒分割槽時,便可以再從外存的後備作業佇列中,選擇適當大小的作業裝入該分割槽,如此迴圈。

固定分割槽分配在劃分分割槽時,有兩種不同的方法。

(1) 分割槽大小相等:用於利用一臺計算機去控制多個相同物件的場合,缺乏靈活性。

(2) 分割槽大小不等:劃分為含有多個較小的分割槽、適量的中等分割槽及少量的大分割槽。

3.動態分割槽分配

動態分割槽分配又稱為可變分割槽分配,是一種動態劃分記憶體的分割槽方法。這種分割槽方法不預先將記憶體劃分,而是在程序裝入記憶體時,根據程序的大小動態地建立分割槽,並使分割槽的大小正好適合程序的需要。因此係統中分割槽的大小和數目是可變的。

4.動態分割槽分配演算法

在程序裝入或換入主存時,如果記憶體中有多個足夠大的空閒塊,作業系統必須確定分配哪個記憶體塊給程序使用,這就是動態分割槽的分配策略,考慮以下幾種演算法:

(1) 首次適應(First Fit)演算法:空閒分割槽以地址遞增的次序連結。分配記憶體時順序查詢,找到大小能滿足要求的第一個空閒分割槽。

(2) 最佳適應(Best Fit)演算法:空閒分割槽按容量遞增形成分割槽鏈,找到第一個能滿足要求的空閒分割槽。

(3) 最壞適應(Worst Fit)演算法:又稱最大適應(Largest Fit)演算法,空閒分割槽以容量遞減的次序連結。找到第一個能滿足要求的空閒分割槽,也就是挑選出最大的分割槽。

(4) 鄰近適應(Next Fit)演算法:又稱迴圈首次適應演算法,由首次適應演算法演變而成。不同之處是分配記憶體時從上次查詢結束的位置開始繼續查詢。


22.基本分頁和請求分頁記憶體管理方式?

本問內容比較多,適合系統複習,都整理過來不過全面,請自行查閱相關資料(狗頭保命)。


23.頁面置換演算法有哪些?

1.最佳(OPT)置換演算法

從主存中移出永遠不再需要的頁面;如無這樣的頁面存在,則選擇最長時間不需要訪問的頁面。於所選擇的被淘汰頁面將是以後永不使用的,或者是在最長時間內不再被訪問的頁面,這樣可以保證獲得最低的缺頁率。 即被淘汰頁面是以後永不使用或最長時間內不再訪問的頁面。(往後看)

2.先進先出(FIFO)置換演算法

是最簡單的頁面置換演算法。這種演算法的基本思想是:當需要淘汰一個頁面時,總是選擇駐留主存時間最長的頁面進行淘汰,即先進入主存的頁面先淘汰。其理由是:最早調入主存的頁面不再被使用的可能性最大。 即優先淘汰最早進入記憶體的頁面。(往前看)

3.最近最久未使用(LRU)演算法

這種演算法的基本思想是:利用區域性性原理,根據一個作業在執行過程中過去的頁面訪問歷史來推測未來的行為。它認為過去一段時間裡不曾被訪問過的頁面,在最近的將來可能也不會再被訪問。所以,這種演算法的實質是:當需要淘汰一個頁面時,總是選擇在最近一段時間內最久不用的頁面予以淘汰。 即淘汰最近最長時間未訪問過的頁面。(往前看)

4.時鐘(CLOCK)置換演算法

LRU演算法的效能接近於OPT,但是實現起來比較困難,且開銷大;FIFO演算法實現簡單,但效能差。所以作業系統的設計者嘗試了很多演算法,試圖用比較小的開銷接近LRU的效能,這類演算法都是CLOCK演算法的變體。
簡單的CLOCK演算法是給每一幀關聯一個附加位,稱為使用位。當某一頁首次裝入主存時,該幀的使用位設定為1;當該頁隨後再被訪問到時,它的使用位也被置為1。對於頁替換演算法,用於替換的候選幀集合看做一個迴圈緩衝區,並且有一個指標與之相關聯。當某一頁被替換時,該指標被設定成指向緩衝區中的下一幀。當需要替換一頁時,作業系統掃描緩衝區,以查詢使用位被置為0的一幀。每當遇到一個使用位為1的幀時,作業系統就將該位重新置為0;如果在這個過程開始時,緩衝區中所有幀的使用位均為0,則選擇遇到的第一個幀替換;如果所有幀的使用位均為1,則指標在緩衝區中完整地迴圈一週,把所有使用位都置為0,並且停留在最初的位置上,替換該幀中的頁。由於該演算法迴圈地檢查各頁面的情況,故稱為CLOCK演算法,又稱為最近未用(Not Recently Used, NRU)演算法。


24.什麼是頁表和快表,有什麼作用?

頁表指出邏輯地址中的頁號與所佔主存塊號的對應關係。作用:頁式儲存管理在用動態重定位方式裝入作業時,要利用頁表做地址轉換工作。快表就是存放在高速緩衝儲存器的部分頁表。它起頁表相同的作用。由於採用頁表做地址轉換,讀寫記憶體資料時CPU要訪問兩次主存。有了快表,有時只要訪問一次高速緩衝儲存器,一次主存,這樣可加速查詢並提高指令執行速度。


25.地址翻譯的過程?

TLB->頁表(TLB不命中)->Cache->主存(Cache不命中)->外存


第四章、檔案管理

本章重要程度比較低

快速喚起記憶知識框架


26.檔案的基本操作?

檔案屬於抽象資料型別。為了恰當地定義檔案,就需要考慮有關檔案的操作。作業系統提供系統呼叫,它對檔案進行建立、寫、讀、定位和截斷。

①建立檔案:建立檔案有兩個必要步驟,一是在檔案系統中為檔案找到空間;二是在目錄中為新檔案建立條目,該條目記錄檔名稱、在檔案系統中的位置及其他可能資訊。

②寫檔案:為了寫檔案,執行一個系統呼叫,指明檔名稱和要寫入檔案的內容。對於給定檔名稱,系統搜尋目錄以查詢檔案位置。系統必須為該檔案維護一個寫位置的指標。每當發生寫操作,便更新寫指標。

③讀檔案:為了讀檔案,執行一個系統呼叫,指明檔名稱和要讀入檔案塊的記憶體位置。同樣,需要搜尋目錄以找到相關目錄項,系統維護一個讀位置的指標。每當發生讀操作時,更新讀指標。一個程序通常只對一個檔案讀或寫,所以當前操作位置可作為每個程序當前檔案位置指標。由於讀和寫操作都使用同一指標,節省了空間也降低了系統複雜度。

④檔案重定位(檔案定址):按某條件搜尋目錄,將當前檔案位置設為給定值,並且不會讀、寫檔案。

⑤刪除檔案:先從目錄中找到要刪除檔案的目錄項,使之成為空項,然後回收該檔案所佔用的儲存空間。

⑥截斷檔案:允許檔案所有屬性不變,並刪除檔案內容,即將其長度設為0並釋放其空間。

這6個基本操作可以組合執行其他檔案操作。例如,一個檔案的複製,可以建立新檔案、 從舊檔案讀出並寫入到新檔案。


27.磁碟排程演算法有哪些?

1、先來先服務演算法(FCFS)First Come First Service

這是一種比較簡單的磁碟排程演算法。它根據程序請求訪問磁碟的先後次序進行排程。此演算法的優點是公平、簡單,且每個程序的請求都能依次得到處理,不會出現某一程序的請求長期得不到滿足的情況。此演算法由於未對尋道進行優化,在對磁碟的訪問請求比較多的情況下,此演算法將降低裝置服務的吞吐量,致使平均尋道時間可能較長,但各程序得到服務的響應時間的變化幅度較小。

2、最短尋道時間優先演算法(SSTF) Shortest Seek Time First

該演算法選擇這樣的程序,其要求訪問的磁軌與當前磁頭所在的磁軌距離最近,以使每次的尋道時間最短,該演算法可以得到比較好的吞吐量,但卻不能保證平均尋道時間最短。其缺點是對使用者的服務請求的響應機會不是均等的,因而導致響應時間的變化幅度很大。在服務請求很多的情況下,對內外邊緣磁軌的請求將會無限期的被延遲,有些請求的響應時間將不可預期。

3、掃描演算法(SCAN)電梯排程

掃描演算法不僅考慮到欲訪問的磁軌與當前磁軌的距離,更優先考慮的是磁頭的當前移動方向。例如,當磁頭正在自裡向外移動時,掃描演算法所選擇的下一個訪問物件應是其欲訪問的磁軌既在當前磁軌之外,又是距離最近的。這樣自裡向外地訪問,直到再無更外的磁軌需要訪問才將磁臂換向,自外向裡移動。這時,同樣也是每次選擇這樣的程序來排程,即其要訪問的磁軌,在當前磁軌之內,從而避免了飢餓現象的出現。由於這種演算法中磁頭移動的規律頗似電梯的執行,故又稱為電梯排程演算法。此演算法基本上克服了最短尋道時間優先演算法的服務集中於中間磁軌和響應時間變化比較大的缺點,而具有最短尋道時間優先演算法的優點即吞吐量較大,平均響應時間較小,但由於是擺動式的掃描方法,兩側磁軌被訪問的頻率仍低於中間磁軌。

4、迴圈掃描演算法(CSCAN)

迴圈掃描演算法是對掃描演算法的改進。如果對磁軌的訪問請求是均勻分佈的,當磁頭到達磁碟的一端,並反向運動時落在磁頭之後的訪問請求相對較少。這是由於這些磁軌剛被處理,而磁碟另一端的請求密度相當高,且這些訪問請求等待的時間較長,為了解決這種情況,迴圈掃描演算法規定磁頭單向移動。例如,只自裡向外移動,當磁頭移到最外的被訪問磁軌時,磁頭立即返回到最裡的欲訪磁軌,即將最小磁軌號緊接著最大磁軌號構成迴圈,進行掃描。


第五章、輸入輸出管理

快速喚起記憶知識框架

28.I/O控制方式有哪些?

1.程式 I/O 方式

早期的計算機系統中, 沒有中斷系統,所以CPU和I/O裝置進行通訊,傳輸資料時CPU速度遠快於I/O裝置,於是CPU需要不斷測試I/O裝置,看其是否完成了傳輸。

2.中斷驅動方式

當某程序要啟動某個 I/O 裝置工作時,便由 CPU 向相應的裝置控制器發出一條 I/O 命令,然後立即返回繼續執行原來的任務。僅當輸完一個數據時,才需 CPU 花費極短的時間去做些中斷處理。

3.DMA方式(直接儲存器訪問)

通過在I/O裝置和記憶體之間開啟一個可以直接傳輸資料的通路,採用DMA控制器來控制一個數據塊的傳輸,CPU只需在一個數據塊傳輸開始階段設定好傳輸所需的控制資訊,並在傳輸結束階段做進一步處理。

4.I/O通道控制方式

雖然DMA方式比起中斷方式來已經顯著地減少了CPU的干預,即已由以字(節)為單位的干預減少到以資料塊為單位的干預。但CPU每發出一條I/O指令,也只能去讀/寫一個連續的資料塊。而當我們需要一次去讀多個數據塊且將它們分別傳送到不同的記憶體區域,或者相反時,則需由CPU分別發出多條I/O指令及進行多次中斷處理才能完成。
---- 通道控制方式與DMA控制方式類似,也是一種以記憶體為中心,實現裝置與記憶體直接交換資料的控制方式。
---- 與DMA控制方式相比,通道方式所需要的CPU干預更少,而且可以做到一個通道控制多臺裝置,從而進一步減輕了CPU負擔。
---- 通道本質上是一個簡單的處理器,專門負責輸入、輸出控制,具有執行I/O指令的能力,並通過執行通道I/O程式來控制I/O操作。
---- 通道的指令系統比較簡單,一般只有資料傳送指令、裝置控制指令等。


29.Spooling技術?

虛擬性是OS的四大特性之一。如果說可以通過多道程式技術將一臺物理CPU虛擬為多臺邏輯CPU,從而允許多個使用者共享一臺主機,那麼,通過SPOOling技術便可將一臺物理I/O裝置虛擬為多臺邏輯I/O裝置,同樣允許多個使用者共享一臺物理I/O裝置。

SPOOLing技術是對離線輸入、輸出系統的模擬。相應地,SPOOLing系統必須建立在具有多道程式功能的作業系統上,而且還應有高速隨機外存的支援,這通常是採用磁碟儲存技術。

SPOOLing系統主要有以下三部分:

(1)輸入井和輸出井。這是在磁碟上開闢的兩個大儲存空間。輸入井是模擬離線輸入時的磁碟裝置,用於暫存I/Q裝置輸入的資料;輸出井是模擬離線輸出時的磁碟,用於暫存使用者程式的輸出資料。

(2)輸入緩衝區和輸出緩衝區。為了緩和和CPU和磁碟之間速度不匹配的矛盾,在記憶體中要開闢兩個緩衝區;輸入緩衝區和輸出緩衝區。輸入緩衝區用於暫存由輸入裝置送來的資料,以後再傳送到輸入井。輸出緩衝區用與暫存從輸出井送來的資料,以後在傳送給輸出裝置。

(3)輸入程序SPi 和輸入程序SP0。這裡利用兩個程序來模擬離線I/O時的外圍控制機。其中,程序SPi模擬離線輸入時的外圍控制機,將使用者要求的資料從輸入機通過輸入緩衝區再送到輸入井,當CPU需要輸入資料時,直接從輸入井讀入記憶體;程序SP0模擬離線輸出時的外圍控制機,把使用者要求輸出的資料從先記憶體送到輸出井,待輸出裝置空閒時,在將輸出井中的資料經過輸出緩衝區送到輸出裝置上。

SPOOLing技術的特點:

(1)提高了I/O速度。從對低速I/O裝置進行的I/O操作變為對輸入井或輸出井的操作,如同離線操作一樣,提高了I/O速度,緩和了CPU與低速I/O裝置速度不匹配的矛盾。

(2)將獨佔裝置改造為共享裝置。因為在SPOOLing系統的系統中,實際上並沒為任何程序分配裝置,而知識在輸入井或輸出井中為程序分配一個儲存區和建立一張I/O請求表。這樣,便把獨佔裝置改造為共享裝置。

(3)實現了虛擬裝置功能。多個程序同時使用一獨享裝置,而對每一程序而言,都認為自己獨佔這一裝置,從而實現了裝置的虛擬分配。不過,該裝置是邏輯上的裝置