2016操作系统实验指导书【Linux】

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2016 操作系统实验指导书【Linux 版】
操作系统实验指导书(Linux 版)
计算机Leabharlann Baidu学与软件学院 2016 年
1
2016 操作系统实验指导书【Linux 版】
实验一 观察 Linux 进程状态
一、实验目的
在本实验中学习 Linux 操作系统的进程状态,并通过编写一些简单代码来观察各种情况下, Linux 进程的状态,进一步理解进程的状态及其转换机制。
5
2016 操作系统实验指导书【Linux 版】
实验二 观察 Linux 进程/线程的异步并发执行
一、实验目的
通过本实验学习如何创建 Linux 进程及线程,通过实验,观察 Linux 进程及线程的异步执行。 理解进程及线程的区别及特性,进一步理解进程是资源分配单位,线程是独立调度单位。
二、实验环境
编译链接,后台运行该程序(后接&),并使用 ps 命令查看
(二)查看“暂停”状态(T) 运行 run_status 进程,其进入 R 状态:
3
2016 操作系统实验指导书【Linux 版】
使用 kill 命令,向 run_status 进程发送 SIGSTOP 信号,并使用 ps 命令观察其状态(进入了 T 状态)
二、实验环境
硬件环境:计算机一台,局域网环境; 软件环境:Linux Ubuntu 操作系统,gcc 编译器。
三、实验内容和步骤
1、Linux 进程状态及其相互转换 Linux 中,进程有以下 6 中状态。 Linux 系统中的进程主要有以下六种状态。 (1)TASK_RUNNING(可运行状态)。正在运行的进程或在可运行进程队列(run_queue)中 等待运行的进程处于该状态。它实际上包含一般操作系统原理教材中所谓进程三种基本状态中的 运行态和就绪两种状态。 当 CPU 空闲时,进程调度程序只在处于该状态的进程中选择优先级最高的进程运行。Linux 中运行态的进程可以进一步细分为 3 种:内核运行态、用户运行态和就绪态。 (2)TASK_INTERRUPTIBLE(可中断阻塞状态)。处于可中断阻塞状态的进程排成一个可中 断阻塞状态进程队列,该队列中的阻塞进程在资源有效时,能被信号或中断唤醒进入到运行态队 列。 (3)TASK_UNINTERRUPTIBLE(不可中断阻塞状态)。不可中断指的是进程不响应信号。处 于不可中断阻塞状态的进程排成一个不可中断阻塞状态进程队列。该队列中的阻塞进程,不可被 其他进程唤醒,只有被使用 wake_up()函数明确唤醒时才能转换到可运行的就绪状态。 (4)TASK_STOP/TASK_TRACED(暂停状态)。当进程收到信号 SIGSTOP、SIGTSTP、SIGTTIN 或 SIGTTOU 时就会进入暂停状态。可向其发送 SIGCONT 信号,让进程转换到可运行状态。 (5)TASK_DEAD-EXIT_ZOMBIE(僵死状态)。表示进程停止但尚未消亡的一种状态。此时 进程已经结束运行并释放掉大部分资源,但父进程尚未收回其 PCB。在进程退出时,将状态设为 TASK_ZOMBIE,然后发送信号给父进程,由父进程再统计其中的一些数据后,释放它的 task_struct 结构。处于该状态的进程已经终止运行,但是父进程还没有询问其状态。 (6)TASK_DEAD-EXIT_DEAD(退出状态),处于此状态的进程即将被销毁,EXIT_ DEAD 非常短暂,几乎不可能通过 ps 命令捕捉到。 Linux 中进程的状态转换过程如下图所示:
(四)查看“不可中断阻塞”状态(D) 创建一个 C 程序,如 uninter_status.c,让其睡眠 30s
4
2016 操作系统实验指导书【Linux 版】
编译链接,后台运行该程序(后接&),并使用 ps 命令查看运行状态
(五)查看“僵尸”进程(Z) 创建一个 C 程序,如 zombie_status.c,在其中创建一个子进程,并让子进程迅速结束,而父进 程陷入阻塞
使用 kill 命令,向 run_status 进程发送 SIGSCON 信号,并使用 ps 命令观察其状态(恢复到 R 状态)
(三)查看“可中断阻塞”状态(S) 创建一个 C 程序,如 interruptiblie_status.c,让其睡眠 30s
编译链接,后台运行该程序(后接&符号),并使用 ps 命令查看运行状态
硬件环境:计算机一台,局域网环境; 软件环境:Linux Ubuntu 操作系统,gcc 编译器。
三、实验内容和步骤
1、进程异步并发执行 编写一个 C 语言程序,该程序首先初始化一个 count 变量为 1,然后使用 fork 函数创建两 个子进程,每个子进程对 count 加 1 后,显示“I am son, count=x”或“I am daughter, count=x”, 父进程对 count 加 1 之后,显示“I am father, count=x”,其中 x 使用 count 值代替。最后父 进程使用 waitpid 等待两个子进程结束之后退出。 编译连接后,多次运行该程序,观察屏幕上显示结果的顺序性,直到出现不一样的情况为止, 并观察每行打印结果中 count 的值。 参考程序(实验者也可以自己设计类似程序)
注:父进程进入 S 状态,子进程进入 Z 状态。 编译链接,后台运行该程序(后接&),并使用 ps 命令查看运行状态(30s 内)
请写出程序代码及实验结果。实验者也可以不参照前面代码写,但要贴出实验结果。
四、实验总结
分析为什么出现以上现象,并对其进行总结:什么时候出现运行状态、暂停状态、可中断阻 塞状态、不可中断阻塞状态、僵尸状态?
2
2016 操作系统实验指导书【Linux 版】
可以使用 ps 命令查看进程在系统中的状态。在 ps 命令的显示结果中,5 中字符分别代表 5 种不同的进程状态。
(1)R(TASK_RUNNING):可执行状态或运行状态 (2)S(TASK_INTERRUPTIBLE):可中断阻塞状态,可响应中断、接收信号(如 SIGKILL) (3)D( TASK_ UNINTERRUPTIBLE):不可中断阻塞状态,只能响应中断 (4)T( TASK_ STOPPED/ TASK_ TRACED):暂停状态或跟踪状态 (5)Z( TASK_ DEAD/EXIT_ZOMBIE):退出状态,进程成为僵尸进程 注:在状态字符后面如果带+(如 S+),表示进程是前台运行,否则是后台运行。 2 观察进程状态 (一)查看“运行”状态(R) 创建一个 C 程序,如 run_status.c,运行一段长循环,
相关文档
最新文档