計算機作業系統實驗之_程序觀測_實驗報告
阿新 • • 發佈:2019-01-30
南陽理工學院計算機作業系統實驗之
課程名稱: |
計算機作業系統 |
實驗學期: |
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");
}
}
參考書目
西安電子科技大學出版社 《計算機作業系統(第 三 版)》湯小丹 、樑紅兵、哲鳳屏、 湯子瀛 著
實驗原始碼以及編譯好的程式下載地址點選開啟連結