操作系统复习提纲
圖也沒有,我復習用的。將就看吧,不排版了
操作系統復習
第一章 概述
1、操作系統的概念、基本類型、基本特征、基本功能、管態/目態;
2、操作系統的目標、作用、結構設計方法;
第二章 進程管理
1、多道程序設計技術(多道程序設計技術是在計算機內存中同時存放幾道相互獨立的程序,使它們在管理程序控制下,相互穿插運行);
2、進程的概念、特征、基本狀態及與程序的區別和聯系;
(1).為什么要引入進程:并發運行的程序相互制約
(2).進程的概念:可并發執行的程序在一個數據集合上的一次執行過程。進程是進程實體的一次動態運行過程,是系統進行資源分配和調度的一個基本單位。
(3).特征:
(1)動態性——進程是程序在處理機上的一次執行過程。具有生命期。
(2)并發性——多個進程實體同存于內存中,在一段時間內同時運行。以提高資源利用率。
(3) 獨立性— 進程實體是一個能獨立運行、獨立分配資源和獨立接受調度的基本單位,而程序則不是。
(4) 異步性–進程按各自獨立的、不可預知的速度向前推進。
(5) 結構性— 進程控制塊(PCB)+程序段+相關的數據段=進程實體。
(4)進程和程序區別:
(4) .進程的三個基本狀態
(1).進程的基本狀態-三態模型
?執行態(running):進程占有處理器正在運行。
?就緒態(ready):進程具備運行條件,等待系統分配處理器以便運行。
?阻塞態(block):又稱為等待(wait)態或睡眠(sleep)態,進程不具備運行條件,正在等待某個事件的完成。
?運行態→阻塞態:等待使用資源或某事件發生;
?阻塞態→就緒態:資源得到滿足或事件發生;
?運行態→就緒態:運行時間片到;
出現有更高優先權進程。
?就緒態→運行態:CPU空閑時選擇一個就緒進程。
(2)五態模型
新建態—對應進程剛被創建的狀態。
終止態—進程的終止狀態。
(3).七態模型
(1)為什么要有“掛起”狀態?
由于進程的不斷創建,系統資源已不能滿足進程運行的要求,就必須把某些進程掛起(suspend),對換到磁盤鏡像區中,暫時不參與進程調度,起到平滑系統負載的目的。
?掛起就緒態(ready suspend):表明進程具備運行條件但目前在輔助存儲器中,當它被對換到主存才能被調度執行。
?掛起等待態(blocked suspend):表明進程正在等待某一個事件且在輔助存儲器中。
? 該進程不能立即被執行。
? 掛起進程可能會等待事件,但所等待事件是獨立于掛起條件的,事件結束并不能導致進程具備執行條件。
? 進程進入掛起狀態是由于操作系統、父進程或進程本身阻止它的運行。
? 結束進程掛起狀態的命令只能通過操作系統或父進程發出。
3、PCB的概念、前趨圖、進程圖(進程圖上題三個模型);
(1).PCB的概念:進程控制塊,存放進程的管理和控制信息的數據結構.( 進程控制塊是進程存在的唯一標志。
)
它是管理和控制的進程最重要的數據結構,在創建時,建立PCB,并伴隨進程運行的全過程,直到進程撤消而撤消。PCB就象我們的戶口。
系統的所有PCB組織成鏈表或隊列,常駐內存的PCB區。
了解進程控制塊中的信息
進程標識符信息
每個進程都必須有一個唯一的標識符
內部標識符:便于系統使用
外部標識符:便于用戶使用
處理機狀態信息
處理機狀態信息主要由處理機的各種寄存器中的內容組成。處理機運行時的信息存放在寄存器中,當被中斷時這些信息要存放在PCB中。
進程調度信息
進程優先級
進程調度所需的其他信息
事件
進程狀態
進程控制信息
程序和數據的地址
進程同步和通信機制
資源清單
鏈接指針
前趨圖是一個有向無環圖 (DAG-Directed Acyclic Graph),用于描述進程之間執行的前后關系。
結 點 : 描述一個程序段或進程,
或一條語句。
有 向 邊: 結點之間的前趨關系“?”
Pi ? Pj :Pi 必須在 Pj 開始之前完成, Pi是Pj的直接前趨,Pj是Pi的直接后繼
初始結點: 沒有前趨的結點
終止結點: 沒有后繼的結點
注意:前趨圖中絕對不能出現循環!!!
4、原語的概念及進程控制原語的種類;
**進程控制是操作系統的內核通過原語來實現的。
進程的創建與終止
進程的阻塞與喚醒
進程的掛起與激活
**控制原語的種類:關鎖:Lock(W)開鎖:unLock(W) Wait操作 wait(S) Signal操作 signal(S)
通信原語:
Send(Receiver, message);發送一個消息給接收進程
Receive(Sender, message);接收Sender發來的消息
(1).原語(primitive):由若干條指令構成的“原子操作(atomic operation)”過程,作為一個整體而不可分割--要么全都完成,要么全都不做。許多系統調用就是原語。
特征:“不可中斷性”!
5、進程的同步與互斥的概念、臨界資源與臨界區的概念;
同步是進程間共同完成一項任務時直接發生相互作用的關系! 同步進程間具有合作關系,在執行時間上必須按一定的順序協調進行
互斥是并發執行的多個進程由于競爭同一資源而產生的相互排斥的關系! 互斥進程彼此在邏輯上是完全無關的它們的運行不具有時間次序的特征
**臨界資源:一次僅允許一個進程使用的共享資源!如:打印機、磁帶機、共享表格、共享變量等。
**臨界區:每個進程中訪問臨界資源的那段程序!
進程必須互斥進入相關臨界區!
6、信號量及其應用;
【典型題舉例】系統中有三個進程GET、PRO和PUT,共用兩個緩沖區BUF1和BUF2。
假設BUF1中最多可放11個信息,現已放入了兩個信息;BUF2最多可放5個信息,目前為空。
GET進程負責不斷地將輸入信息送入BUF1中,PRO進程負責從BUF1中取出信息進行處理,并將處理結果送到BUF2中,PUT進程負責從BUF2中讀取結果并輸出。
試寫出正確實現GET、PRO、PUT的同步與互斥的算法(要求:(1)用類C語言描述,條理清楚,注釋恰當;(2)信號量原語統一使用wait和signal)。
圖1 進程合作
Semaphore e1=9,p1=2,e2=5,p2=0;
Main(){
Cobegin
Get();
Pro();
Put();
coend
}
Get
While(1){
Wait(e1);
Put in buf1;
Signal(p1);}
Pro
Wait(p1);
Get from buf1;
Signal(e1);
Wait(e1);
Put in buf2
Signal(p2);
Put
Wait(p2)
Get from buf2
Signal(e2)
生產圍棋的工人不小心把相等數量的黑子和白子混裝在一個箱子里,現要用自動分揀系統把黑子和白子分開,該系統由兩個并發執行的進程組成,功能如下:
(1)進程A專門揀黑子,進程B專門揀白子;
(2)每個進程每次只揀一個子,當一個進程在揀子時不允許另一個進程去揀子;
分析:
第一步:確定進程間的關系。由功能(2)可知進程之間是互斥的關系。
第二步:確定信號量及其值。由于進程A和進程B要互斥進入箱子去揀棋子,箱子是兩個進程的公有資源,所以設置一個信號量s,其值取決于公有資源的數目,由于箱子只有一個,s的初值就設為1。
semaphore s=1;
main(){
cobegin{
process A:while(1){
Wait(s);
揀黑子;
Signal(s);
}
process B:while(1){
Wait(s);
揀白子;
Signal(s);
}
}coend
}
semaphore s=1;
main(){
cobegin{
process A:while(1){
Wait(s);
揀黑子;
Signal(s);
}
process B:while(1){
Wait(s);
揀白子;
Signal(s);
}
}coend
}
某車站售票廳共有20 個售票窗口,任何時刻最多可容納20名購票者進入,當售票廳中少于20名購票者時,廳外的購票者可立即進入,否則需要在外面等待。每個購票者可看成一個進程。
第一步:確定進程間的關系:售票廳是各進程共享的公有資源,當售票廳中多于20名購票者時,廳外的購票者需要在外面等待。所以進程間是互斥的關系。
第二步:確定信號量及其值:只有一個公有資源-售票廳,所以設置一個信號量s。售票廳最多容納20個購票者,即可用資源實體數為20,s的初值就設為20。
semaphore s=20;
main(){
cobegin{
process Pi(i=1,2,……)(){
Wait(s);
進入售票廳;
購票;
退出;
Signal(s);
}
}coend
}
例5:圖書館問題
圖書館有100個座位,有一張登記表,要求:
閱讀者進入時登記,取得座位號;
出來時,注銷(注銷也要使用登記表);
登記表同時只能由一個人使用;
用信號量描述一個讀者的使用過程。
信號量SN:表示可用座位數,初值為100;
信號量mutex:表示登記表是否正在使用,初值為1;
Reader(int i)
{ Wait(SN);
Wait(mutex);
登記;
Signal(mutex);
閱讀;
Wait(mutex);
注銷;
Signal(mutex);
Signal(SN);
}
用信號量實現簡單同步
同步(私有)信號量:
用于實現進程間的同步,初值為0或為某個正整數n,僅允許擁有它的進程對其實施Wait操作。
Signal操作由其合作進程來實施!
設2個信號量:
empty—空緩沖區數(初值為1)
full—滿緩沖區數(初值為0)
供者進程
while(1)
{ Wait(empty);
將信息送
入緩沖區;
Signal(full);
}
用者進程
while(1)
{ Wait(full);
從緩沖區
取出信息;
Signal(empty);
}
例:有3個進程PA,PB和PC合作解決文件打印問題:
PA將文件記錄從磁盤讀入主存的緩沖區1,每執行一次讀一個記錄;
PB將緩沖區1的內容復制到緩沖區2,每執行一次復制一個記錄;
PC將緩沖區2的內容打印出來,每執行一次打印一個記錄。緩沖區的大小等于一個記錄大小。
要求:請用信號量機制來保證文件的正確打印。
設置4個信號量:empty1, empty2,full1,full2.
empty1及empty2分別表示緩沖區1及緩沖區2是否為空,初值為1。
full1,full2分別表示緩沖區1及緩沖區2是否有記錄可供處理,其初值為0。
PA()
{While (1)
{ 從磁盤讀一個記錄;
Wait(empty1);
將記錄存入緩沖區1;
Signal(full1); }}
PB()
{While (1)
{ Wait(full1);
Wait(empty2);
將緩沖區1中的記錄
復制到緩沖區2;
Signal(empty1);
Signal(full2); }}
PC()
{While (1)
{Wait(full2);
從緩沖區2取一個記錄;
Signal(empty2);
打印記錄;}}
semaphore empty1=1; empty2=1;full1=0;full2=0;
main()
{ cobegin{
PA();
PB();
PC();
}coend }
生產圍棋的工人不小心把相等數量的黑子和白子混裝在一個箱子里,現要用自動分揀系統把黑子和白子分開,該系統由兩個并發執行的進程組成,功能如下:
(3) 當一個進程揀了一個棋子(黑子或白子)以后,必讓另一個進程揀一個棋子(白子或黑子)。
第一步:確定進程間的關系。由條件1、2、3可知,進程間的關系為同步關系。
第二步:確定信號量及其值。進程A和B共享箱子這個公有資源,但規定兩個進程必須輪流去取不同色的棋子,因而相互間要互通消息。對于進程A可設置一個私有信號量s1,該私有信號量用于判斷進程A是否能去揀黑子,初值為1。對于進程B同樣設置一個私有信號量s2,該私有信號量用于判斷進程B是否能去揀白子,初值為0。
semaphore s1=1,s2=0;
main()
{ cobegin
{ PA();
PB();
}coend }
PA()
{While (1)
{Wait(s1);
揀黑子;
Signal(s2);
}
}
PB()
{While (1)
{ Wait(s2);
揀白子;
Signal(s1);
}
}
設信號量 :
S1:是否允許司機啟動汽車,初值為0
S2:是否允許售票員開門,初值為0
Driver()
while (1)
{
Wait(S1);
啟動汽車;
正常行車;
到站停車;
Signal(S2); }
Busman()
while (1){
關車門;
Signal(S1);
售票;
Wait(S2);
開車門;
上下乘客;
}
semaphore s1=0, s2=0;
main{
cobegin
{ Driver();
Busman();
}coend
}
生產者-消費者問題
若干進程通過有限的共享緩沖區交換數據。其中,"生產者"進程不斷寫入,而"消費者"進程不斷讀出;共享緩沖區共有N個;任何時刻只能有一個進程可對共享緩沖區進行操作。
一個生產者,一個消費者,公用一個緩沖區 ;
一個生產者,一個消費者,公用n個環形緩沖區 ;
一組生產者,一組消費者,公用n個環形緩沖區
生產者進程
while(TRUE)
{
生產一個產品;
Wait(empty);
產品送往Buffer;
Signal(full);
}
消費者進程
while(TRUE)
{
Wait(full);
從Buffer取出一個產品;
Signal(empty);
消費該產品;
}
一個生產者,一個消費者,公用 n個環形緩沖區
Empty:表示緩沖區是否為空,初值為n。
Full :表示緩沖區是否為滿,初值為0。
設緩沖區的編號為1~n?1,定義兩個指針in和out,分別是生產者進程和消費者進程使用的指針,指向下一個可用的緩沖區。
生產者進程
while(TRUE)
{
生產一個產品;
Wait(empty);
產品送往buffer(in);
in=(in+1)mod n;
Signal(full);
}
消費者進程
while(TRUE)
{
Wait(full);
從buffer(out)中取出產品;
out=(out+1)mod n;
Signal(empty);
消費該產品;
}
Empty:表示緩沖區是否為空,初值為n。
Full :表示緩沖區是否為滿,初值為0。
Mutex1:生產者之間的互斥信號量,初值為1。
Mutex2:消費者之間的互斥信號量,初值為1。
設緩沖區的編號為1~n?1,定義兩個指針in和out,分別是生產者進程和消費者進程使用的指針,指向下一個可用的緩沖區。
生產者進程
while(TRUE)
{
Wait(empty);
Wait(mutex1);
產品送往buffer(in);
in=(in+1)mod n;
Signal(mutex1);
Signal(full);
}
消費者進程
while(TRUE)
{
Wait(full);
Wait(mutex2);
從buffer(out)中取出產品;
out=(out+1)mod n;
Signal(mutex2);
Signal(empty);
消費該產品;
}
桌子上有一個水果盤,每一次可以往里面放入一個水果。爸爸專向盤子中放蘋果,兒子專等吃盤子中的蘋果。把爸爸、兒子看作二個進程,試用Wait/Signal操作使這二個進程能正確地并發執行。
semaphore S_PlateNum; // 盤子容量,初值為1
semaphore S_AppleNum; // 蘋果數量,初值為0
父親進程
while(TRUE)
{
拿蘋果;
Wait(S_PlateNum );
往盤子中放入一個蘋果;
Signal(S_AppleNum);
}
兒子進程
while(TRUE)
{
Wait(S_AppleNum);
從盤中取出蘋果;
Signal(S_PlateNum);
吃蘋果;
}
桌上有一空盤,允許存放一只水果,爸爸可向盤中放蘋果,也可向盤中放桔子,兒子專等吃盤中的桔子,女兒專等吃盤中的蘋果。規定當盤空時一次只能放一只水果供吃者取用。
請用Wait/Signal原語實現爸爸、兒子、女兒三個并發進程的同步。
Semaphore S=1; //S 表示盤子是否為空;
Semaphore S1=0; //S1表示盤中是否有蘋果;
Semaphore S2=0; //S2表示盤中是否有桔子;
while(TRUE)
{
Wait(S);
將水果放入盤中;
if (放入的是桔子)
Signal(S2);
Else
Signal(S1);
}
while(TRUE)
{
Wait(S2);
從盤中取出桔子;
Signal(S);
吃桔子;
}
while(TRUE)
{
Wait(S1);
從盤中取出蘋果;
Signal(S);
吃蘋果;
}
父親-母親-兒子-女兒
一個蘋果或桔子
Semaphore:s=1(空盤數);
s1=0(蘋果數);s2=0(桔子數);
爸爸:while(true) { wait(s); 放蘋果; signal(s1); }
媽媽:while(true) { wait(s); 放桔子; signal(s2); }
兒子:while(true) { wait(s2); 取桔子; signal(s); }
女兒:while(true) { wait(s1); 取蘋果; signal(s); }
父親-母親-兒子-女兒
兩個蘋果或桔子
Semaphore:s=2(可用位置); s1=0(蘋果數);
s2=0(桔子數);mutex=1;
爸爸:wait(s); wait(mutex);放蘋果; signal(mutex); signal(s1);
媽媽:wait(s); wait(mutex); 放桔子; signal(mutex); signal(s2);
兒子:wait(s2); wait(mutex); 取桔子; signal(mutex); signal(s);
女兒:wait(s1); wait(mutex); 取蘋果; signal(mutex); signal(s);
練習題:某寺廟有小和尚、老和尚若干。
有一個水缸,由小和尚打水入缸供老和尚飲用。
水缸可容納10桶水。
水取自同一井中。每次只能容納一個桶取水。
水桶總數為3個。每次入、取水僅為一桶,且不可同時進行。
給出有關取水、入水的算法描述。
semaphore empty=10;// 表示缸中目前還能裝多少桶水,
初始時能裝10桶水
semaphore full=0;// 表示缸中有多少桶水,
初始時缸中沒有水
semaphore buckets=3;// 表示有多少只空桶可用,
初值為3
semaphore mutex_well=1;// 用于實現對井的互斥操作
semaphore mutex_bigjar=1; // 用于實現對缸的互斥操作
young_monk(){
while(1){
Wait(empty);
Wait(buckets);
go to the well;
Wait(mutex_well);
get water;
Signal(mutex_well);
go to the temple;
Wait(mutex_bigjar);
pour water into the big jar;
Signal(mutex_bigjar);
Signal(buckets);
Signal(full);
}
}
old_monk(){
while(1){
Wait(full);
Wait(buckets);
Wait(mutex_bigjar);
get water;
Signal(mutex_bigjar);
Signal(empty);
drink water;
Signal(buckets);
}
}
哲學家進餐問題
放在桌子上的筷子是臨界資源,在一段時間內只允許一個哲學家使用。為實現對筷子的互斥使用,用一個信號量表示一只筷子,五個信號量構成信號量數組。
semaphore chopstick[5];
所有信號量均被初始化為1。
semaphore chopstick[5] ={1, 1, 1, 1, 1};
Process i()
{ while(true){
think;
Swait(chopstick[ ( i +1) % 5] , chopstick[ i ] );
eat;
Ssignal(chopstick[ ( i +1) % 5] , chopstick[ i ] );
}
}
7、線程的概念及種類、引入線程的目的;
目的:
減少程序在并發執行時所付出的時空開銷,使操作系統具有更好的并發性。
線程:進程中一個相對獨立的執行流。線程是CPU執行單位,作為CPU調度單位。
用戶級線程 User-level threads
內核支持線程 Kernel Supported threads
組合方式
補充:
8.程序順序執行時的特征
(1) 順序性
處理機的操作嚴格按照程序所規定的順序執行。
(2) 封閉性
程序一旦開始執行,其計算結果不受外界因素的影響。
(3) 可再現性
程序執行的結果與它的執行速度無關(即與時間無關),而只與初始條件有關。
例如:
I1、C1、P1的執行必須嚴格按照I1,C1,P1的順序,而P1與I2,C1與I2,I3與P1是可以同時執行的。
9操作系統內核主要包含兩個功能:
(1)支撐功能
(2)資源管理功能
內核:計算機硬件的第一層擴充軟件
第三章 處理機調度與死鎖
1、 調度的層次與作用;
處理機調度的層次
高級調度(長程調度):作業調度 高級調度適用于
批處理系統 :需要作業調度
分時系統 :不需作業調度
實時系統 :不需作業調度
中級調度(中程調度):內存調度
目的:為了提高內存利用率和系統吞吐量。
低級調度(短程調度):進程調度
在多道批處理、分時、實時OS中,都有LLS。
調度的對象是進程(或內核級線程)
主要功能:根據某種算法,決定就緒隊列中的哪個進程應獲得處理機 ,并由分派程序將處理機分配給被選中的進程。
調度的職能
(1) 記錄系統中所有進程的有關情況
(2) 確定分配處理機的原則
(3) 分配處理機給進程
(4) 從進程收回處理機
2、常用調度算法及計算;(看筆記:FCFS,SJF,高響應比優先調度算法,輪轉調度算法(看課本))
【典型題舉例】設有三個作業,它們的提交時間及運行時間如下表,若采用短作業優先調度策略,試給出作業串行運行時的調度次序,計算平均周轉時間。
作業 提交時間 運行時間
J1 0 4
J2 2 8
J3 3 5
P1 0 8
P2 1 4
P3 2 1
進程 已占有資源 最大需求數
A B C D A B C D
P1 0 0 1 2 0 0 1 2
P2 1 0 0 0 1 7 5 0
P3 1 3 5 4 2 3 5 6
P4 0 6 3 2 0 6 5 2
P5 0 0 1 4 0 6 5 6
P4 4 3
3、死鎖的概念、產生的原因及必要條件;
死鎖的概念:
指進程之間無休止地互相等待!
饑餓(Starvation):指一個進程無休止地等待!
產生的原因
(1).競爭資源。
資源類型:
可剝奪和非剝奪性資源
永久性資源和臨時性資源
(2).進程間推進順序非法。
必要條件:
互斥條件
指進程對所分配到的資源進行排他性使用;
即在一段時間內某資源只由一個進程占用;
如果此時還有其他進程請求該資源,則請求者只能等待,直至占有該資源的進程用畢釋放。
請求和保持條件
指進程已經保持了至少一個資源,但又提出了新的資源請求;
而該資源又被其他進程占有;
此時請求進程阻塞,但又對自己已獲得的資源保持不放。
不剝奪條件
指進程已獲得的資源,在未使用完之前,不能被剝奪;
只能在使用完時由自己釋放。
4.環路等待條件
指在發生死鎖時,必然存在一個“進程—資源”的環形鏈;
4、處理死鎖的基本方法;
一、預防死鎖——消除產生死鎖的必要條件(靜態)
二、避免死鎖——分配資源時防止進入不安全狀態(動態)
三、檢測死鎖——不預防死鎖,隨時檢測死鎖(動態)
四、解除死鎖——出現死鎖就解除(動態)
5、銀行家算法及計算;(看筆記)
(1)如果Requesti[j]<= Need[i,j],便轉向步驟2;否則認為出錯,因為它所需要的資源數已超過它所宣布的最大值。
(2)如果Requesti[j]<= Available[j],便轉向步驟3;否則,表示尚無足夠資源,Pi需等待。
(3)系統試探著把資源分配給進程Pi ,并修改下面數據結構中的數值:
Available[j]:= Available[j]- Requesti[j];
Allocation[i,j]:=Allocation[i,j]+Requesti[j];
Need[i,j]:=Need[i,j]-Requesti[j];
(4)系統執行安全性算法,檢查此次資源分配后系統是否處于安全狀態以決定是否完成本次分配。
【典型題舉例】
? 某系統有A、B、C、D四類資源可供五個進程P1.P2.P3.P4.P5共享。系統對這四類資源的擁有量為:A類3個、B類14個、C類12個、D類12個。進程對資源的需求和分配情況如下,請問現在是否是安全狀態,請說明原因及判斷過程。
? 化簡下圖的資源分配圖,并說明有無進程處于死鎖狀態。
第四章 存儲管理
1、存儲管理的目的、功能;
功能:
內存分配與回收
內存共享與保護
內存擴充
地址變換
目的:
方便用戶和提高主存利用率
2、重定位的概念及方法;
概念:把程序中的邏輯地址變成內存中的物理地址的過程叫做重定位。
方法:
絕對裝入方式
在編譯時,如果知道程序駐留在內存的什么位置,那么編譯程序將產生絕對地址的目標代碼。
程序中的邏輯地址與實際內存地址完全相同,無需對程序和數據的地址進行變換。
優點:裝入過程簡單。
缺點:過于依賴硬件結構,不便多道程序系統。
靜態重定位裝入方式
在多道程序環境下,目標模塊的起始地址通常從0開始,程序中的其它地址都是相對于起始地址計算的;
因此應采用可重定位裝入方式,根據內存的實際情況,將裝入模塊裝入到內存的適當位置。
動態重定位裝入方式
程序裝入內存后,并不立即實施地址變換,而是把這種地址轉換推遲到程序真正運行時才進行;
裝入內存后仍是相對地址;
應設置一個重定位寄存器。
3、內碎片、外碎片;
4、常用分區分配算法及對應的空閑區排列方式;
(1)單一連續分配
內存分為兩個區域:系統區,用戶區。應用程序裝入到用戶區,可使用用戶區全部空間。
最簡單,適用于單用戶、單任務的OS。
優點:易于管理。
缺點:
對要求內存空間少的程序,造成內存浪費;
程序全部裝入,很少使用的程序部分也占用內存。
(2)固定分區分配
基本原理及技術
系統提前把內存分為一些大小相等或不等的分區(partition),每個進程占用一個分區。操作系統占用其中一個分區。
適用于多道程序系統和分時系統
支持多個程序并發執行
劃分分區的方法:
(3)動態(可變)分區分配
動態創建分區:
在裝入程序時按其初始要求分配;
或在其執行過程中通過系統調用進行分配或改變分區大小。
優點:沒有內碎片。
缺點:有外碎片;
(4)動態可重定位分區分配
常用的分配算法
(1) 首次適應算法FF(First Fit)
(2) 循環首次適應算法NF(Next Fit)
(3) 最佳適應算法BF(Best Fit)
(4) 最壞適應算法WF(Worst Fit)
5、基本分頁(分段)的概念、頁(段)表的作用、地址變換過程及物理地址計算;
基本分頁存儲管理方式
1.分頁存儲管理的基本方法
將程序的邏輯地址空間劃分為固定大小的頁;
物理內存劃分為固定大小的塊(頁架);
程序加載時,分配其所需的所有頁,這些頁不必連續。需要CPU的硬件支持。
頁面和物理塊
分頁存儲管理是將一個進程的邏輯地址空間分成若干個大小相等的片稱為頁,并為各頁加以編號,從0開始。
同時把內存空間分成與頁面相同大小的若干個存儲塊,稱為塊。
在為進程分配內存時,以塊為單位將進程的若干個頁分別裝入到多個可以不相鄰的物理塊中。
進程的最后一頁經常裝不滿而形成“頁內碎片”。
假定地址長度32位:
每頁的大小為4KB , 即:0?11位為位移量(頁內地址)
則:12 ?31位為頁號,地址空間最多允許有1M頁
設有一頁式存儲管理系統,向用戶提供的邏輯地址空間最大為16頁,每頁2048B,內存總共有8個存儲塊,試問邏輯地址至少應為多少位?內存空間有多大?
解:(1)頁式存儲管理系統的邏輯地址為:
其中頁內地址表每頁的大小即 2048B=2*1024B=2^11B,所以頁內地址為11位。
其中頁號表最多允許的頁數即 16頁=2^4頁,所以頁號為4位。
故邏輯地址至少應為15位。
(2)物理地址為:
其中塊內地址表每塊的大小與頁大小相等,所以塊內地址也為11位。
其中塊號表內存空間最多允許的塊數即 8塊=2^3塊,所以塊號為3位。
故內存空間至少應為14位,即2^14 =16KB
1.分段地址結構
由于整個作業的地址空間是分成多個段,因而是二維的,亦即,其邏輯地址由段號(段名)和段內地址所組成。
該地址結構允許一個作業最長有64K個段,每段的最大長度為64KB。
對于下表所示的段表,請將邏輯地址(0,137),
(1,4000),(2,3600),(5,230)轉換成物理地址。
【典型題舉例】
(1)某頁式存儲系統頁表如下,設每頁1KB,請寫出邏輯地址為8300時所對應的頁號和頁內地址,以及在內存中對應的物理地址。(請詳細寫出運算過程)
系統頁表:
頁號 0 1 2 3 4 5 6 7 8
塊號 3 5 6 10 8 7 1 2 4
(2)已知如下段表:
段號 0 1 2 3 4
基址 219 2300 90 1327 1952
長度 600 14 100 580 96
在分段存儲管理下系統運行時,下列邏輯地址(第一位表示段號,第二位表示段內位移)的物理地址是什么?
(a):(1,10)
(b):(4,112)
6、分頁與分段的區別、各自的優缺點;
7、快表的作用、內存訪問時間的計算;
第五章 虛擬存儲器
1、虛擬存儲器的基本概念、理論依據、基本特征及關鍵技術;
是指具有請求調入功能和置換功能, 能從邏輯上對內存容量加以擴充的一種存儲器系統。
其容量接近于外存,其運行速度接近于內存速度,而每位的成本卻又接近于外存。
**在虛存管理中,虛擬地址空間是指邏輯地址空間,
實地址空間是指物理地址空間;
前者的大小受CPU可尋址范圍(機器地址長度)的限制,
而后者的大小受物理內存大小的限制。
**基本特征:
多次性:一個作業被分成多次調入內存運行
對換性:允許在作業的運行過程中進行換進、換出。
虛擬性:能夠從邏輯上擴充內存容量,使用戶所看到的內存容量遠大于實際內存容量。
虛擬性以多次性和對換性為基礎。
實現虛存技術的物質基礎
二級存儲結構——內存+外存
動態地址轉換機構——將邏輯地址轉換成物理地址
虛擬存儲管理實現技術
請求分頁虛擬存儲管理
請求分段虛擬存儲管理
請求段頁式虛擬存儲管理
2、熟知請求分頁基本思想;
1)請求分頁=分頁+請求
邏輯空間分頁 物理空間分塊
頁與塊同樣大 頁連續塊離散
用頁號查頁表 硬件做重定位
(2)作業部分裝入內存
(3)作業所占的內存塊不連續
(4)硬件通過頁表生成訪問內存的地址
(5)若發生缺頁,則進行缺頁中斷處理,將該頁調入內存
(6)利用快表可以加速地址轉換
3、頁面置換算法、缺頁率計算、LRU算法的硬件實現方法、抖動、Belady異常、缺頁中斷;
【典型題舉例】
在頁式虛擬存儲管理的計算機系統中,運行一個共有7頁的作業,且作業在主存中分配到3塊主存空間,作業執行時訪問頁的順序為1, 2, 3, 4, 2, 1, 5, 6, 2, 1, 3, 7, 6, 3, 2, 1, 2, 3, 6。假設3個物理塊初始為空,所有頁面都采用請調式LRU替換算法,要求圖示出內存頁面變化情況,并計算缺頁率。
(LRU)置換算法 :
某程序大小為460個字,考慮如下訪問序列:10,11,104,170,73,309,189,245,246,434,458,364,頁幀大小為100個字,請給出頁面訪問串(即頁面走向)。
解:
頁號=邏輯地址/頁幀大小,所以訪問串為:
0,0,1,1,0,3,1,2,2,4,4,3
也可簡化為:0,1,0,3,1,2,4,3
4、虛擬內存下內存訪問時間的計算;
【典型題舉例】
沒有快表的情況(設訪存一次所需的時間為t):
查找頁表找到對應頁表項,需要訪存一次;
通過對應頁表項中的物理地址訪問對應內存單元,需要訪存一次;
因此,EAT=t+t=2t
有快表的情況:設訪問快表的時間為λ,快表的命中率為a,則
EAT=a(λ+t)+(1-a)(λ+t+λ+t)
對一個將頁表存放在內存中的分頁系統:
(1)若訪問內存需要0.2us,有效訪問時間為多少?
(2)如果加一快表,且假定設置快表的命中率高達90%,則有效內存訪問時間又是多少?(快表查詢需要時間忽略)。
分頁系統要訪問兩次,第一次要訪問頁表,將頁號換成頁地址,并與偏移量相加,得出實際地址,第二次要訪問實際的地址的,所以所用時間是0.4μs,如果有快表,命中率為90%,則訪問時間為0.290%+0.410%=0.18+0.04=0.22μs
第六章 設備管理
1、設備管理的任務、功能及目標;
完成用戶提出的I/O請求
提高I/O速率
提高設備的利用率
為更高層的進程方便地使用這些設備提供手段。
2、I/O設備的分類,設備、控制器及通道的關系;
1.I/O設備的類型
★按使用特性分類
①存儲設備,也稱外存、輔存,是用以存儲信息的主要設備。該類設備存取速度較內存慢,但容量卻大得多,價格也便宜。
②I/O設備,它又可分為輸入設備、輸出設備和交互式設備。
★按傳輸速率分類
①低速設備:其傳輸速率僅為每秒鐘幾個字節至數百個字節的一類設備,如鍵盤、鼠標器。
②中速設備:傳輸速率在每秒鐘數千個字節至數十萬個字節的一類設備,如行式打印機、激光打印機等。
③高速設備:傳輸速率在數十萬字節至千兆字節的一類設備,如磁帶機、磁盤機、光盤機等。
設備與控制器之間的接口
①數據信號線:用于在設備和設備控制器之間傳送數據信號。
②控制信號線:由設備控制器向I/O設備發送控制信號時的通路。
③狀態信號線:用于傳送指示設備當前狀態的信號。
3、通道的基本概念及分類;
雖然在CPU與I/O設備之間增加了設備控制器后,已能大大減少CPU對I/O的干預,但當主機所配置的外設很多時,CPU的負擔仍然很重。
CPU和設備控制器之間又增設了通道。
目的:是使一些原來由CPU處理的I/O任務轉由通道來承擔,從而把CPU從繁雜的I/O任務中解脫出來。
2.通道類型
1) 字節多路通道(Byte Multiplexor Channel)
2) 數組選擇通道(Block Selector Channel)
3) 數組多路通道(Block Multiplexor Channel)
4、I/O控制方式及推動發展的因素、各自適用的場合;
I/O控制方式主要有
程序輪詢方式:該方式采用用戶程序直接控制主機與外部設備之間輸入/輸出操作。CPU必須不停地循環測試I/O設備的狀態端口,當發現設備處于準備好(Ready)狀態時,CPU就可以與I/O設備進行數據存取操作。
中斷方式:
當I/O設備結束(完成、特殊或異常)時,就會向CPU發出中斷請求信號,CPU收到信號就可以采取相應措施。當某個進程要啟動某個設備時,CPU就向相應的設備控制器發出一條設備I/O啟動指令,然后CPU又返回做原來的工作。
DMA方式:
DMA方式也稱為直接主存存取方式,其思想是:允許主存儲器和I/O設備之間通過“DMA控制器(DMAC)”直接進行批量數據交換,除了在數據傳輸開始和結束時,整個過程無須CPU的干預。
I/O通道控制方式:
通道(Channel)也稱為外圍設備處理器、輸入輸出處理機,是相對于CPU而言的。是一個處理器。也能執行指令和由指令的程序,只不過通道執行的指令是與外部設備相關的指令。是一種實現主存與I/O設備進行直接數據交換的控制方式。
5、緩沖區的概念、分類及引入目的;單緩沖、雙緩沖計算處理數據的時間;
在單緩沖區中,當上一個磁盤塊從緩沖區讀入用戶區完成時,下一個磁盤塊才能開始讀入,也就是當最后一塊磁盤塊讀入一用戶區完畢時所用時間為15010=1500us,加上處理最后一個磁盤塊的時間50us,得1550us。雙緩沖區中,不存在等待磁盤塊從緩沖區讀入用戶區的問題,10個磁盤塊可以連續從外存讀入主存緩沖區,加上將最有一個磁盤塊從緩沖區送到用戶區的傳輸時間50us以及處理時間50us,也就是10010+50+50=1100us
【典型題目舉例】
? 某文件占10個磁盤塊,現要把該文件磁盤塊逐個讀入主存緩沖區,并送用戶區進行分析。假設一個緩沖區與一個磁盤塊大小相同,把一個磁盤塊讀入緩沖區的時間為100μs,將緩沖區的數據傳送到用戶區的時間是50μs,CPU對一塊數據進行分析的時間為50μs。試計算在單緩沖區和雙緩沖區結構下,讀入并分析該文件的時間分別是多少,并畫圖說明計算過程。
6、I/O軟件的層次、各層主要功能、設備獨立性的概念;
設備獨立性是指用戶程序獨立于具體使用的物理設備的一種特性。
(I) 用戶層I/O軟件,實現與用戶交互的接口,用戶可直接調用該層所提供的、與IO操作有關的庫函數對設備進行操作。
(2) 設備獨立性軟件,用于實現用戶程序與設備驅動器的統接口、設備命名、設備的保護以及設備的分配與釋放等,同時為設備管理和數據傳送提供必要的存儲空間。
(3) 設備驅動程序,與硬回件直接相關,用于具體實現系統對設備發出的操作指令,驅動I/O設備工作的驅動程序。
(4)中斷處理程序,用于保存被中答斷進程的CPU環境,轉入相應的中斷處理程序進行處理,處理完畢再恢復被中斷進程的現場后,返回到被中斷的進程。
7、SPOOLING技術的概念、作用及SPOOLING系統的組成;
? SPOOLing技術是一類典型的虛擬設備技術,通常是用獨占設備來模擬共享設備。(F)
操作系統在用戶層中還提供了一些非常有用的程序,比如假脫機系統,以及在網絡傳輸文件時常使用的守護進程等,它們是運行在內核之外的程序,但它們仍屬于I/O系統。
SPOOLING的組成
主要有四部分:
(1).輸入井和輸出井。是磁盤上開辟的兩個大存儲空間。輸入井模擬脫機輸入的磁盤設備,輸出井模擬脫機輸出時的磁盤。
(2).輸入緩沖區和輸出緩沖區。輸入緩沖區暫存由輸入設備送來的數據,后送輸入井;輸出緩沖區暫存從輸出井送來的數據,后送輸出設備。
(3).輸入進程和輸出進程。利用兩個進程模擬脫機I/O時的外圍處理機。
(4).井管理程序。用于控制作業與磁盤井之間信息的交換。
8、磁盤訪問過程及訪問時間的確定、塊號與柱面、磁道、扇區號的對應關系、磁盤調度算法及其計算;扇區的優化;
(看輸入輸出I/O第六章145頁ppt)
【典型題目舉例】
? 若磁頭的當前位置為100 柱面,磁頭正向磁道號減小方向移動?,F有一磁盤讀寫請求隊列,柱面號依次為:190 , 10 , 160 , 80 , 90 , 125 , 30 , 20 , 29 , 140 , 25 。若采用電梯調度算法,試計算移臂經過的柱面數和平均尋道長度。
第七章 文件管理
1、文件系統的組成、功能;
文件系統由三部分組成:文件系統的接口,對對象操縱和管理的軟件集合,對象及屬性。
文件系統功能:
用戶角度:
實現“按名存取”
系統角度:
文件存儲空間的管理
文件的存儲與檢索
文件的共享與保護。
2、打開、關閉操作的目的;
把該文件的有關控制信息( FCB )讀入內存,建立相應的數據結構,以建立用戶和該文件的聯系,方便讀寫,避免多次重復地檢索目錄,節省檢索開銷,提高操作速度。
文件描述符/文件句柄。
3、文件邏輯結構;
?
文件邏輯結構的類型:
順序文件
記錄尋址
索引文件
索引順序文件
直接文件和哈希文件
文件組織的兩種觀點
⑴用戶觀點(邏輯結構)
研究的是用戶思維中的抽象文件,也叫邏輯文件。其目的是為用戶提供一種結構清晰、使用簡便的邏輯組織。用戶按此去存儲、檢索和加工處理有關文件信息。
⑵實現觀點(物理結構)
研究的是存儲在物理設備介質上的實際文件,即物理文件。其目的是選擇一些性能良好、設備利用率高的物理結構。系統按此和外部設備打交道,控制信息的傳輸。
邏輯結構分類
(1)是否有結構
①有結構文件:由一個以上的記錄構成的文件,
又稱為記錄式文件;
定長記錄/變長記錄。
②無結構文件:由字符流構成的文件,
又稱為流式文件。
⑵文件的邏輯組織方式
①順序文件
②索引文件
③索引順序文件
4、文件的目錄結構、索引節點及文件控制塊的作用;
? 如何加快目錄檢索?
? 目錄項分解法:即把FCB分成兩部分,符號目錄項:文件名,文件號,基本目錄項:除文件名外的所有字段
5、了解文件的共享和保護措施。
第八章 磁盤存儲器的管理
1、文件的物理結構;
常用的物理結構有連續文件結構、串聯文件結構、索引文件結構三種。
2、 FAT表的作用、FAT表大小的計算;
FAT技術
利用文件分配表FAT記錄每個文件所有盤塊之間的鏈接。
Windows NT、Windows 2000和Windows XP操作系統則采用NTFS(新技術文件系統)
【典型題目舉例】
假設盤塊大小為512B,硬盤的大小為100MB,如果采用顯式鏈接管理方式,對應的FAT為多少字節?
? 100MB/512B=200K個塊;
? 需要18個二進制位來描述塊號;
? 按照FAT表的組織結構,每個表項需要擴充成20位即2.5個字節;
? 所以FAT表的大小=2.5B*200K=500KB。
3、 混合索引分配方式的結構及相關計算;
【典型題目舉例】
? 某磁盤文件系統,采用混合索引分配方式,13個地址項記錄在FCB中,第0-9個地址項為直接地址,第10個地址項為一次間接地址,第11個地址項為二次間接地址,第12個地址項為三次間接地址。如果每個盤塊的大小為512字節,盤塊號需要用3個字節來描述,問:
1)該文件系統允許文件的最大長度是多少?
2)若要讀取字節地址為5000B處的文件數據,試計算得到其映射到的物理地址(磁盤塊號及偏移量),請寫明計算過程。
4、文件空閑區的管理方法(空閑表、空閑鏈、位示圖與成組鏈接法);
【典型題目舉例】
假設一個磁盤組有 100 個柱面,編號為 0-99,每個柱面有 32 個磁道,編號為 0-31,每個磁道有16 個扇區,編號為0-15?,F采用位示圖方法管理磁盤空間,磁盤塊與扇區大小相等,令磁盤塊號按柱面順序和磁道順序編排(從0編起)。請回答下列問題:(5分)
1)若采用32 位的字組成位示圖,共需要多少個字?
2)第40 字的第18 位對應于哪個柱面、哪個讀寫磁頭和哪個扇區?
1)(16×32×100)/32=1600,需要1600 個字。
2)塊號是1298:40×32+18=1298
柱面號是2:[1298/(16×32)]=2
磁頭號是17:[(1298 mod (16×32))/16]=17
扇區號是2:(1298 mod (16×32))mod 16=2
? 某UNIX操作系統的空閑盤塊號棧內容為:空閑塊數為3,依次登記的空閑塊號為77、89、60,問此時若一個文件A需要5個盤塊,系統進行分配后又有個文件B被刪除,它占用的盤塊塊號為100、101、109、500,分析分配和回收過程,說明上述操作過后空閑盤塊號棧里的空閑塊個數及內容如何?
5、了解提高磁盤I/O速度的途徑。
總結
- 上一篇: win10怎么将任务栏变成双排 win1
- 下一篇: 堆