1 / 125

第 3 讲 进程、线程和处理机管理

第 3 讲 进程、线程和处理机管理. 3.1 进程 3.2 进程控制 3.3 线程 3.4 进程互斥与同步 3.5 进程间通信 3.6 死锁问题 3.7 处理器调度概述 3.8 调度算法 3.9 Windows 2000/XP 的线程调度. 3.1 进程. 进程 处理器管理的基本单元 进程执行方式: 顺序 与 并发 顺序执行的特征 顺序性、封闭性、可再现性 并发执行的特点 间断性、非封闭性、无可再现性  因为 共享资源 的影响! 两进程 Pi, Pj 并发的条件,三者之一满足即可 Ri ∩ Wj = 空

delila
Download Presentation

第 3 讲 进程、线程和处理机管理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第3讲 进程、线程和处理机管理

  2. 3.1 进程 • 3.2 进程控制 • 3.3 线程 • 3.4 进程互斥与同步 • 3.5 进程间通信 • 3.6 死锁问题 • 3.7 处理器调度概述 • 3.8 调度算法 • 3.9 Windows 2000/XP的线程调度

  3. 3.1 进程 • 进程 处理器管理的基本单元 • 进程执行方式:顺序 与 并发 • 顺序执行的特征 顺序性、封闭性、可再现性 • 并发执行的特点 间断性、非封闭性、无可再现性因为共享资源的影响! • 两进程Pi, Pj并发的条件,三者之一满足即可 • Ri ∩ Wj = 空 • Wi ∩ Rj = 空 • Wi ∩ Wj = 空

  4. 进程的定义与描述 • 定义 • 进程不同于程序 • 进程是动态的 • 进程是暂时的 • 进程组成更为复杂 • 二者密切相关 • 并不是所有代码的执行过程都属于某一个进程:处理器调度器 • 进程控制块 PCB • 操作系统维护 • 记录了进程相关的信息 • OS可以通过PCB控制进程,并将处于同一状态的进程的进程块组织到一起:链表、索引表

  5. PCB组成 • 进程描述信息 • 进程标示符、进程名、用户标示符、进程组等 • 进程控制信息 • 当前状态、优先级、代码执行入口地址、程序的外存地址、运行统计信息、进程阻塞原因等 • 资源占用信息 • 占用的系统资源列表 • 处理器现场保护结构 • 保存寄存器值等

  6. 进程上下文 • 进程执行活动全过程的静态描述 • 用户级上下文 • 进程的用户地址空间,用户正文段、数据段、用户栈 • 寄存器级上下文 • 程序寄存器、处理器状态寄存器、栈指针等的值 • 系统级上下文 • 进程的静态部分、由核心栈等构成的动态部分

  7. 进程的状态转换 • 模型一:两状态进程模型 • 状态 • 运行状态:占用处理机资源; • 暂停状态:等待进程调度分配处理机资源;

  8. 转换 • 进程创建(Enter):系统创建进程,形成PCB,分配所需资源,排入暂停进程表(可为一个队列); • 调度运行(Dispatch):从暂停进程表中选择一个进程(要求已完成I/O操作),进入运行状态; • 暂停运行(Pause):用完时间片或启动I/O操作后,放弃处理机,进入暂停进程表; • 进程结束(Exit):进程运行中止;

  9. 模型二:五状态进程模型 • 两状态模型无法区分暂停进程表中的可运行和阻塞,五状态模型就是对暂停状态的细化。 • 运行:处于此状态的进程的数目小于等于CPU数目 • 就绪:已获除处理机外的所需资源,只要分配CPU就可执行 • 阻塞:条件满足之前无法继续执行 • 创建:进程刚创建,但还不能运行,如资源不足等 • 退出:回收PCB之外的其他资源,并让其他进程从PCB中收集有关信息(如记帐,将退出码exit code传递给父进程)

  10. 调度 释放 运行 退出 就绪 超时 提交 等待事件 事件出现 创建 阻塞 创建进程 • 状态转换 • 创建新进程 • 收容:收容一个新进程,进入就绪状态 • 调度运行 • 释放:正常退出Exit和异常退出abort(执行超时或内存不够,非法指令或地址,I/O失败,被其他进程所终止);就绪或阻塞到结束可能的原因有:如父进程可在任何时间中止子进程; • 超时 • 事件等待 • 事件出现

  11. 一个重要问题:一个事件出现时如何检查阻塞进程表中的进程状态一个重要问题:一个事件出现时如何检查阻塞进程表中的进程状态 • 图3-2 单个队列对性能影响很大 就绪队列 释放 调度 提交 CPU 进 程 执 行 超时 等待队列 等待事件 事件 出现

  12. 就绪队列 释放 调度 提交 CPU 超时 进 程 执 行 等待队列1 事件1出现 等待事件1 事件2出现 等待事件2 等待队列2 • 图3-3 按事件类型排成多个队列,可以按多个优先级来划分队列,如:时间片用完->低优,I/O完成->中优,页面调入完成->高优

  13. 模型三:挂起进程模型 • 五状态进程模型没有区分进程的地址空间 内存?外存? • 进程优先级,低优先级等待时间长,应换至外存区分进程地址空间 • 提高处理机效率:就绪进程表为空时,要提交新进程,以提高处理机效率; • 为运行进程提供足够内存:资源紧张时,暂停某些进程,如:CPU繁忙(或实时任务执行),内存紧张 • 用于调试:在调试时,挂起被调试进程(从而对其地址空间进行读写)

  14. 意义有变化或新的状态 • 就绪状态:进程在内存,可立即运行 • 阻塞状态:在内存,等待时间出现 • 阻塞挂起:在外存等待某事件出现 • 就绪挂起:在外存,只要进入内存即可运行

  15. 新状态转换: 挂起(调出)、激活(调入) • 意义有变化的状态转换: 事件的出现、收容 • 图3-4 单进程挂起 • 图3-5 双进程挂起

  16. 3.2 进程控制 • 进程的创建与退出 • 子进程可继承父进程部分属性 • 按子进程是否覆盖父进程或是否加载新程序,调用不同的系统调用 • 进程终止

  17. 进程的阻塞与唤醒 • 阻塞:等待某个事件引起 阻塞状态 • 唤醒:事件出现 就绪状态 • Unix系统中 • sleep、pause、wait、kill等 用于阻塞 • Windows NT、Windows2000/XP中,处理器调度对象为线程 • 线程控制块中的挂起记数, 挂起加1,激活减1 • 挂起:Windows NT中的SuspendThread可挂起指定的线程 DWORD SuspendThread( HANDLE hThread); • 激活:Windows NT中的ResumeThread可恢复指定线程的执行; • DWORD ResumeThread( HANDLE hThread);

  18. Windows2000/XP进程管理 • 进程是系统资源分配的基本单位 • 将进程作为对象来管理,进程对象句柄 • 进程对象 • 进程标识 • 资源访问令牌 • 进程的基本优先级 • 默认亲合处理器集合 • 2000/xp中,基本的进程功能被放置在win32子系统中,另外两个子系统用其实现自身的功能; p98图3-6

  19. Win32进程信息描述 • 执行体进程块(EPROCESS) • 描述进程的基本信息 • 指向其他与进程控制相关的数据结构 • 线程列表块、虚拟地址空间描述表、对象句柄列表p99 3-7

  20. Win32子系统的进程控制 • CreateProcess 创建进程及主线程,执行指定地程序 • 创建时可集成父进程属性,如打开的文件句柄各种对象的句柄、环境变量、当前目录等 • 不能继承:优先权类、内存句柄等 • ExitProcess • 退出进程,结束其所有的线程,操作是完整的 • TerminateProcess • 退出进程并结束其所有线程,但主要是异常时使用,操作不完整;

  21. 引入线程的目的是简化线程间的通信,以小的开销来提高进程的并发程度。 3.3 线程 • 进程提高计算机资源利用率,但并发时进程的切换开销较大,同时通信效率较低; • 概念:一个动态对象,处理器调度的基本单位,表示进程中的一个控制点,执行一系列的指令; • 进程仍是资源分配的单位,但进程内允许有多个线程并发执行。 • 不同于进程 • 同一进程内的线程可访问整个进程的所有资源,通信较进程方便; • 许多上下文相同同一进程内的线程转换更简便

  22. 同进程内的线程区别 • 线程状态:运行、挂起、就绪… • 寄存器上下文 • 堆栈等必不可少的执行环境 • 线程的优点 • 创建时间短 • 终止时间短 • 同进程内的线程切换时间短 • 通过共享内存及文件资源方式通信,通信不需通过内核进行;

  23. OS对线程的实现方式 • 内核线程:依赖于OS核心,由内核的内部需求进行创建和撤销,用来执行一个指定的函数。一个线程发起系统调用而阻塞,不会影响其他线程。时间片分配给线程,所以多线程的进程获得更多CPU时间。 • 用户线程:不依赖于OS核心(内核不了解用户线程的存在),应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。调度由应用软件内部进行,通常采用非抢先式和更简单的规则,也无需用户态/核心态切换,所以速度特别快。一个线程发起系统调用而阻塞,则整个进程在等待。时间片分配给进程,多线程则每个线程就慢。 • 轻权进程:内核支持的用户线程。一个进程可有一个或多个轻权进程,每个轻权进程由一个单独的内核线程来支持。结合了内核线程和用户线程的优点

  24. 线程与进程的比较 • 地址空间和其他资源:进程间相互独立,同一进程的各线程间共享-某进程内的线程在其他进程不可见(如打开文件) • 通信:进程间通信-IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信--需要进程同步和互斥手段的辅助,以保证数据的一致性 • 调度和切换:线程上下文切换比进程上下文切换要快得多;

  25. 多线程 进程模型 线程 线程 线程 单线程 进程模型 线程 控制块 线程 控制块 线程 控制块 进程 控制块 用户 堆栈 进程 控制块 用户 堆栈 用户 堆栈 用户 堆栈 用户地 址空间 内核 堆栈 内核 堆栈 内核 堆栈 内核 堆栈 用户地 址空间 进程与线程的比较

  26. Windows2000/XP线程 • 采用内核线程机制 • 线程上下文 • 寄存器 • 线程环境块 • 核心栈 • 用户栈 • 状态与进程类似,在就绪与运行之间添加了备用状态,以优化线程的抢先特征。

  27. 线程状态 • 就绪状态:已获得除处理机外的所需资源,等待执行。 • 备用状态:特定处理器的执行对象,系统中每个处理器上只能有一个处于备用状态的线程。 • 运行状态:完成描述表切换,线程进入运行状态,直到内核抢先、时间片用完、线程终止或进行等待状态。 • 等待状态:线程等待对象句柄,以同步它的执行。等待结束时,根据优先级进入运行、就绪状态。 • 转换状态:准备执行而其内核堆栈处于外存时,线程进入转换状态;当其内核堆栈调回内存,线程进入就绪状态。 • 终止状态:执行完就进入终止状态;如执行体有一指向线程对象的指针,可将线程对象重新初始化,并再次使用。

  28. Win32子系统的线程控制 • CreateThread()函数在调用进程的地址空间上创建一个线程,以执行指定的函数;返回值为所创建线程的句柄。 • ExitThread()函数用于结束本线程。 • SuspendThread()函数用于挂起指定的线程。 • ResumeThread()函数递减指定线程的挂起计数,挂起计数为0时,线程恢复执行。

  29. 3.4 进程互斥和同步 • 同步:多进程中发生的事件存在时序关系 • 互斥:由于共享资源所要求的排他性,要竞争 • 互斥算法 • 平等协商 or 集中管理(进程管理者) • 临界资源:需互斥使用的硬件或软件(如外设、共享代码段、共享数据结构),多个进程在对其进行访问时(关键是进行写入或修改),必须互斥地进行-有些共享资源可以同时访问,如只读数据

  30. 一个火车订票系统,两个终端,运行 T1 、 T2 进程 T1 : T2: ... ... Read(x); Read(x); if x>=1 then if x>=1 then x:=x-1; x:=x-1; write(x); write(x); ... ... 共享变量的修改冲突

  31. get copy put f s t g 有3个进程:get, copy和put,它们对4个存储区域f、s、t和g进行操作。 操作顺序冲突

  32. 有6种可能的操作顺序,只有一种结果是正确的。有6种可能的操作顺序,只有一种结果是正确的。

  33. 进程的交互关系:可按相互感知的程度分为三类进程的交互关系:可按相互感知的程度分为三类

  34. 互斥算法 • 互斥(mutual exclusion),死锁(deadlock),饥饿(starvation) • 互斥,指多个进程不能同时使用同一个资源; • 死锁,指多个进程互不相让,都得不到足够的资源; • 饥饿,指一个进程一直得不到资源而其他进程可能轮流占用资源 • 间接制约:进行竞争-独占分配到的部分或全部共享资源,“互斥” • 直接制约:进行协作-等待来自其他进程的信息,“同步”

  35. 解决之道 • 互斥使用:多进程不能同时使用同一资源 • 避免死锁:避免多个进程互不相让 • 避免饥饿:避免某些进程长期得不到资源或得到资源的概率很小

  36. 访问临界资源的过程 四步 • 进入区(entry section):在进入临界区之前检查可否进入临界区的一段代码。如果可以进入临界区,通常设置相应“正在访问临界区”标志 • 临界区(critical section):在每个进程中,访问临界资源的一段代码 • 退出区(exit section):用于将“正在访问临界区”标志清除 • 剩余区(remainder section):代码中的其余部分

  37. 进入区 临界区 退出区 剩余区 临界区的访问过程

  38. 同步机制应遵循的准则 • 空闲则入 • 最多一个进程位于临界区,其他进程均不处于临界区; • 忙则等待 • 已有进程处于其临界区; • 有限等待 • 等待进入临界区的进程不能无限期“死等”; • 让权等待 • 不能进入临界区的进程,应释放CPU(如转换到阻塞状态)

  39. 进程互斥的软件方法 • 基本思路 • 在进入区检查和设置一些标志,如已有进程进入临界区,则在进入区循环检查并等待;在退出区修改标志。 • 主要问题 • 设置什么标志 • 如何检查标志

  40. while (turn != i); 临界区 turn = j; 剩余区 单标志法 • 一个标志turn,描述允许进入临界区的进程标识 • 在进入区循环检查是否允许本进程进入:turn为i时,进程Pi可进入; • 在退出区修改允许进入进程标识:进程Pi退出时,改turn为进程Pj的标识j; • 两个进程Pi, Pj,其中的Pi 等待j释放资源 j释放资源,I进入临界区 i释放资源,置标志为j

  41. 算法可保证任何时刻最多只有一个进程在临界区算法可保证任何时刻最多只有一个进程在临界区 • 缺点 • 强制轮流进入临界区,没有考虑进程的实际需要; • 容易造成资源利用不充分:在Pi出让临界区之后,Pj使用临界区之前,Pi不可能再次使用临界区; • 如何避免这些缺点???

  42. while (flag[j]); <a> flag[i] = TRUE;<b> 临界区 flag[i] = FALSE; 剩余区 双标志、先检查算法 • 设立一个标志数组flag[]:描述进程是否在临界区,初值均为FALSE。 • 先检查,后修改:在进入区检查另一个进程是否在临界区,不在时修改本进程在临界区的标志;进入临界区; • 在退出区修改本进程在临界区的标志;

  43. 优点:不用交替进入,可连续使用; • 缺点 • Pi和Pj可能同时进入临界区,违犯最多只有一个进程在临界区的要求; • 按序列"Pi<a> Pj<a> Pi<b> Pj<b>"执行时,会同时进入。在检查对方flag之后和切换自己flag之前有一段时间,结果都检查通过。问题出在检查和修改操作不能连续进行。

  44. flag[i] = TRUE; while (flag[j]); 临界区 flag[i] = FALSE; 剩余区 双标志、后检查算法 • 解决前一算法的问题 • 保证检查与修改操作之间不出现间隔仅软件方法无法实现 • 修改标志的含义 • 类似于前一算法,区别在于本算法先修改后检查。可防止两个进程同时进入临界区。

  45. 缺点: • Pi和Pj可能都进入不了临界区 • 按序列“Pi<a> Pj<a> Pi<b> Pj<b>”执行时,都进不了临界区。即:切换自己flag之后和检查对方flag之前有一段时间,结果都切换flag,都检查不通过。

  46. flag[i] = TRUE; turn = j; while (TRUE==flag[j]&&turn == j); 临界区 flag[i] = FALSE; 剩余区 先修改、后检查、后修改者等待 • 结合算法1和算法3,是正确的算法 • turn=j,描述可进入的进程(同时修改标志时) • 在进入区先修改后检查,并检查并发修改的先后: • 检查对方flag,如不在临界区则自己进入-空闲则入 • 否则再检查turn:保存的是较晚的一次赋值,则较晚的进程等待,较早的进程进入-先到先进,后到等待

  47. flag[i] = TRUE; turn = i; flag[j] = TRUE; turn = j; while (TRUE==flag[j]&&turn == j); while (TRUE==flag[i]&&turn == i); 临界区 临界区 flag[i] = FALSE; flag[j] = FALSE; 剩余区 剩余区 如果将算法改为如下方法,将产生什么样的效果? 会不会同时进入? 会不会死锁? Turn很重要!

  48. 进程互斥的硬件方法 • 完全利用软件方法,有很大局限性(如不适于多进程),现在已很少采用。 • 在平等协商时,可利用某些硬件指令--其读写操作由一条指令完成,因而保证读操作与写操作不被打断;

  49. Test-and-Set指令 该指令读出标志后设置为TRUE boolean TS(boolean *lock) { boolean old; old = *lock; *lock = TRUE; return old; } lock表示资源的两种状态: TRUE表示正被占用,FALSE表示空闲

More Related