日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

《操作系统》实验报告——熟悉Linux基础命令及进程管理

發(fā)布時(shí)間:2024/10/5 linux 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《操作系统》实验报告——熟悉Linux基础命令及进程管理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

理論知識(shí)

Linux——進(jìn)程管理

Linux——Linux C語言編程基礎(chǔ)知識(shí)

手把手教你安裝Linux虛擬機(jī)

一、實(shí)驗(yàn)?zāi)康?/h1>

(1)加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別。

(2)進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì)。

(3)分析進(jìn)程爭(zhēng)用資源的現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法。

二、實(shí)驗(yàn)內(nèi)容

Liunx文件與目錄操作

  • 顯示文件目錄命令ls
  • 改變當(dāng)前目錄命令cd
  • 建立子目錄mkdir
  • 刪除子目錄命令rmdir
  • 刪除文件命令rm
  • 文件改名命令mv
  • 文件復(fù)制命令cp
  • 顯示文件的內(nèi)容more或者less
  • 查找文件find
  • 重定向與管道 |

進(jìn)程管理

運(yùn)行以下附錄部分中給出的程序,查看自己運(yùn)行的結(jié)果,并進(jìn)行分析。

1、寫出程序的運(yùn)行結(jié)果,并分析為什么會(huì)得到這樣的結(jié)果。

2、畫出程序執(zhí)行的進(jìn)程樹并在相應(yīng)的進(jìn)程節(jié)點(diǎn)上標(biāo)出進(jìn)程號(hào)

編寫程序,要求見附錄部分

三、代碼及運(yùn)行結(jié)果分析

Liunx文件與目錄操作

顯示文件目錄命令ls

改變當(dāng)前目錄命令cd

建立子目錄mkdir

刪除子目錄命令rmdir

刪除文件命令rm??????????

文件改名命令mv

文件復(fù)制命令cp

顯示文件的內(nèi)容more或者less

查找文件find

重定向與管道 |

進(jìn)程管理

(1)運(yùn)行源碼

運(yùn)行上文進(jìn)程管理中給出的例子,查看自己運(yùn)行的結(jié)果,并進(jìn)行分析。

程序1

?

程序2

程序3

程序4

程序5

程序6

程序7

(2)進(jìn)程的創(chuàng)建

自己編寫一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)建子進(jìn)程,認(rèn)識(shí)進(jìn)程的并發(fā)執(zhí)行。

#include<stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdlib.h>int main(){pid_t pid;pid=fork();if(pid<0) /* 如果出錯(cuò) */printf("error occurred!\n");else if(pid==0) /* 如果是子進(jìn)程 */{printf("我是子進(jìn)程1,進(jìn)程號(hào)是%d\n",getpid());pid_t pid1;pid1 = fork();if(pid1==0){printf("我是子進(jìn)程1的子進(jìn)程,進(jìn)程號(hào)是%d\n",getpid());}}else{printf("我是父進(jìn)程,進(jìn)程號(hào)是%d\n",getpid());pid=fork();if(pid==0)printf("我是子進(jìn)程2,進(jìn)程號(hào)是%d\n",getpid());else{pid=fork();if(pid==0)printf("我是子進(jìn)程3,進(jìn)程號(hào)是%d\n",getpid());}}return 0;}

(3)進(jìn)程的同步

自己編寫一段程序,利用fork()、wait()等系統(tǒng)調(diào)用實(shí)現(xiàn)父子進(jìn)程間的同步。

#include<stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdlib.h> int main() {int p1,p2,i;while((p1=fork())==-1);if(p1==0){lockf(1,1,0);for(i=0;i<50000; i++)printf("son%d\n",i);lockf(1,0,0);}else{while((p2=fork())==-1);if(p2==0){lockf(1,1,0);for(i=0;i<50000;i++)printf("daughter%d\n",i);lockf(1,0,0);}else{lockf(1,1,0);for(i=0;i<50000;i++)printf("parent%d\n",i);lockf(1,0,0);}}return 0; }

?

(四個(gè)進(jìn)程管理的程序)

程序1

#include "stdio.h" main() {int i,j,k; if (i=fork()) {j=wait(); printf("Parent Process!\n"); printf("i=%d,j=%d,k=%d\n",i,j); } else {k=getpid(); printf("Child Process!\n"); printf("i=%d,k=%d\n\n",i,k); } }

?

使用fork()的進(jìn)程是父進(jìn)程,通過fork()建立的新進(jìn)程是子進(jìn)程。

fork()創(chuàng)建成功,返回值對(duì)子進(jìn)程是0,對(duì)父進(jìn)程是子進(jìn)程的pid(一個(gè)正整數(shù))。

在調(diào)用fork()后,父進(jìn)程和子進(jìn)程均從下一條語句開始執(zhí)行。

wait()的功能是阻塞父進(jìn)程,等待子進(jìn)程完成后使得父進(jìn)程繼續(xù)工作。

wait()的返回值是所等待的子進(jìn)程的進(jìn)程標(biāo)識(shí)符。

getpid()返回調(diào)用進(jìn)程的進(jìn)程標(biāo)識(shí)符,則輸出子進(jìn)程的k與父進(jìn)程的i,j相等。

