630 likes | 813 Views
第 2 讲 从应用编程者角度看进程. 如何查看进程 进程控制 进程通讯. 如何查看进程. 命令行 利用目录 /proc. ps 命令. 示例 ps –ef 输出. 进程开始的时间和日期. 进程占用 CPU 的百分比. 用户 ID. 进程号. 父进程号. 启动进程的终端号. 进程已占用的时间. 运行的命令. ps 命令. 功能 查看系统中正在运行的进程 语法 ps [-ef][-n name][-t ttys][-p pids][-u users][-groups] 参数选项 -f :产生某个进程的一个完整清单
E N D
第2讲 从应用编程者角度看进程 如何查看进程 进程控制 进程通讯
如何查看进程 • 命令行 • 利用目录/proc
ps命令 • 示例 • ps –ef 输出 进程开始的时间和日期 进程占用CPU的百分比 用户ID 进程号 父进程号 启动进程的终端号 进程已占用的时间 运行的命令
ps命令 • 功能 • 查看系统中正在运行的进程 • 语法 • ps [-ef][-n name][-t ttys][-p pids][-u users][-groups] • 参数选项 • -f:产生某个进程的一个完整清单 • -u:显示进程的用户名和启动时间等信息 • -t n:显示第n个终端的进程 • -e:显示所有的进程 • 说明 • ps可查看后台进程、前台进程,当ps命令行没有选项时,只显示与控制终端相关进程的基本信息 • 没有root权限,ps仅限以说明运行进程,报告用户的进程讯息
进程基本管理 • 分类 • 前台进程:用户运行一个程序或执行一个命令就启动一个前台进程,进程不结束,终端就不出现系统提示符 • 后台进程: 用户在输入命令行后加上”&”字符就启动一个后台进程,shell不等待命令退出,立即重新显示提示符,让该命令进程在后台运行 • bg命令可以将进程放到后台运行 • fg命令可以将后台进程放到前台运行 • 举例 • [jjpr@zzh jjpr]$ sleep 10& [1] 467 [jjpr@zzh jjpr]$ • find / -name myfile -print > /root/test & 1为作业号,由shell分配。467为PID 作业号不同于PID,在系统中不一定唯一
如何查看进程 • 命令行 • 利用目录/proc
你可以看到某一个进程的信息 • /proc/pid/status:相应进程的状态 • /proc/pid/ctl:相应进程的控制文件 • /proc/pid/psinfo:相应进程的ps 信息 • /proc/pid/as:相应进程的地址空间 • /proc/pid/map:相应进程的映射信息 • /proc/pid/object:相应进程的对象信息 • /proc/pid/sigact:相应进程的信号量操作 • /proc/pid/sysent:相应进程的系统调用信息 • /proc/pid/lwp/tid:相应进程的核心线程标示符目录 • /proc/pid/lwp/tid/lwpstatus:核心线程的状态 • /proc/pid/lwp/tid/lwpctl:核心线程控制文件 • /proc/pid/lwp/tid/lwpsinfo:核心线程的ps 信息
还可以看到其它信息 • 内存管理信息 • /proc/slabinfo是主存管理中关于各个slab缓冲块的信息 • /proc/swaps是系统的swap设备的信息 ·设备相关信息。 • /proc/pci是PCI总线上所有设备的列表信息。 • /proc/devices文件:列出字符和块设备的主设备号, 以及分配到这些设备号的设备名称。 • /proc/dma文件:列出由驱动程序保留的DMA通道和保留它 们的驱动程序名称。casade项供用于把次DMA控制器从主控制 器分出的DMA行所使用。 ·文件系统信息。 • /proc/mounts是系统中已经安装的文件系统设备的列表 • /proc/filesystems则是已经登记的每种文件系统(类型)的清单信息。 • /proc/partitions是磁盘分区的信息 • 中断编号信息。 • /proc/interrupts是关于中断源和它们的中断向量编号的清单信息。
模块相关信息。 • /proc/modules是系统中已安装的动态模块的清单, • /proc/ksyms则是内核中供可安装模块动态连接的符号名及其地址的清单信息。 • 系统版本信息。 包括号系统版本号,及其他各种统计与状态信息。 • /proc/cmdline文件:给出了内核启动的命令行。 • /proc/cpuinfo文件:提供了有关系统CPU的多种信息。文件列出了CPU的型号,以及能得到的更多特定信息(制造商,型号和版本)。该文件还包含了以bogomips表示的处理器速度
/proc/kcore文件:是系统的物理主存以core文件格式保存的文件。例如,GDB能用它考察内核的数据结构。它不是纯文本,而是/proc目录下为数不多的几个二进制格式的项之一。/proc/kcore文件:是系统的物理主存以core文件格式保存的文件。例如,GDB能用它考察内核的数据结构。它不是纯文本,而是/proc目录下为数不多的几个二进制格式的项之一。 • /proc/kmsg文件:用于检索用printk生成的内核消息。任何时刻只能有一个具有超级用户权限的进程可以读取这个文件。也可以用系统调用syslog检索这些消息。通常使用工具dmesg或守护进程klogd检索这些消息。 • /proc/ksyms文件:列出了已经登记的内核符号,这些符号给出了变量或函数的地址。每行给出一个符号的地址,符号名称以及登记这个符号的模块。程序ksyms,insmod和kmod使用这个文件。它还列出了正在运行的任务数,总任务数和最后分配的PID。 • /proc/loadavg文件:给出以几个不同的时间间隔计算的系统平均负载,这就如同uptime命令显示的结果那样。前3个数字是平均负载。这是通过计算过去1分钟,5分钟,15分钟里运行队列中的平均任务数得到的,随后是正在运行的任务数和总任务数,最后是上次使用的进程号。 • /proc/locks文件:包含在打开的文件上的加锁信息,文件中的每一行描述了特定文件和文档上的加锁信息以及对文件施加的锁的类型。内核也可以需要时对文件施加强制性锁。
/PROC文件系统使用方法 • 向proc文件系统中添加可读写文件 • 参看实验教材 • 通过proc文件系统查看进程信息 • cat /proc/cpuinfo
第2讲 从应用编程者角度看进程 如何查看进程 进程控制 进程通讯
无 有 消亡 运行 等待 等待 就绪 进程及进程管理——进程控制 1. 进程控制的概念 进程控制的职责 对系统中的进程实施有效的管理,负责进程状态的改变。 进程状态变化: 撤销 创建 等待 唤醒 常用的进程控制原语 创建原语、撤消原语、阻塞原语、唤醒原语 25
进程及进程管理——进程控制 2. 进程创建 进程创建原语的形式 create (name,priority) name为被创建进程的标识符 priority为进程优先级 进程创建原语的功能 创建一个具有指定标识符的进程,建立进程的PCB结构。 26
入口 a 查PCB总链 b 将入口信息填入 PCB相应项 Y 出错 有同名 ? 1 将PCB入就绪队列 将PCB入总链队列 向系统申请一个空的PCB结构 有空PCB ? N 返回进 程pid 出错 进程及进程管理——进程控制 进程创建原语的实现 进程创建原语的实现框图 PCB池 27
哪些事件会引起进程创建? • 用户登录 • 作业调度(用户请求运行程序) • 提供服务 • 应用请求
进程及进程管理——进程控制 3. 进程撤销 进程撤销原语的形式 当进程完成任务后希望终止自己时使用进程撤消原语。 Kill (或exit) 进程撤销原语的功能 撤消当前运行的进程。将该进程的PCB结构归还到PCB资 源池,所占用的资源归还给父进程,从总链队列中摘除 它,然后转进程调度程序。 28
入口 由运行指针得当前进程的pid 释放本进程所占用的资源给父进程 该进程从总链队列中摘下 释放PCB结构 转进程调度 进程及进程管理——进程控制 进程撤销原语的实现 29
进程及进程管理——进程控制 4. 进程等待 进程等待原语的形式 当进程需要等待某一事件完成时,它可以调用等待原语阻塞自己。 susp(chan) 入口参数chan:进程等待的原因 进程等待原语的功能 中止调用进程的执行,并加入到等待chan的等待队列中;最 后使控制转向进程调度。 30
入口 保护进程的CPU现场到PCB结构中 置该进程为”等待”状态 将该进程PCB结构插入到等待队列中 转进程调度 进程及进程管理——进程控制 进程等待原语的实现 31
进程及进程管理——进程控制 5. 进程唤醒 进程唤醒原语的形式 当处于等待状态的进程所期待的事件来到时,由发现者进 程使用唤醒原语叫唤醒它。 wakeup(chan) 入口参数chan:进程等待的原因。 进程唤醒原语的功能 当进程等待的事件发生时,唤醒等待该事件的进程。 32
入口 返回 找到该等待队列 将队列首进程移出此等待队列 将该进程置为”就绪”状态, 并将PCB结构插入到就绪队列中 进程及进程管理——进程控制 进程唤醒原语的实现 33
哪些事件引起进程的阻塞和唤醒? • 请求系统服务 • 启动某种操作 • 新数据尚未到达 • 无新工作可做
int main() { int pid; switch(pid=fork()) {case-1:return-1; case 0: execl("/bin/sh","sh","-c",command,NULL); exit(127); default: wait(NULL); } return 0; } int main() { int pid; char *cmdarg={","sh","-c",command,NULL} switch(pid=fork()) {case-1:return-1; case 0: execv("/bin/sh,cmdarg); exit(127); default: wait(NULL); } return 0; }
通过这节课的学习你知道怎么查看进程和改变进程的状态没有?通过这节课的学习你知道怎么查看进程和改变进程的状态没有?
第2讲 从应用编程者角度看进程 如何查看进程 进程控制 进程通讯
信号量 • 信号 • 管道 • 共享主存 • 消息传递 • 套接字
并发执行的进程之间的关系? • 资源共享 (互斥) • 合作(同步)
进程及进程管理——进程相互制约关系 互斥 在操作系统中,当多个并发进程使用同一个资源。而这个资源又不能同时使用,进程间的这种相互制约关系称为互斥。 37
进程及进程管理——进程相互制约关系 1. 进程互斥的概念 • 例1:两个进程A、B共享一台打印机 • 例2:两个进程共享一个变量x 设:x代表某航班机座号,p1和p2两个售票进程,售票 工作是对变量x加1。这两个进程在一个处理机C上并 发执行,分别具有内部寄存器r1和r2。 34
进程及进程管理——进程相互制约关系 • P1与P2并发执行,两种可能的执行次序: • A情形(希望这样) p1: r1 := x;r1:= r1+1; x := r1; p2: r2:= x;r2 := r2+1; x := r2; • B情形 p1: r1 := x; r1:= r1+1; x := r1; p2: r2:= x;r2 := r2+1; x := r2; • 设x的初值为10,两种情况下的执行结果: 情况A:x = 10+2 情况B: x = 10+1 35
进程P1 进程P2 x:= x+1; x:= x+1; csa { csb { 进程及进程管理——进程相互制约关系 临界资源 一次仅允许一个进程使用的资源称为临界资源。 硬件:如输入机、打印机、磁带机等 软件:如公用变量、数据、表格、队列等 临界区 临界区是进程中对临界资源使用的程序段,称为相对于该临界资源的临界区。 36
进程及进程管理——进程同步机构 1. 锁和上锁、开锁操作 什么是锁 用变量w代表某种资源的状态,w称为“锁” 。 上锁操作和开锁操作 检测w的值 (是0还是1); 如果w的值为1,继续检测; 如果w的值为0,将锁位置1 (表示占用资源),进入临界区执行。 (此为上锁操作) 临界资源使用完毕,将锁位置0。 (此为开锁操作) 40
进程及进程管理——进程同步机构 • 上锁原语和开锁原语 • 上锁原语 算法 lock 输入:锁变量w 输出:无 { test: if (w为1) goto test; ∕* 测试锁位的值*∕ else w=1; ∕*上锁*∕ } • 开锁原语 算法 unlock 输入:锁变量w 输出:无 { w=0;∕*开锁*∕ } 42
进程及进程管理——进程互斥与同步的实现 程序描述 程序 task1 main( ) pa( ) pb( ) { { { int w=1; ∕* 互斥锁 *∕ cobegin lock(w); lock(w); pa( ); csa; csb; pb( ); unlock(w); unlock(w); coend } } } 47
进程pa 进程pb 上锁原语 上锁原语 进入临界区csa 进入临界区csb 开锁原语 开锁原语 进程及进程管理——进程互斥与同步的实现 1. 用上锁原语和开锁原语实现进程互斥 框图描述 46
进程A 进程B W=0 ? W=0 ? = 0 = 0 1→W 1→W 进入临界区csa 进入临界区csb 0→W 0→W 进程及进程管理——进程同步机构 上锁原语的问题:没有让权等待! 41
进程进入临界区的准则 • 空闲让进 • 忙则等待 • 有限等待 • 让权等待
进程及进程管理——进程同步机构 2. 信号灯和P、V操作 • 什么是信号灯 • 信号灯是一个确定的二元组(s,q),s是一个具有非负 初值的整型变 量,q是一个初始状态为空的队列。操 作系统利用信号灯的状态对并发进程和共享资源进行 控制和管理。 信号灯是整型变量。 变量值 ≥ 0 时,表示绿灯,进程执行; 变量值 0 时,表示红灯,进程停止执行。 注意:创建信号灯时,应准确说明信号灯 s 的意义和初值 (这个初值 绝不能为负值)。 43
入 口 S-1 → S ≥0 S≥0 ? 0 入信号灯等待队列 返回 置“等待状态” 转进程调度 进程及进程管理——进程同步机构 P 操作 P 操作的定义 对信号灯s的 p操作记为 p(s)。p(s)是一个不可分割的原语操作,即取信号灯值减1,若相减结果为负,则调用p(s)的进程被阻,并插入到该信号灯的等待队列中,否则可以继续执行。 P 操作的实现 44
入 口 S+1 → S >0 S≤0 ? 从信号灯的等待队列中取出首元素 入就绪队列 置“就绪状态” 返回 进程及进程管理——进程同步机构 V 操作 V 操作的定义 对信号灯s的 v操作记为 v(s)。v(s)是一个不可分割的原语操作,即取信号灯值加1,若相加结果大于零,进程继续执行,否则,要帮助唤醒在信号灯等待队列上的一个进程。 V 操作的实现 45
进程pa 进程pb p(mutex) p(mutex) 进入临界区csa 进入临界区csb v(mutex) v(mutex) 进程及进程管理——进程互斥与同步的实现 2. 用信号灯的P、V操作实现互斥 框图描述 设:mutex为互斥信号灯,初值为1。 程序描述 48
进程及进程管理——进程互斥与同步的实现 程序 task2 main( ) { int mutex=1; ∕* 互斥信号灯 *∕ cobegin pa( ); pb( ); coend } pa( ) pb( ) { { p(mutex); p(mutex); csa; csb; v(mutex); v(mutex); } } 信号灯可能的取值 两个并发进程,互斥信号灯的值仅取1、0和-1三个值。 mutex=1 表示没有进程进入临界区; mutex=0 表示有一个进程进入临界区; mutex=-1 表示一个进程进入临界区, 另一个进程等待进入。 49
进程及进程管理——进程互斥与同步的实现 例: x代表某航班机座号,pa和pb两个售票进程,售票工作是对变量x加1。试用信号灯的P、V操作实现这两个进程的互斥。 设:mutex为互斥信号灯,初值为1。 pa( ) pb( ) { { p(mutex); p(mutex); x:=x+1 ; x:=x+1 ; v(mutex); v(mutex); } } 50
并发执行的进程之间的关系? 资源共享 (互斥) 合作(同步)
化验活动: 需要进行化验 ? 进行化验; 开出化验结果; 看病活动: 要病人去化验; 等化验结果; 继续诊病; 进程及进程管理——进程相互制约关系 2. 进程同步的概念 什么是进程同步 并发进程在一些关键点上可能需要互相等待与互通消息, 这种相互制约的等待与互通消息称为进程同步。 进程同步的例 病员就诊 38
iop cp 缓冲区buf 进程及进程管理——进程相互制约关系 共享缓冲区的计算进程与打印进程的同步 计算进程 cp和打印进程 iop公用一个单缓冲 A D C B A B C D 39
两类同步问题 • 生产者消费者问题 • 合作进程