計算機作業系統實驗之_程式觀測_實驗報告
南陽理工學院計算機作業系統實驗之
課程名稱: |
計算機作業系統 |
實驗學期: |
2011-2012第二學期 |
實驗目的和要求
(1)瞭解在Linux作業系統中程式的特點和表現形式
(2)掌握Linux檢視程式的方式與方法(3)在一個程式中建立另一個程式的方法
(4)掌握父程式和子程式的關係和fork的用法
實驗內容與分析設計
實驗內容:
(1)編寫一個簡單的程式,使用ps或top工具觀察該程式的的ID號,並使用kill工具終止程式執行。
(2)編寫一個程式,使用fork函式生成一個子程式,並使用相關工具觀察程式狀態。
實驗步驟:
(1)
#include <stdio.h>
int main()
{
//設計一個迴圈,使其反覆執行,方便觀察
while(1)
{
printf("I am the first process!\n");
}
return 0;
}
檔名命名為process1.c,使用gcc process1.c -o process編譯該程式。執行該程式,開啟其它一個終端
視窗,輸入命令top,觀察名稱為process1的程式,記錄各項資料(包括程式號)。使用"kill 程式號" 直接殺死該程式。觀察程式是否消失?
需要記錄的資料:程式狀態中的id,記憶體使用和CPU佔有率。由於該程式一直處於迴圈中,思考id、記憶體
使用和cpu佔有率哪一個因素和迴圈
關係密切?如何避免,請給出合理的建議。這是否說明CPU也是作業系統中的一個重要資源?
(2)
//process2.c
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
int i;
if ( fork() == 0 )
{
/* 子程式程式 */
for ( i = 1; i <1000; i ++ )
printf("This is child process\n");
}
else
{
/* 父程式程式*/
for ( i = 1; i <1000; i ++ )
printf("This is process process\n");
}
}
請儲存為process2.c,編譯執行,寫出你觀察到的輸出結果,能否對輸出的現象做一個合理的解釋?
若將上述例項(2),改寫為:
//process4.c
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
int i;
if ( fork() == 0 )
{
/* 子程式程式 */
for ( ;; )
printf("This is child process\n");
}
else
{
/* 父程式程式*/
for ( i=1;i<1000;i++ )
printf("This is process process\n");
}
}
請儲存為process4.c,編譯執行,寫出你觀察到的輸出結果,能否對輸出的現象做一個合理的解釋?
若將將例項(2)改為:
//process3cc
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
int i;
if ( fork() == 0 )
{
/* 子程式程式 */
for ( ;; )
printf("This is child process\n");
}
else
{
/* 父程式程式*/
for ( ;; )
printf("This is process process\n");
}
}
請儲存為process3.c,編譯執行,寫出你觀察到的輸出結果,能否對輸出的現象做一個合理的解釋?
實驗步驟和除錯過程:
統一執行一下命令
vim process*.c(編輯原始檔)
gcc process*.c -o process*(編譯)
./process(執行程式)
top(檢視程式)
kill -9 程式號(結束程式)
實驗結果:
(1)process.c: 程式無限次輸出 I am the first process!直到輸入“kill 程式號”才結束
(2)process2.c: 父程式、子程式各輸出1000,且輸出次序不一(3)process4.c(process2.c更改後的版本):父程式執行1000次,子程式不確定,且順序不確定
(4)父程式子程式列印順序不確定,可見父程式和子程式各獨立執行。父程式子程式均無限次輸出,知道輸入“kill -9 程式號”才終止
疑難小結
(1)、最後一個程式peocess3.c,執行後,kill 程式號無法結束程式,只有kill 程式號-9後才能終止程式(2)、父子程式列印次序無規律,說明父子程式的進行是無序的隨機的。
主要演算法和程式清單
//process1.c
#include <stdio.h>
int main()
{
//設計一個迴圈,使其反覆執行,方便觀察
while(1)
{
printf("I am the first process!\n");
}
return 0;
}
//process2.c
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
int i;
if ( fork() == 0 )
{
/* 子程式程式 */
for ( i = 1; i <1000; i ++ )
printf("This is child process\n");
}
else
{
/* 父程式程式*/
for ( i = 1; i <1000; i ++ )
printf("This is process process\n");
}
}
//process4.c
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
int i;
if ( fork() == 0 )
{
/* 子程式程式 */
for ( ;; )
printf("This is child process\n");
}
else
{
/* 父程式程式*/
for ( i=1;i<1000;i++ )
printf("This is process process\n");
}
}
//process3.c
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
int i;
if ( fork() == 0 )
{
/* 子程式程式 */
for ( ;; )
printf("This is child process\n");
}
else
{
/* 父程式程式*/
for ( ;; )
printf("This is process process\n");
}
}
參考書目
西安電子科技大學出版社 《計算機作業系統(第 三 版)》湯小丹 、樑紅兵、哲鳳屏、 湯子瀛 著
實驗原始碼以及編譯好的程式下載地址點選開啟連結
相關文章
- 作業系統實驗六實驗報告作業系統
- 作業系統實驗七實驗報告作業系統
- 作業系統概念-程式控制 實驗報告作業系統
- 計算機網路實驗報告:【Wirshark 實驗】計算機網路
- ucore作業系統lab2實驗報告作業系統
- 作業系統之“實驗一”作業系統
- 作業系統實驗——程式控制作業系統
- 作業系統實驗(一)-Shell程式設計作業系統程式設計
- 作業系統實驗1 Shell程式設計作業系統程式設計
- 微信小程式 結課作業 (附實驗報告)微信小程式
- 實驗0、瞭解和熟悉作業系統實驗作業系統
- 作業系統實驗2 程式控制和系統呼叫作業系統
- 0512 作業系統程式排程實驗作業系統
- 計算機作業系統之程式掃盲計算機作業系統
- c語言程式實驗————實驗報告十二C語言
- c語言程式實驗——實驗報告五C語言
- c語言程式實驗————實驗報告十C語言
- 作業系統實驗——實驗1《CPU Scheduling》&&實驗二《Allocation & Reclaim》作業系統AI
- 作業系統第二次上機實驗-程式通訊作業系統
- 作業系統實驗4 系統呼叫聯絡作業系統
- 作業系統實驗 & bochs 環境配置作業系統
- 計算機實驗室之樹莓派計算機樹莓派
- 大學物理實驗電學基本引數的測量實驗報告_大學物理實驗報告(清華大學)實驗3.1電學元件伏安特性的測量實驗報告.doc...元件
- 《深入理解計算機系統》實驗三 —— Buf Lab計算機
- 《深入理解計算機系統》實驗二 —— Bomb Lab計算機
- 《計算機網路實驗課程》——Wireshark實驗計算機網路
- 計算機網路實驗ns2實驗計算機網路
- 作業系統課程實踐報告作業系統
- 取款機專案實驗報告
- 計算機網路驗證性實驗計算機網路
- 計算機網路實驗計算機網路
- 計算機作業系統計算機作業系統
- 作業系統實驗6之訊號量的實現與應用作業系統
- c語言程式設計--實驗報告一C語言程式設計
- c語言程式設計——實驗報告六C語言程式設計
- # c語言程式設計——實驗報告一C語言程式設計
- c語言程式設計——實驗報告一C語言程式設計
- c語言程式設計——實驗報告二C語言程式設計