輸出結(jié)果可能是:

Child Process! i=0,k=9351 Parent Process! i=9351,j=9351

?

程序2

#include <stdio.h> main() { int p1,p2; long i; char c1; while ((p1=fork())==-1); if (p1==0) {c1='B';write(1,&c1,1);for( i=0;i<3000000;i++) ; c1='b';write(1,&c1,1); } else {while ((p2=fork())==-1);if (p2==0){c1='C';write(1,&c1,1);for( i=0;i<3000000;i++) ;c1='c';write(1,&c1,1);}else{c1='A';write(1,&c1,1);for( i=0; i<3000000; i++) ;c1='a';write(1,&c1,1);}} }

用fork()創(chuàng)建兩個(gè)子進(jìn)程,程序運(yùn)行時(shí),系統(tǒng)中有1個(gè)父進(jìn)程和2個(gè)子進(jìn)程活動(dòng)。

每個(gè)進(jìn)程在屏幕上顯示兩個(gè)字符,父進(jìn)程顯示“A”和“a”。

write(1,&c1,1)的函數(shù)原型write(fd,buf,count):從buf所指向的內(nèi)存中輸出count個(gè)字符的信息到fd所代表的文件中,fd為文件號(hào),buf為一個(gè)地址,此處fd=1,代表的就是顯示屏,從地址&c1處輸出一個(gè)字符到屏幕上,就是顯示出c1,在每一個(gè)進(jìn)程代碼中間都有循環(huán)語句起延時(shí)作用,能夠看出進(jìn)程調(diào)度的效果。

為何不使用printf,printf經(jīng)過緩沖,使用后,“A”和“a”會(huì)一次顯示出來,不會(huì)交錯(cuò)顯示。

可能的輸出結(jié)果:AbbCca,AaBbCc,ABCcba等等。

程序3

main() {int m,n,k; m=fork(); printf("PID:%d\t",getpid()); printf("The return value of fork():%d\t\t",m); printf("hee\n"); n=fork(); printf("PID:%d\t",getpid()); printf("The return value of fork():%d\t\t",n); printf("ha\n"); k=fork(); printf("PID:%d\t",getpid()); printf("The return value of fork():%d\t\t",k); printf("ho\n"); }

程序3的簡(jiǎn)化

main(){ fork();printf(“hee\n”); fork();printf(“ha\n”); fork();printf(“ho\n”); }

為了便于觀察,先打印出調(diào)用進(jìn)程的進(jìn)程標(biāo)識(shí)符,而后是fork()的返回值。

若是

main(){ fork();printf(“hee\n”); }

打印出

hee (父進(jìn)程)hee (子進(jìn)程)

請(qǐng)大家上機(jī)抄下結(jié)果,畫出進(jìn)程樹,在每一個(gè)進(jìn)程結(jié)點(diǎn)邊上畫出標(biāo)識(shí)符。

程序4

#include <stdio.h> main() { int i; if (fork()==0){for(i=0;i<10000;i++) printf(".......................\n"); } else {if (fork()==0){for( i=0; i<10000; i++)printf("#################\n");}else for (i=0;i<10000;i++)printf("******************\n"); } }

程序4中也是3個(gè)進(jìn)程。

程序5

#include<stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdlib.h> int main() {int p1,p2;while((p1=fork())==-1);if(p1==0)printf("b.My process ID is %d\n",getpid());else{while((p2=fork())==-1);if(p2==0)printf("c.My process ID is %d\n",getpid());else printf("a.My process ID is %d\n",getpid());}return 0; }

程序6

#include<stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdlib.h> int main() { int m,n,k;m=fork();printf("PID:%d\t",getpid());printf("The return value of fork():%d\t\t",m);printf("he\n");n=fork();printf("PID:%d\t",getpid());printf("The return value of fork():%d\t\t",n);printf("ha\n");k=fork();printf("PID:%d\t",getpid());printf("The return value of fork():%d\t\t",k);printf("ho\n");return 0; }

程序7

#include<stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdlib.h> int main() {int p1,p2,i;while((p1=fork())==-1);if(p1==0)for(i=0;i<50000; i++)printf("son%d\n",i);else{while((p2=fork())==-1);if(p2==0)for(i=0;i<50000;i++)printf("daughter%d\n",i);elsefor(i=0;i<50000;i++)printf("parent%d\n",i);}return 0; }

四、實(shí)驗(yàn)心得

(1)加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別。

(2)進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì)。

(3)分析進(jìn)程爭(zhēng)用資源的現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法。

(4)復(fù)習(xí)課本關(guān)于進(jìn)程控制和進(jìn)程同步的內(nèi)容,加深對(duì)進(jìn)程管理概念的理解。

(5)認(rèn)真閱讀實(shí)驗(yàn)材料中進(jìn)程管理部分,分析多個(gè)進(jìn)程的運(yùn)行情況。

參考文章

《操作系統(tǒng)》實(shí)驗(yàn)報(bào)告——進(jìn)程管理

lockf函數(shù)的使用

?

總結(jié)

以上是生活随笔為你收集整理的《操作系统》实验报告——熟悉Linux基础命令及进程管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。