操作系统实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

哈尔滨学院

实验报告课程名称:

操作系统

软件工程

业:

级:

11

6

号:

********

*

*

***

教务处制

实验一进程管理

【实验目的与要求】

1. 加深对进程概念的理解,明确进程与程序的区别。

2. 掌握Linux进程创建及撤销的方法,进一步认识并发执行的实质。

3. 掌握Linux系统下守护进程的创建方法。

【实验原理】

1. Linux进程管理命令

(1)进程查看

(2)进程终止

(3)进程优先级设置

2. Linux进程控制函数

(1)创建和修改进程

(2)设置进程属性

(3)获取进程属性

(4)进程的退出

3. Linux守护进程

(1)独立启动守护进程

(2)超级守护进程

(3)守护进程的编写流程

守护进程的编写遵循特定的流程,主要包括五个步骤:

Step 1. 创建子进程,退出父进程

Step 2. 在子进程中创建新会话

Step 3. 改变当前目录为根目录

Step 4. 重设文件权限掩码

Step 5. 关闭文件描述符

【实验主要仪器与材料】

1. 带Linux操作系统的PC机

2. GCC编译器

【实验内容】

1. 获取进程信息

通过管理命令,获取系统当前执行进程的信息,包括进程名称与ID、PID和PGID等。

2. 创建进程

编程程序,实现父进程创建一个子进程,返回后父子进程都分别循环输出字符串“I am parent.”或“I am child.”5次,每输出一次延时1秒(sleep(1)),然后进入下一次循环。观察并分析运行结果。然后将程序改为父子进程同步执行:子进程循环输出字符串“I am child.”

5次,然后父进程再循环输出字符串“I am parent.”5次。再次观察并分析运行结果。【实验步骤及实验结果分析】

实验内容1:获取进程信息

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

0 S 0 6597 6594 0 75 0 - 1121 wait pts/0 00:00:00 bash

4 R 0 7826 6597 0 77 0 - 1042 - pts/0 00:00:00 ps

实验内容2:创建进程

#include

#include

#include

#include

#include

int main( )

{

int i = 0, j = 0;

int p = fork();

if(p)

{

while(i++<5)

{

sleep(1);

printf("I am a child\tPid:%d\n",(int)getpid());

}

}

else

{

while(j++<5)

{

sleep(1);

printf("I am a farther\tPid:%d\n",(int)getpid());

}

}

return 0;

}

【思考题】

1.程序和进程的区别

1.进程是程序的执行,进程属于动态概念,而程序是一组指令的有序集合,是静态

概念。

2.进程既然是程序的执行,或者说是“一次运行活动”,因而它是有生命过程的。

进程的存在是暂时的,而程序的存在是永久的。

3.进程是程序的执行。因此进程的组成应包括程序和数据。除此以外,进程还由

记录进程状态信息的进程控制块PCB组成。

4.一个程序可能对应多个进程。

5.一个进程可以包含多个程序。

6.进程是一个程序及其数据在处理机上顺序执行时所发生的活动。

2.Linux操作系统下有哪些进程类型

交互进程

批处理进程

守护进程

3.进程创建函数fork和vfork的区别

1、fork()用于创建一个新进程。由fork()创建的子进程是父进程的副本。即子进程

获取父进程数据空间,堆和栈的副本。父子进程之间不共享这些存储空间的部分。

而vfork()创建的进程并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec (或exit)于是也就不会存放该地址空间。相反,在子进程调用exec或exit 之前,它在父进程的空间进行。

2、vfork()与fork()另一个区别就是:vfork保证子进程先运行,在调用exec或exit

之前与父进程数据是共享的,在它调用exec或exit之后父进程才可能被调度运行。

3/vfork和fork之间的还有一个区别是:vfork保证子进程先运行,在她调用exec 或exit之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。

4.进程的退出函数有哪些?有何区别?C程序是如何被启动终止的?

exit函数、return函数、abort函数和_exit()函数

exit和return的区别:exit是一个函数,有参数;而return是函数执行完后的返回。

exit把控制权交给系统,而return将控制权交给调用函数。

exit和abort的区别:exit 是正常终止进程,而abort 是异常终止。

exit和_exit()的区别:exit()在头文件stdlib.h中声明,而_exit()声明在头文件unistd.h 中。两个函数均能正常终止进程,但_exit()执行后立即返回给内核,而exit()要先执行一些清除操作,然后将控制权交给内核。

实验二进程通信

【实验目的与要求】

1、了解基于信号的进程通信机制

相关文档
最新文档