计算机操作系统

2019-04-14 13:57

计算机操作系统

实验名称:熟悉Linux操作系统(进程观测)

一 实验目的

(1)了解在Linux操作系统中进程的特点和表现形式 (2)掌握Linux查看进程的方式与方法 (3)在一个进程中创建另一个进程的方法

(4)掌握父进程和子进程的关系和fork的用法 二 实验内容 二、实验内容

(1)编写一个简单的程序,使用ps或top工具观察该进程的的ID号,并使用kill工具终止进程运行。

(2)编写一个程序,使用fork函数生成一个子进程,并使用相关工具观察进程状态。 三、实验步骤 (1)

#include int main() { //设计一个循环,使其反复运行,方便观察 while(1) { printf(\ } return 0; }

文件名命名为process1.c,使用gcc process1.c -o process编译该程序。运行该程序,打开其它一个终端窗口,输入命令top,观察名称为process1的进程,记录各项数据(包括进程号)。使用\进程号\直接杀死该进程。观察进程是否消失?

需要记录的数据:进程状态中的id,内存使用和CPU占有率。由于该进程一直处于循环中,思考id、内存使用和cpu占有率哪一个因素和循环

关系密切?如何避免,请给出合理的建议。这是否说明CPU也是操作系统中的一个重要资源? (2)

#include #include void main() {

int i;

if ( fork() == 0 ) {

/* 子进程程序 */

for ( i = 1; i <1000; i ++ )

printf(\ } else {

/* 父进程程序*/

for ( i = 1; i <1000; i ++ )

printf(\ } }

请保存为process2.c,编译运行,写出你观察到的输出结果,能否对输出的现象做一个合理的解释?

若将上述实例(2),改写为: #include #include void main() {

int i;

if ( fork() == 0 ) {

/* 子进程程序 */ for ( ;; )

printf(\ } else {

/* 父进程程序*/

for ( i = 1; i <1000; i ++ )

printf(\ } }

请保存为process2.c,编译运行,写出你观察到的输出结果,能否对输出的现象做一个合理的解释?

若将将实例(2)改为: #include #include void main() {

int i;

if ( fork() == 0 ) {

/* 子进程程序 */ for ( ;; )

printf(\ } else {

/* 父进程程序*/ for (;;)

printf(\ } }

请保存为process3.c,编译运行,写出你观察到的输出结果,能否对输出的现象做一个合理的解释?

三 实验步骤与调试 实验步骤:

1.文件名命名为process1.c,使用gcc process1.c -o process编译该程序。

2.运行该程序,打开其它一个终端窗口,输入命令top,观察名称为process1的进程,记录各项数据(包括进程号)。

3.使用\进程号\直接杀死该进程。

4.新建一个process2.c使用fork()生成子进程。 5.运行process2.c观察其输出结果。

四 实验结果 实验结果:

1.process1.c:程序无限次输出 I am the first process!直到输入“kill 进程号”结束 2.process2.c:父进程、子进程各输出1000,且输出次序不一

3.父进程子进程打印顺序不确定,可见父进程和子进程各独立执行。父进程子进程均无限次输出,知道输入“kill -9 进程号”终止.

五 疑难小节 疑难:

1.最后一个程序peocess3.c,运行后,kill 进程号无法结束进程,只有kill 进程号-9后才能终止进程

2.父子进程打印次序无规律,说明父子进程的进行是无序的随机的。

六 主要算法 1.process.c

#include int main() {

//设计一个循环,使其反复运行,方便观察 while(1) {

printf(\ }

return 0; }

2.process.c

#include #include #include int main() {

int i;

if ( fork() == 0 ) {

/* 子进程程序 */

for ( i = 1; i <1000; i ++ )

printf(\ } else {

/* 父进程程序*/

for ( i = 1; i <1000; i ++ )

printf(\ } }

实验名称:进程的控制

一 目的

通过进程的创建、撤消和运行加深对进程概念和进程并发执行的理解,明确进程与程序之间的区别。

二、实验内容及步骤

(1) 了解系统调用fork()、execvp()和wait()的功能和实现过程。

(2) 编写一段程序,使用系统调用fork()来创建两个子进程,并由父进程重复显示字符串“parent:”和自己的标识数,而子进程则重复显示字符串“child:”和自己的标识数。

(3) 编写一段程序,使用系统调用fork()来创建一个子进程。子进程通过系统调用execvp()更换自己的执行代码,新的代码显示“new program.”后结束进程。而父进程则调用wait()等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。 三、思考

(1) 系统调用fork()是如何创建进程的?

(2) 当首次将CPU 调度给子进程时,其入口在哪里? (3) 系统调用execvp()是如何更换进程的可执行代码的?

(4) 对一个应用,如果用多个进程的并发执行来实现,与单个进程来实现有什么不同?

三 调试

1.打开实验需要的平台,用mkdir xz 创建一个空的文件夹,在xz里面用vim编辑器 创建一个new.c的文件,

2.在new.c文件中,写入一个用whil循环控制的语句,退出vim编辑器,保存。 3.用gcc编译源文件(gcc new.c -o new),然后运行(./new)。

4.再打开两个终端,用top命名查看进程,一个用kill杀死进程,防止运行的程序 无限循环下去

5.进程无限循环。 四

如下,可以查看附件文档 实验一:

[root@localhost xz]# gcc test.c -o test [root@localhost xz]# ./test This xingzheng program!

实验二:

Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!! Child Programmer!!!!

五 疑难:

1.通过本次实验了解了系统调用fork()函数和创建进程的具体过程 2.系统通过调用execvp()函数,调用进程 六 算法: 程序一:

#include #include #include int main() {


计算机操作系统.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:谈现代室内设计中的中式风格

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: