作業系統實驗——程式控制
作業系統實驗——程式控制
預習內容:
1.程式的概念
⑴程式的併發執行
⑵程式的定義
2.程式的描述
⑴程式控制塊
⑵程式上下文
⑶程式上下文切換
⑷程式空間與大小
3. 程式狀態及其轉換
⑴程式狀態
⑵程式狀態轉換
4.程式控制
⑴程式建立與撤銷
⑵程式的阻塞與喚醒
實驗目的與要求(及主要實驗儀器、裝置):
1、理解程式的概念,明確程式和程式的區別。
2、理解併發執行的實質。
3、 掌握程式的建立、睡眠、撤銷等程式控制方法
要求:
(1)一臺Windows7以上版本作業系統的計算機。
(2)計算機裝有Microsoft Visual Studio專業版或企業版。
實驗原理(方法與與原理分析):
程式的建立:
1.為新程式分配唯一的程式識別符號,並從PCB佇列中申請一個空閒的PCB;
2.為新程式分配必要的記憶體空間和其它各種資源;
3.初始化PCB中的相應資訊,如標識資訊、CPU資訊、程式控制資訊;
4.若條件許可,將新程式的PCB插入到就緒佇列中;
實驗步驟(程式程式碼與實驗過程):
步驟1:登入進入Windows,啟動VC++。
步驟2:在“FILE”選單中單擊“NEW”子選單,在“projects”選項卡中選擇“Win32ConsolApplication”,然後在“Projectname”處輸入工程名,在“Location”處輸入工程目錄。建立一個新的控制檯應用程式工程。
步驟3:在“FILE”選單中單擊“NEW”子選單,在“Files”選項卡中選擇“C++SourceFile”,然後在“File”處輸入C/C++源程式的檔名。
步驟4:將新建立的C/C++源程式中,編譯成的可執行檔案進行執行。
1.建立新程式程式碼:
void create()
{
if(num>=20) /判斷是否有儲存空間/
printf("\n 記憶體已滿,請刪除或掛起其他程式");
else{
for(i=0;i<20;i++)
if(neicun[i].state0) break; /按順序在記憶體中尋找建立新程式的空間/
printf("\n 請輸入新建程式的 pid 值\n");
scanf("%d",&neicun[i].pid);
for(j=0;j<i;j++) /判斷是否之前已儲存相同 pid 程式/
if(neicun[j].pidneicun[i].pid)
{ printf("\n 該程式已存在於記憶體中");
return;
}
printf("\n 請輸入新程式的優先順序 \n" );
scanf("%d",&neicun[i].youxianji);
printf("\n 請輸入新程式的大小\n" );
scanf("%d",&neicun[i].daxiao);
printf("\n 請輸入新程式的內容\n" );
scanf("%s",&neicun[i].neirong);
neicun[i].state=1; /將程式狀態設為 1,表示在記憶體中/
num++;/記憶體中程式數目加一/
}
}
2.檢視程式程式碼:
void run()
{ bj=0;
for(i=0;i<20;i++)
if(neicun[i].state1) /若程式狀態設為 1,表示在記憶體中,輸出檢視/
{printf("\n pid=%d",neicun[i].pid);
printf(" youxianji=%d",neicun[i].youxianji);
printf(" daxiao=%d",neicun[i].daxiao);
printf(" neirong=%s",neicun[i].neirong);
bj=1;/*存在於記憶體中的程式標記為 1 */
}
if(bj0)
printf("\n 當前沒有執行該程式\n" );/標記為 0,表示該程式未建立於記憶體中/
}
3.換出程式程式碼
void huanchu()
{if(num0) /num=0,表示記憶體中無程式/
{ printf("\n 當前沒有執行的程式\n" );
return;
}
printf("\n 請輸入要換出的程式的 pid 值\n" );
scanf("%d",&pid);
bj=0;
for(i=0;i<20;i++)
{
if(pidneicun[i].pid)
{ if(neicun[i].state1)
{neicun[i].state=2; /將該程式的狀態設為掛起/
guaqi++;
printf("\n 該程式已成功掛起換出\n" );
}
else if(neicun[i].state0)
printf("\n 要換出的程式不存在\n" );
else printf("\n 要換出的程式已經被掛起\n" );
bj=1;break;
}
}
if(bj0) printf("\n 要換出的程式不存在\n" );
}
4.殺死程式程式碼
void kill()
{
if(num0)
{ printf("\n 當前沒有執行的程式\n" );
return;
}
printf("\n 請輸入要殺死的程式的 pid 值\n" );
scanf("%d",&pid);
bj=0;
for(i=0;i<20;i++)
{
if(pidneicun[i].pid)
{ if(neicun[i].state1)
{neicun[i].state=0; /將該程式的狀態設為不在記憶體中/
num–; /記憶體中的程式數目減少一個/
printf("\n 該程式已成功殺死\n" );
}
else if(neicun[i].state0)
printf("\n 要殺死的程式不存在\n" );
else printf("\n 要殺死的程式已經被掛起\n" );/剩餘狀態為 2,掛起/
bj=1;break;
}
}
if(bj0) printf("\n 要殺死的程式不存在\n" );
}
5.喚醒程式程式碼
void huanxing()
{
if(num0)
{ printf(“當前沒有執行的程式\n”);
return;
}
if(guaqi0) /guaqi=0,表示沒有掛起的程式/
{ printf("\n 當前沒有換出的程式\n");
return;
}
printf("\n 請輸入要喚醒的程式的 pid 值:\n");
scanf("%d",&pid);
for(i=0;i<20;i++){
if(pidneicun[i].pid)
{
if(neicun[i].state2)
{neicun[i].state=1; /將該程式的狀態設為掛起/
guaqi–;
num++;
printf("\n 該程式已成功喚醒\n" );
}
else if(neicun[i].state==0)
printf("\n 要喚醒的程式不存在\n" );
else printf("\n 要喚醒的程式已經在記憶體中\n" );
}
}
}
實驗結果(資料分析與結論):
1.通過程式碼實現程式的建立和對是否有儲存空間的判斷,在有儲存空間的情況下新建程式pid值,並且對之前是否儲存相同pid值進行判斷,在確定沒有相同的pid程式的情況下輸入程式的優先順序,並且修改新建程式狀態記憶體空間減少,之後結束;如果在有儲存空間或者有相同的pid程式的情況下直接進行結束。
2.執行檢視的程式碼後通過檢視當前執行程式來判斷迴圈判斷記憶體中程式狀態是否為1,是的情況下輸出當前程式狀態後結束,如果記憶體中狀態不為1則直接結束。
3.建立程式
4.檢視當前執行程式
5.換出程式
6.殺死程式
7.喚醒程式
問題討論:
問:在什麼情況下會導致程式被撤銷?
答:
(1)該程式已完成所要求的功能而正常終止;
(2)由於某種錯誤導致非正常終止;
(3)祖先程式要求撤銷某個子程式。
相關文章
- 作業系統實驗2 程式控制和系統呼叫作業系統
- 作業系統概念-程式控制 實驗報告作業系統
- 作業系統實驗(一)-Shell程式設計作業系統程式設計
- 作業系統實驗1 Shell程式設計作業系統程式設計
- 0512 作業系統程式排程實驗作業系統
- 作業系統實驗六實驗報告作業系統
- 作業系統實驗七實驗報告作業系統
- 作業系統之“實驗一”作業系統
- 作業系統實驗4 系統呼叫聯絡作業系統
- 作業系統3——程式的描述與控制作業系統
- 計算機作業系統實驗之_程式觀測_實驗報告計算機作業系統
- 實驗0、瞭解和熟悉作業系統實驗作業系統
- 作業系統實驗 & bochs 環境配置作業系統
- 作業系統(二)——程式的描述與控制(1)作業系統
- web端作業控制系統簡易實現Web
- 作業系統實驗5 簡易檔案管理系統作業系統
- 作業系統面試經驗作業系統面試
- 寫作業系統之實現程式作業系統
- 作業系統(3)程式及其實現作業系統
- 作業系統學習筆記之初識程式和程式控制作業系統筆記
- 作業系統第二次上機實驗-程式通訊作業系統
- 作業系統實驗——實驗1《CPU Scheduling》&&實驗二《Allocation & Reclaim》作業系統AI
- ucore作業系統lab2實驗報告作業系統
- 【作業系統】程式的描述與控制[執行緒](4)作業系統執行緒
- 1.6.4. 作業系統驗證作業系統
- 作業系統-程式管理作業系統
- 【作業系統之程式】作業系統
- 【作業系統】2.併發控制作業系統
- 【作業系統】 第二章 程式管理 程式的描述與控制作業系統
- 作業系統實驗6:Introduction to OS161作業系統
- 作業系統實驗3 經典同步互斥問題作業系統
- Oracle在Windows Server下實現作業系統驗證OracleWindowsServer作業系統
- 作業系統篇-程式管理作業系統
- 【作業系統】程式管理(二)作業系統
- 作業系統(1)——作業系統概述作業系統
- 作業系統(一):作業系統概述作業系統
- 【Linux】類Unix 作業系統程式監控控制工具 SupervisorLinux作業系統
- 作業系統實驗:銀行家演算法(C語言)作業系統演算法C語言