操作系统实验指导书(7)

2019-01-04 23:12

___________________________________________________________________________ 然后执行下列命令把输出结果输入到wc命令中:

ps -ef|wc -l

第一个数字显示的是行的数目,也是进程的数目:

___________________________________________________________________________ 执行man ps命令,可以打开Linux用户命令手册,了解ps命令的用法,输入wq命令可退出用户手册的阅读。man命令可以执行吗?结果如何?

___________________________________________________________________________ 步骤6:根据命令名搜索特定的进程。

为了终止一个进程,必须找到该进程的PID。大多数运行的系统中,有上百个进程在运行,ps -ef的列表可能很长。如果知道启动进程的执行程序的名字,可以更快地找到PID。

通过把ps命令的输出结果输入到grep中,可以搜索想要终止的特定进程,确定正确的PID。

grep命令可以在其他命令的输出中搜索所有类型的特征字符串。-l(长的输出)选项将显示和找到的PID相关的进程的名字;-e选项显示PID和初始化命令的名字。

1)单击红帽子,在―GNOME帮助‖菜单中单击―游戏‖、―堆麻将‖,打开―堆麻将‖游戏。 2) 在当前的终端窗口中,执行命令:

ps –e| grep mahjongg

(―堆麻将‖游戏的进程名是mahjongg),查找和―堆麻将‖游戏调度守护进程相关的所有进程。

3) 显示了多少个相关的进程?

___________________________________________________________________________ 4) 显示进程中最小的进程ID号是多少?

___________________________________________________________________________ 5) 在当前终端窗口中执行命令: pgrep –l mahjongg

查找所有和―堆麻将‖游戏调度守护进程相关的进程。ps和pgrep命令输出之间有什么不同?

___________________________________________________________________________ 步骤7:确定一个要终止的进程。

当试图终止一个程序,或者释放一个挂起的终端窗口的时候,杀死和不响应的应用相关的PID可能还是不够的,一般需要杀死那个进程的父进程,在少数情况下,甚至要杀死父进程的父进程。为了沿着层次结构从子进程追溯到派生它们的父进程.必须能够查找PID和PPID。

首先确定最低级不响应进程的PID。通常,可以试着去杀死那个进程。如果这样做不能够停止那个进程,可能需要杀死它的父进程。杀死父进程将杀死所有它派生的子进程。杀死一个父进程也比杀死几个子进程快得多。

1)在GNOME当前终端窗口中,输入ps命令。 有多少进程正在运行?为什么只有这么少的进程?

28

___________________________________________________________________________ 2) 正在运行的进程的名字是什么?

___________________________________________________________________________ 3) 这个进程的PID是多少?

___________________________________________________________________________ 4) 在bash shell中输入命令csh,打开一个c shell会话,当前系统的会话提示符是什么? ___________________________________________________________________________ 5)输入ps -f命令,显尔在当前shell中运行的进程的所有信息。现在什么进程正在运行? ___________________________________________________________________________ 6)bash的PID是-sh(csh)的PPID吗?

___________________________________________________________________________ 7)输入命令sleep 1000&,创建一个进程,把执行挂起1000秒(大约15分钟)。&表示在后台执行命令,返回shell提示符,这样您可以继续工作。

8) 再次输入ps -f命令。-sh(csh)的PID是sleep命令的PPID吗?哪个PID是csh(c shell)的子进程?

___________________________________________________________________________ ___________________________________________________________________________ 9)输入命令kill -9 <csh的PID>退出C shell。然后再次键入ps -f命令。什么PID是sleep父命令的PPID?

___________________________________________________________________________ sleep进程现在是什么类型的进程?

___________________________________________________________________________ 步骤8:使用kill命令终止一个进程。

信号用子终止、挂起和继续进程。有时候使用Ctrl+C可以终止一个不响应的进程。这样向进程发送一个中断(INT)信号,终止它及所有它派生的子进程。

kill命令提供了一个终止不想要的命令进程的直接方法。当想停止一个运行了很长时间的命令的时候,或者当需要终止一个不能够正常退出的进程的时候,它很有用。指定PID正常地杀死一个进程。

Kill [-signal] process -id

为了使用kill命令终止一个进程,应该首先键入ps找出进程的PID,然后键入kill紧跟着PID。如果使用kill而没有指定信号,则信号15(SIGTERM)将被发送给特定PID号的进程,这叫做软杀死,通常终止了进程。如果可能,最好软杀死进程,这样它可以正确地关闭文件,温和地终止进程。

如果需要强制终止一个进程,可以使用带-9选项的kill命令。这个选项叫做强制杀死,当shell对所有其他终止信号都不响应的时候.需要使用它来杀死shell。

Kill -9 process -id

29

注意:对于shell之外的进程,把kill -9(SIGKILL)作为最后的选项,因为它是一种生硬的方法,不允许正确的进程终止。

1) 输入命令ps -f,显示在当前shell中运行的进程的完整信息。现在什么进程正在运行? ___________________________________________________________________________ 2) 因为sleep进程现在是一个孤儿进程,已经被init进程(PID #1)收养,输入命令,对sleep的PID执行软杀死。如果sleep已经终止(超过15分钟),则重复步骤7的最后两步,然后软杀死sleep程序。在此输入ps –f命令。现在什么进程正在运行?

___________________________________________________________________________ 步骤9:按照用户查找和终止一个进程。

ps命令可以带-u(用户)选项使用,查找指定用户的进程。这个命令比ps -ef使用得更多,因为一般只能够管理属于自己的进程。我们可以通过用户登录名或者UID号来查找用户的进程,用户只能够终止自己的进程,但是超级用户可以终止系统中所有运行的进程。

ps –u login –ID或UID

1) 启动计算器和―堆麻将‖游戏GNOME应用程序。

2) 使用带-u选项的ps命令,查找以登录ID(例如,userX)或者数字UID(例如,1004)

运行的所有进程。计算器应用程序的PID是什么?

___________________________________________________________________________ 3) 使用软杀死终止计算器应用程序,―堆麻将‖是否仍然在桌面上运行?

___________________________________________________________________________ 4) 使用ps -u命令组合grep,查找―堆麻将‖程序的PID号,而不是使用ps –u查找整个

列表。您使用什么命令?

提示:猜猜―堆麻将‖程序的命令名中可能有哪个字母,使用grep搜索那些字母。 ___________________________________________________________________________ 5) 终止―堆麻将‖程序。它是否还在桌面上运行?

___________________________________________________________________________ 6) 退出C shell。

步骤10:删除所有在本实验中创建的文件和目录。 步骤11:关闭终端窗口,注销。

实验总结

___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________

30

实验3 并发与调度

3.1 进程调度算法

3.1.1 目的要求

用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。

3.1.2 实验内容: 设计一个有 N个进程并发执行的进程调度程序

(1)进程调度程序要求

进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。

每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。

进程的优先数及需要的运行时间可以事先人为的指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。

进程的运行时间以时间片为单位进行计算。

每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。

就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。

每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。

重复以上过程,直到所有进程都完成为止。

(2)调度算法流程图

31

(3)参考源代码

jingchendiaodu.cpp #include \ #include #include

#define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0

struct pcb { /* 定义进程控制块PCB */ char name[10]; char state; int super; int ntime; int rtime;

struct pcb* link; }*ready=NULL,*p; typedef struct pcb PCB;

32


操作系统实验指导书(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《机械制造技术基础》教案-2010

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

马上注册会员

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