作業系統實習th

2022-12-13 22:06:03 字數 3226 閱讀 8744

實驗1 程序管理

1. 實驗目的:

(1) 加深對程序概念的理解,明確程序和程式的區別。

(2) 進一步認識併發執行的實質。

(3) 分析程序徵用資源的現象,學習解決程序互斥的方法。

(4) 了解linux系統中程序通訊的基本原理。

2.實驗預備內容

(1)閱讀linux的的原始碼檔案,加深對程序管理概念的理解。

(2)閱讀linux的原碼檔案,分析程序的建立過程。

3.實驗內容

(1)程序的建立:

編寫一段程式,使用系統呼叫fork()建立兩個子程序。當此程式執行時,在系統中有乙個父程序和兩個子程序活動。讓每乙個程序在螢幕上顯示乙個字元:

父程序顯示字元『a』;子程序分別顯示字元『b』和字元『c』。試觀察記錄螢幕上的顯示結果,並分析原因。

#include(

int main()

return 0;

}結果分析:從程序併發執行來看,輸出bac,abc等的情況都有可能。

原因:fork()建立程序所需時間要多於輸出乙個字元的時間,因此在主程序建立程序2的

同時,程序1也在建立過程中,此時主程序執行輸出乙個「0」,而後程序1建立完成,輸出「b」最後程序2建立完成,輸出「c」。

實驗2 程序間通訊

1. 實驗目的:

linux系統的程序通訊機構(ipc)允許在任意程序間大批量地交換資料。本實驗的目的是了解和熟悉linux支援的訊息通訊機制,共享儲存區機制及資訊機制。

2. 實驗預備內容:閱讀linux系統的等原碼檔案,熟悉linux的三種通訊機制。

3. 實驗內容:

訊息的建立,傳送和接收。

1. 使用系統呼叫msgget(),msgsnd(),msgrev()j及msgctl()編制一長度為1k的訊息傳送和接收程式。

2. 觀察上面程式,說明控制訊息佇列系統msgctl()在此起什麼作用?

int main()

#include(

#include(sys/

#include(sys/

#include(sys/

#include(

#derfine msgkey 75;

struct msgform

msg;

int main()

int msgqid i;

void client()

exit(0);

}void server()

while(

msgct1(msgqid,ipc_rmid,0);

exit(0);

}int main()

結果分析:從理想結果來說,應當是每當client傳送乙個訊息後,server接受該訊息,server接受該訊息,client在傳送下一條,也就是說"(client)sent"和(sever)received的字樣應該交替出現在螢幕上。實際的結果大多是,先由client傳送了兩條訊息,然後

server接收一條訊息。此後client-server交替傳送和接收訊息。最後server一次接收兩條訊息。client和server分別接收了10條。

分析:message的傳送和控制並不保證完全同步,當乙個程式不在啟用狀態的時候他完全可能繼續睡眠,造成在多次send message

後才receive message的現象。這一點有助於理解訊息傳送的實現機理。

實驗3 儲存管理

1. 實驗目的:儲存管理的只要功能之一是合理地分配空間。請求頁式管理式一種常用的虛擬儲存管理技術。

本實驗的目的是通過請求頁式儲存管理中頁面置換演算法模擬設計,了解虛擬儲存技術的特點,掌握請求頁式儲存管理的頁面置換演算法。

2. 實驗內容:

(1) 通過隨機數產生乙個指令序列,共320條指令。指令的位址按下述原則生成:

1.50%的指令是順序執行的;

2.25%的指令是均勻分布在前位址部分;

3.25%的指令是均勻分布在後位址部分。

void main()

#include<>

#include<>

#include<>

#define true 1

#define false 0

#define invalid -1

#define null0

#define total_instruction 320

#define total_vp 32

#define clear_period 50

typedef struct

p1_type;

p1_type p1[total_vp];

struct pfc_struct

;typedef struct pfc_struct pfc_type;

pfc_type pfc[total_vp],*freepf_head,*busypf_head,*busypf_tail;

int diseffect,a[total_instruction];

int page[total_instruction],offset[total_instruction];

void main()

void initialize();

void fifo();

void lru();

void opt();

void lfu();

void nur();

main()

for(i=0;i

for(i=4;i<=32;i++)

}void main()

void fifo(total_pf)

int main()

int total_pf;

p=freepf_head->next;

freepf_head->next=null;

freepf_head->pn=page[i];

p1[page[i]].pfn=freepf_head->pfn;

if(busypf_tail==null)

busypf_head=busypf_tail=freepf_head;

else

freepf_head=p;

}}printf(" fifo:%6.4f ",1-(float)diseffect/320);

} void main

void lru(total_pf)

int total_pf;

freepf_head=&pfc[pl[minj].pfn];

pl[monj].pfn=invalid;

作業系統實習報告

主函式 void main 三 資料結構 先來先服務 struct stu 用結構體實現 時間片輪轉法 struct time,struct time time 宣告乙個指向time型別的物件的指標,指標的名字是time,用指標實現該功能 優先數排程 struct pcb2,pcb2裡面包含程序名 ...

作業系統實習報告樣本

1 作業系統實習報告內容 1 基本資訊 完 姓名 學號 報告日期 2 實習內容 3 實習目的 4 實習題目 5 設計思路和流程圖 6 主要資料結構及其說明 7 源程式並附上注釋 8 程式執行時的初值和執行結果 9 實習體會 實習中遇到的問題及解決過程 實習中產生的錯誤及原因分析 實習的體會及收穫 對...

網路作業系統實習報告

1.理解網路作業系統的功能 2.掌握windows 2000中的使用者管理方法 3.掌握windows 2000網路常用元件的功能 屬性檢視及安裝方法 4.掌握windows 2000資料夾 印表機共享設定 訪問方法及安全設定。1.建立使用者,修改使用者屬性,設定使用者許可權 2.建立使用者組,設定...