当前位置:文档之家› 操作系统实验报告

操作系统实验报告

实验四进程与线程 实验目的(1)理解进程的独立空间; (2)
理解线程的相关概念。 实验内容与要求1、掌握进程创建和构造的
相关知识和线程创建和构造的相关知识, 2、了解C 语言程序编写
的相关知识; 3、理解进程的独立空间的实验内容及步骤 4、理解线
程的实验步骤 5、对整个实验过程进行分析总结,给出详细步骤; 实
验过程1、进程的与线程的创建和构造 进程简单来说就是在操作系
统中运行的程序,它是操作系统资源管理的最小单位。新 的进程通
过克隆旧的程序(当前进程)而建立。fork() clone()(对于线程)系
统调用可用来建立新的进程。 2、理解进程的独立空间 流程图如下
所示: (1)编写一个程序,在其main()函数中定义一个变量 shared,
对其进行循环 加/减操作,并输出每次操作后的结果 源程序如下所
示: #include int main() intshared=1; shared++; shared
fork()ERROR 输出shared 操作 输出shared 操作 pid
printf("%d\n",shared); shared--; printf("%d\n", shared);
shared++; printf("%d\n", shared); shared--; printf
shared);return (2)使用系统调用fork()创建子进程,观察该变
量的变化 (3)修改程序把 shared 变量定义到 main()函数之外,
重复第(2)步操作,观察该 变量的变化。 (4)当把shared 放到
主函数之外时,运行结果和内部时相比,并未发生变化。
一. 实验目的及实验环境
(一) 实验环境
Linux 操作系统
(二)实验目的
实验1 掌握Linux基本命令 和开发环境

掌握常用的Linux shell命令;
掌握编辑环境VIM;
掌握编译环境gcc及跟踪调试工具gdb。
实验2 进程
通过观察、分析实验现象,深入理解进程及进程在调度执行和内
存空间等方面的特点,掌握在POSIX 规范中fork和kill系统调用的
功能和使用。

实验3 线程
通过观察、分析实验现象,深入理解线程及线程在调度执行和内
存空间 等方面的特点,并掌握线程与进程的区别。掌握POSIX 规范
中 pthread_create() 函数的功能和使用方法。

实验4 互斥
通过观察、分析实验现象,深入理解理解互斥锁的原理及特点掌
握在POSIX 规范中的互斥函数的功能及使用方法。

二.实验内容
实验2
1.你最初1认为运行结果会怎么样?

会持续输出0-9号进程,直到输入数字键+回车,则会杀死该进
程,接下来的输出将不会有该进程号,当输入q+回车,则退出程序。

2.实际的结果什么样?有什么特点?试对产生该现象的原因进
行分析。

实际的结果跟预期差不多,当输入20时,程序会自动判断,大
于10就以10来创建进程。随机输出0~9号进程,
sleep(SLEEP_INTERVAL),循环输出,输入数字键,则会杀死该数字
对应的进程,直到输入q退出循环,然后杀死本组所有进程。
分析:每创建一个子进程时,将其pid存储在pid[i]中,i存储
在proc_number,然后调用死循环函数do_something(),输出该
进程的代号proc_number; 当输入数字键时,主进程会执行
kill(pid[ch-'0'],SIGTERM),从而杀死(ch - ’0’)号进程。当输入q
时循环退出,kill(0,SIGTERM),杀死本组所有进程。程序退出。

3.proc_number这个全局变量在各个子进程里的值相同吗?为
什么?
proc_number这个全局变量在各个子进程里的值相同,因为子
进程相互独立资源互不影响。

4.kill 命令在程序中使用了几次?每次的作用是什么?执行后
的现象是什么?

2次;第一次是杀死该进程号pid[ch-’0’],执行后接下来的
结果中不会有该进程号,打开另一个终端,使用命令ps aux | grep
process查看进程状态,子进程先于父进程退出,则被杀死的进程为
僵死状态,加了行代码wait(&pid[ch-'0']),就会使该子进程真正结
束。
第二次是杀死本组所有进程。即主进程以及它创建的所有子进程。
执行后程序退出,进程结束。

5.使用kill 命令可以在进程的外部杀死进程。进程怎样能主动退
出?这两种退出方式哪种更好一些?

进程在main函数中return,或调用exit()函数都可以正常退出。
而使
用kill命令则是异常退出。当然是正常退出比较好;若在子进程
退出前 使用kill命令杀死其父进程,系统会让init进程接管子进程。
当用kill 命令使得子进程先于父进程退出时,而父进程又没有调用
wait函数等待 子进程结束,子进程处于僵死状态,并且会一直保持
下去,直到系统重 启。子进程处于僵死状态时,内核只保存该进程
的必要信息以被父进程 所需,此时子进程始终占着资源,同时减少
了系统可以创建的最大进程 数,当僵死的子进程占用资源过多时,
很可能导致系统卡死。

相关主题