操作系统进程调度实验

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

一. 实验目的及实验环境

1.实验目的

通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在POSIX 规范中fork和kill系统调用的功能和使用。

2.实验环境

(1)硬件

CPU:I7-4500U

内存:8G DDR3 1600

显示器:华硕笔记本显示器

硬盘空间:80G

(2)软件

虚拟机名称及版本:非虚拟机

操作系统名称及版本:Ubuntu Kylin 16.04

编译器:gcc

二. 实验内容

1、实验前准备工作

学习man 命令的用法,通过它查看fork 和kill 系统调用的在线帮助,并阅读参考资料,学会fork 与kill 的用法,复习C 语言的相关内容。

2、实验内容

根据下发的Linux进程管理实验PPT内容,将实验代码补充完整。并考虑:先猜想一下这个程序的运行结果。假如运行“./process 20”,输出会是什么样?然后按照注释里的要求把代码补充完整,运行程序。可以多运行一会儿,并在此期间启动、关闭一些其它进程,看process 的输出结果有什么特点,记录下这个结果。开另一个终端窗口,运行“ps aux|grep proc ess”命令,看看process 究竟启动了多少个进程。回到程序执行窗口,按“数字键+回车”尝试杀掉一两个进程,再到另一个窗口看进程状况。按q 退出程序再看进程情况。

3、回答问题

编写、编译、链接、执行实验内容设计中的代码,并回答如下问题:

1)你最初认为运行结果会怎么样?

手动输入进程数,选择输入要杀死的进程编号,按q杀死所有进程。

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

需手动输入进程数,然后键入编号杀死进程,键入q杀死父进程即杀死所有进程。

3)proc_number 这个全局变量在各个子进程里的值相同吗?为什么?

不相同,proc_number是存储各个子进程的编号的,所以在各个子进程中

是不同的。

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

使用了2次,第一次是在while循环中的if语句中使用,用来杀死用户键入的指定进程。第二次是杀死父进程,回到程序的开始。

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

调用return 函数或exit函数都可以正常退出,而使用kill函数是异常退出,使用正常退出的方法比较好。

6)写出fork()和kill()函数原型,并解释函数的功能和参数的含义?

原型:#include

#include

pid_t fork( void);

功能:

一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进

程被称为子进程。fork函数被调用一次但返回两次。两次返回的唯一区

别是子进程中返回0值而父进程中返回子进程ID。

原型:#include

#include

int kill(pid_t pid, int sig);

功能:

向某个进程传递一个信号

7)ps aux|grep process命令功能是什么?并解释结果的含义。

ps命令是最基本进程查看命令.使用该命令可以确定有进程正在运行数

量和运行的状态、进程是否结束、是否有僵尸进程、进程占用的资源。

grep命令查看某进程的状态并打印在屏幕上,ps aux是显示所有进程和

他们的状态。

ps aux输出格式:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

三.方案设计

每创建一个子进程时,将其pid存储在数组pid[i]中,i存储在proc_number 中,然后调用死循环函数do_something(),输出该进程的proc_number,当输入数字是主进程执行kill(pid[pid-48],SIGTERM),杀死ch-48进程。当输入q时循环退出,kill(0,SIGTERM),杀死本组所有进程,程序退出。

四.测试数据及运行结果

注释:由于我的电脑运行这段代码报错,所以我和我组高宏伟同学使用的是同一实验数据,同一代码。

五.总结

1.实验过程中遇到的问题及解决办法;

实验中由于代码中的大部分已经给出,只需填写重要部分。遇到了不懂fork 的返回值,所以if和else语句会同时执行,知道了fork的原理后,fork会返回两个值一个到子进程,一个到父进程。

2.对设计及调试过程的心得体会。

本次实验学会了创建进程命令fork和杀死进程命令kill。在开始的时候不理解fork 和kill的原理,有点懵。后来通过看书和上网查询知道了fork和kill 的原理后明白了代码要填写的空白。

六.附录:源代码(电子版)

#include

#include

#include

#include

#include

#include

#define MAX_CHILD_NUMBER 10

#define SLEEP_INTERVAL 2

int proc_number=0;

void do_something();

int main(int argc,char* argv[]){

int child_proc_number=MAX_CHILD_NUMBER ;

int i,ch;

pid_t child_pid;

相关文档
最新文档