操作系统实验报告实验一:熟悉%20Linux%20命令及进程管理%20自己电脑上装了%20Ubuntu%20系统,所以这次实验的内容在此操%20作系统下进行在%20home%20文件夹下有如下目录workspace%20文件夹下有如下目录一、%20实验目的%201、%20熟悉%20Linux%20命令%202、%20用%20Vi%20文本编辑器新建%20c%20语言文件并编译运行%203、%20进程管理%20二、%20实验内容和步骤%201.%20熟悉%20Linux%20命令(1)ls%20显示文件目录%20打开终端%20ls%20显示%20home%20文件夹下文件目录如(5)中图所示%20(2)%20cd:改变当前目录cd%20workspace%20进入%20workspace%20文件夹%20ls%20显示%20workspace%20文件夹下目录%20如(5)中图所示%20(3)mkdir%20建立子目录mkdir%20newfile%20建立文件名为%20newfile%20的新目录%20ls%20显示目录%20如(5)中图所示%20(4)rmdir%20删除子目录%20rmdir%20newfile%20删除文件名为%20newfile%20的目录%20ls%20显示目录%20如(5)中图所示%20(5)mv%20文件改名%20mv%20example1%20example4%20将%20example1%20修改为%20example4%20ls%20显示目录2.%20用%20Vi%20文本编辑器新建%20c%20语言文件并编译运行%20在%20workspace/program%20文件夹下进行操作vi%20hello.c%20新建文件名为%20hello.c%20的文件i%20进入文本编辑模式输入程序代码Esc%20退出文本编辑模式%20Shift+;%20wq%20退出保存%20ls%20查看目录gcc%20hello.c%20–o%20hello%20编译%20ls%20查看目录(绿色表示可执行文件)./hello%20当前目录下执行输出%20hello%20linux!%203.%201.%20getpid()函数vi%20getpid_test.c%20i%20输入代码%20esc%20Shift+;%20wq%20gcc%20getpid_test.c%20-o%20getpid_test%20./getpid_test如下如所示,存在%20getpid_test.c%20文件和%20getpid_test%20可执行文件2.%20fork()函数%20前面已经熟悉%20vi%20编辑器模式,所以下面使用文档编辑运行%20fork_test%203.%20exit()函数运行%20exit_test%204.%20zombie.c运行%20zombie.c%20列一下系统内的进程%20ps%20-ax5.%20wait.c%20编写代码运行%20wait.c%20等待%2010%20秒后三、%20代码及运行结果分析%20附录程序%201、process1%20程序代码运行结果结果分析%20此处的运行结果与自己的设想出现了差别。
if(i=fork())表示为父进 程时,j=wait()父进程等待,此处应该返回子进程的 IDlinux命令,但返回的时 -1,正确的答案应该是 j=i(子进程 ID)。此处出错还没有找到原因, 自己课下会再查资料理解。2、process2 程序代码运行结果结果分析P1 父P1 子 b=2437P2 父 a3、process3P2 子 c=2436 c=2438程序代码运行结果结果分析ID=2687; m=2688;n=2689; k=2690ID=2689; m=2694;ID=2690ID=2694ID=2688 m=2691ID=2691 m=2693ID=2692ID=26934、process4 程序代码运行结果结果分析 子进程和父进程的执行顺序是随机的,在运行过程中,进程是会 被打断的。 5、编写程序#include <stdio.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"); if(m>0&&n>0){k=fork(); printf("PID:%d\t",getpid()); printf("The return value of fork():%d\t\t",k); printf("ho\n"); } }6、编写程序#include <stdio.h> int main(){int p1,p2,i;while((p1=fork())==-1); if(p1==0){ /*子进程 1*/lockf(1,1,0); /*锁定*/for(i=0;i<50000;i++)printf("son%d\n",i);lockf(1,0,0); /*解锁*/}else{/*父进程*/lockf(1,1,0); /*锁定*/while((p2=fork())==-1); if(p2==0){ /*父进程创建的子进程 2*/lockf(1,1,0); /*锁定*/for(i=0;i<50000;i++)printf("daughter%d\n",i);lockf(1,0,0); /*解锁*/}else{/*子进程 1 创建的子进程 3*/lockf(1,1,0); /*锁定*/for(i=0;i<50000;i++)printf("parent%d\n",i);lockf(1,0,0); /*解锁*/}lockf(1,0,0);/*解锁*/}}四、 心得体会 通过这次实验,自己对 linux 系统的基本命令有了初步的了解。
学 会了使用 vi 编辑器编写代码,用 gcc 工具进行运行。以前电脑中 虽然安装了 Linux 系统,但是自己并不经常使用,通过这次实验, 自己初步领略到了 Linux 系统的魅力。 通过对进程管理的学习,了解了 Linux 系统的进程管理机制linux命令, 后面的四个验证性实验以及两个作业,加深了自己的理解。最后 两个自己设计的程序,自己并没有完全理解,所以参考了同学的 程序,业余时间自己再做学习。