操作系统第七章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
版权所有
2. UNIX中的进程终止
• 正常终止
– 从main函数返回 – 调用exit函数 – 调用_exit系统调用函数
• 异常终止
SIGABRT信号 – 调用abort函数 – 进程接收到某信号
@2003年
余晓制作
版权所有
• exit系统调用
– 功能:
释放进程占用的资源 返回给系统内核一个值,由系统根据状 态字生成终止状态并反馈给wait()。
fork和exec的内存变化
@2003年
余晓制作
版权所有
实例比较
main() main() { int pid; { int pid; pid=fork(); pid=fork(); if(pid==0) { if(pid==0) printf(“I’m the printf(“I’m the child.\n”); child.\n”); else if(pid>0) execl(“/bin/ls”,”ls”,0); printf(“I’m the perror(“exec error.\n”); parent.\n”); } else if(pid>0) else printf(“fork failed.\n”); printf(“I’m the printf(“program end.\n”); parent.\n”) } I’m the child. else printf(“fork program end. I’m the child. failed.\n”); I’m the parent. 当前目录下的内容 printf(“program end.\n”); program end. I’m the parent. }
@2003年
程序2: #include <stdio.h> main() { int pid; pid=fork(); if(pid<0) { printf(“fork error.\n”); exit(1); } else if(pid==0) { printf(“I’m a child.\n”); exit(0); } printf(“Test process.\n”); } 余晓制作 版权所有
2. UNIX中的进程描述
• UNIX进程上下文划分为:
– proc结构和user结构 – 用户栈、核心栈
Proc结构
– 正文段、数据段
User 结 构 系 统 栈 用 户 栈 数 据 段 正 文 段
@2003年
余晓制作
版权所有
(1) proc结构
- 进程最基本信息
(2) user结构
- 是进程的私有信息和数据
命令格式:renice number PID 注意: –普通用户只能对自己的进程使用 renice –超户可以对任何进程使用renice –只有超户才有权增加进程的优先级
@2003年
余晓制作
版权所有
• 终止进程
– 前台进程的中断:Ctrl+C – 后台进程的中断:kill命令
@2003年
余晓制作
@2003年 余晓制作 版权所有
• exec系统调用系列
–功能:用参数中指定的可执行程序副本覆盖 调用程序的正文段和数据段,并使用参数指 定的执行参数执行新的代码段。 –比较fork系统调用和exec系统调用 –调用的基本格式: execve(pathname, argv, envp)
执行文件 的路径名 字符指针数组,是 可执行程序的参数 字符指针数组,指 示执行程序的环境
版权所有
kill命令
• 功能:向进程发送信号 • 命令格式: kill [-signal] pid
-9
-HUP
@2003年
余晓制作
版权所有
第五节 周期性进程
• 什么时候会用到周期性的进程? • UNIX系统中的cron守护进程 • crontab配置文件
– 格式: minute hour day month weekday command
–可能产生的两种异常情况:
子进程进入僵死(zombie)状态; 子进程变成孤儿。
–调用格式:exit(status)
余晓制作 版权所有
@2003年
第三节 UNIX的进程层次和初启过程
1. 终端登录
2. 网络登录
@2003年
余晓制作
版权所有
终端登录方式下的UNIX进程层次
@2003年
余晓制作
版权所有
• vmstat命令 …
@2003年 余晓制作 版权所有
2. 进程调度
• 进程的挂起及恢复
– 挂起当前的前台作业:Ctrl+Z – 查看挂起的进程:jobs命令 – 恢复进程的执行 恢复到前台执行:fg命令 恢复到后台执行:bg命令
@2003年
余晓制作
版权所有
• 改变进程的优先级
– renice命令
• crontab文件的修改:crontab命令 • 只执行一次的计划性任务
– at命令:在指定时刻执行指定的命令序列; – batch命令:在系统负载较低、资源较空闲时 执行指定的命令系列。
@2003年 余晓制作 版权所有
第六节 出错的进程
• 挂起的进程 • 失控的进程
– 用户进程使用了过分的系统资源(如 CPU、硬盘空间等); – 系统进程表现出疯狂的行为。
2. 编写一段程序使其完成:父进程创建一个子进 程,子进程运行中显示当前的运行目录;父进 程运行完成数字1到10循环显示到标准输出流 上同时注意程序运行时控制其执行顺序是:子 进程先运行,父进程再运行。(提示:可以使 用exec系统调用) 3. 试描述系统中整个进程树的生成。 4. 试述如何查看当前系统中CPU和MEM的使用 情况,以及如何发现系统的异常进程。 5. 举例说明cron的应用场合。
。进程状态
。进程用户标识
。进程标识 。进程存储大小 。进程调度参数 。软中断信号项 。执行时间及资源使用 。User结构起始址 。进程页表指针 。被挂起事件描述
@2003年
。指向proc的指针 。系统调用参数 。与用户标识有关项 。与文件结构有关项 。输入输出项 。打开文件描述符 。中断及软中断参数 。错误信息 。个段长度 。文件权限屏蔽项 。交换数据项
注册周期
@2003年
余晓制作
版权所有
网络登录方式下的UNIX进程层次
@2003年
余晓制作
版权所有
例析UNIX shell的工作过程
@2003年
余晓制作
版权所有
第四节 相关的管理命令
1. 查看系统进程 • ps命令
– 系统管理员监视进程的主要工具。可 用于显示进程的PID、UID、优先级及 控制终端;还可给出进程在使用多少 内存、耗用的CPU时间以及当前的进 程状态等;并明确地标识出僵尸进程。 – 命令格式:ps [option]
@2003年
余晓制作
版权所有
ps -aux
栏目 USER PID %CPU %MEM VSZ RSS TT STAT START TIME COMMAND ps –aux输出的解释 内容 进程属主的用户名 进程ID 进程正在使用的CPU时间的百分比 进程正在使用的实际内存量的百分比 进程的虚存空间大小,单位为KB 驻留集大小(内存中1K大小的页面个数) 控制终端ID 当前进程状态 进程启动时刻 进程已耗用的CPU时间 命令名和参数
程序1: #include <stdio.h> main() { int pid; pid=fork(); if(pid<0) { printf(“fork error.\n”); exit(1); } else if(pid==0) printf(“I’m a child.\n”); printf(“Test process.\n”); }
@2003年
余晓制作
版权所有
• 控制终端
– 当从Shell启动一个命令时,其所在的终端通 常就是新启动的进程的控制终端。 – 一个进程的控制终端可以使用信号作为一种 让用户中断或挂起该进程的手段。
@2003年
余晓制作
版权所有
4. UNIX中的两个特殊进程
• 0#进程
– 由内核程序创建,初始化时创建1#进程 – 平时负责调度分配处理器 – 管理中负责进程调度与交换
@2003年 余晓制作 版权所有
进程状态
STAT值 R S 状态 可运行 睡眠中 含义 进程可被执行 进程在等待某资源
W
Z T
对换出
僵尸 被阻止
进程不在内存中
进程处于“僵死”状 态 进程被挂起
@2003年
余晓制作
版权所有
• top命令
– 实时地对系统中资源的使用状况进行 监测,显示当前系统中最占用CPU资 源的进程,同时提供一个交互界面让 用户观测系统的进程情况。 – 优点:功能强;缺点:需要长久占用 前台。
@2003年 余晓制作 版权所有
父子进程的关系图
wait
自动 ZOMBIE
init
parent
自动
fork
exit child
exec exit
child
父进程在子进程结束之前结束
孤儿
“僵尸进程”是指那种处于退出中途状态的进程。
@2003年 余晓制作 版权所有
•
fork系统调用
– 功能:创建子进程 – 返回值:对子进程返回0;对父进程返回子 进程号(大于0);创建失败返回-1 – 完成的工作:
• 1#进程
– 是所有用户进程的祖先进程
@2003年
余晓制作
版权所有
第二节 UNIX中进程的生命周期
1. UNIX如何建立进程和在程序中启 动程序?
• 基本概念
– Unix中的进程是由系统调用fork创建的 实体。 – 调用fork的进程是 父进程 ,由fork创建 的进程是子进程。
– 一个进程可以有多个子进程,但只有一 个父进程。
(1)在进程表中为子进程分配proc结构;
(2)给子进程赋唯一的标识符pid; (3)复制父进程上下文的一个逻辑副本; (4)增加父进程的文件表、索引节点表的引用数。
–
建立进程的典型代码
@2003年 余晓制作 版权所有
…… pid=fork(); if (pid==0) { /* 子进程运行,例如exec(“ap1”,…) */ …. } else if (pid>0) { /* 父进程运行,例如wait(); */ …. } else { /* fork失败的处理 */ …. }
@2003年 余晓制作 版权所有
– 常用的两种ps命令格式
ps -ef
ps –ef 输出的解释
栏目 内容 UID PID 属主的用户名 进程ID 栏目 TTY 内容 控制终端 STIME 进程启动时刻
已耗用的CPU PPID 父进程ID TIME 时间 C CPU使用/调度信息 COMD 命令及参数
余晓制作 版权所有
3. 进程的一些重要信息
• PID
– 一个整数,它是进程唯一的标识符,又 称进程号。 – PID按进程创建的顺序赋值。
• PPID
– 父进程的PID
@2003年
余晓制作
版权所有
• UID和EUID
– UID是进程创建者的UID。 – EUID是进程的“有效”UID。设置了setuid 位的程序运行时,其进程的UID和EUID可 能不同。
@2003年 余晓制作
program end. 版权所有
• wait系统调用
–功能:等待子进程结束,从而使父进程与 其执行的子进程的终止点同步 –调用格式:wait(status_addr)
子进程结束时返回的状态信息的地址 – 返回值:终止的子进程的pid – waitpid系统调用
@2003年
余晓制作
第七章 UNIX进程控制
@2003年
余晓制作
版权所有
第一节 UNIX中进程的基本概念
1. 进程与程序
– 在并发环境下,一个正在执行中的程序 被称为进程。 – 程序是外存中的可执行文件。 – 进程实体由正文段、用户数据段和栈 段组成。 – 多个进程可以同时执行同一个程序。
@2003年
余晓制作
版权所有
• 解决方法
– 寻找失控的进程 – 判断失控的原因
@20Biblioteka Baidu3年 余晓制作
STOP信号
CONT信号
版权所有
历史悠久的“鬼把戏”
while 1 mkdir adir cd adir touch afile end
@2003年
余晓制作
版权所有
作业
1. 读下面两个程序,写出它们各自运行的结果,并分析其 结果不同的原因。
• GID和EGID
– GID是进程的GID。 – EGID和GID的关系同UID与EUID。
@2003年
余晓制作
版权所有
• 优先级和谦让值(niceness)
– 进程的优先级确定了其能获得多少CPU时间。 – 谦让值又称优先数,值越高进程的优先级越 低。 – 影响内部优先级的其他因素是进程近来所耗 用的CPU时间量以及等待运行所耗费的时间 长度。
– 六种调用方式
execve execle execvp execv execl execlp
l: 长格式调用,每个参数指针独立传递并以空指针0结束; v: 用argv指针数组传递运行参数; e:从envp指针数组传递环境参数; p:在当前目录中搜索指定的文件,否则在PATH指定的目录中搜索。
@2003年 余晓制作 版权所有