进程管理 主讲教师:赵俊峰
进程管理 • • • • • •
多道程序的设计 进程 进程间的相互作用 进程通信 进程调度 线程 – 基本概念 – OS对线程的实现方式 – 进程和线程的异同 – 线程举例
• 系统内核
线程—线程的基本概念 • 线程的引入 – 自从60年代提出进程概念以来,在操作 系统中一直都是以进程作为独立运行的 基本单位,直到80年代中期,人们又提 出了更小的能独立运行的基本单位 ⎯⎯ 线程 – 引入线程的目的是简化进程间的通信, 以小的开销来提高进程内的并发程度
Why 线程? 【案例】编写一个MP3播放软件。核心功能 模块有三个:(1)从MP3音频文件当中读取 数据;(2)对数据进行解压缩;(3)把解 压缩后的音频数据播放出来。
单进程的实现方法 main( ) { while(TRUE) { I/O Read( ); CPU Decompress( ); Play( ); } } Read( ) { … } Decompress( ) { … } Play( ) { … }
问题: • 播放出来的声音能 否连贯? • 各个函数之间不是 并发执行,影响资 源的使用效率;
多进程的实现方法 程序1 main( ) { while(TRUE) { Read( ); } } Read( ) { … }
程序2 main( ) { while(TRUE) { Decompress( ); } } Decompress( ) { … }
程序3 main( ) { while(TRUE) { Play( ); } } Play( ) { … }
问题:进程之间如何通信,共享数据?另外,维护进 程的系统开销较大:创建进程时,分配资源、建立 PCB;撤消进程时,回收资源、撤消PCB;进程切换 时,保存当前进程的状态信息。
线程的引入 • 以文件服务器为例 – 当它接受一个文件服务请求后,由于等待磁盘传输而 经常被阻塞,假如不阻塞可继续接受新的文件服务请 求并进行处理,则文件服务器的性能和效率便可以提 高,由于处理这些请求时要共享一个磁盘缓冲区,程 序和数据,要在同一个地址空间中操作
• 航空售票系统为例 – 处理多个购票和查询请求,这些信息都与同一个数据 库相关;而操作系统在同时处理许多用户进程的查询 请求时,都要去访问数据库所在的同一个磁盘 上述这类基于同数据区的同时多请求应用,用单线程结构的 进程难以达到这一目标,即使能解决问题代价也非常高,需 要寻求新概念、提出新机制
线程的引入 进程时空的开销大 频繁的进程调度将耗费大量处理器时间,要为每个进程 分配存储空间限制了操作系统中进程的总数。
进程通信的代价大 每次通信均要涉及通信进程之间或通信进程与操作系统 之间的信息传递。
进程之间的并发性粒度较粗 并发度不高,过多的进程切换和通信延迟使得细粒度的 并发得不偿失。
不适合并行计算和分布并行计算的要求 对于多处理器和分布式的计算环境来说,进程之间大量 频繁的通信和切换,会大大降低并行度。
不适合客户/服务器计算的要求 对于C/S 结构来说,那些需要频繁输入输出并同时大量 计算的服务器进程(如数据库服务器、事务监督程序) 很难体现效率
怎么来解决这些问题? 需要提出一种新的实体,满足以下特性: (1)实体之间可以并发地执行; (2)实体之间共享相同的地址空间; 这种实体就是:线程(Thread) 很多著名的操作系统都支持多线程(结构)进程,如:Solaris、 Mach、SVR4、OS/390、OS/2、WindowNT、Chorus 等; JAVA 的运行引擎则是单进程多线程的例子 线程接口规范,如Solaris thread 接口规范、OS/2 thread 接口 规范、Windows NT thread 接口规范等;IEEE 也推出了UNIX 类操作 系统的多线程程序设计标准POSIX 1003.4a
线程—线程的基本概念 进程的两个基本属性: • 资源的拥有者: 给每个进程分配一虚拟地址空间,保存进程 映像 控制一些资源(文件,I/O设备) 有状态、优先级、调度 • 调度单位: 进程是一个执行轨迹 以上两个属性构成进程并发执行的基础
线程—线程的基本概念 进程: 系统必须完成的操作: • 创建进程 • 撤消进程 • 进程切换 • 缺点:时间空间开销大,限制并发度的提高
线程—线程的基本概念 线程:有时称轻量级进程 进程中的一个实体 是一个CPU调度和分派的单位 基本上不拥有资源,只有必不可少的少量资源 可以与其他同进程的线程共享进程拥有的所有资源 资源的拥有者还是进程或称任务
将原来进程的两个属性分开处理
线程—线程的基本概念 • 引入进程好处 – 多个程序可以并发执行,改善资源使用 率,提高系统效率
• 引入线程好处 – 减少并发程序执行时所付出的时空开 销,使得并发粒度更细、并发性更好 进程两项功能分离 独立分配资源 被调度分派执行
由进程完成,进程作为系统的资源分配和保护 的独立单位,不需要频繁切换
由线程完成,作为资源调度和分配的单位, 能轻装运行,会被频繁调度和切换
线程—线程的基本概念 • 传统操作系统的进程 管理者
进程控制块
用户堆栈
用户地址空间
系统堆栈
执行序列
• 管理和执行相分离的进程 管理者 用户地址空间 执行序列
进程控制块 共享
执行控制
执行控制
用户堆栈
用户堆栈
系统堆栈
系统堆栈
执行序列
线程—线程的基本概念 • 多线程进程 多线程进程(模型) 进程 控制块
用户地址 空间
线程1
线程N
线程控制块
线程控制块
用户堆栈 系统堆栈
……
用户堆栈 系统堆栈
线程—线程的基本概念 Thread: • A sequential execution stream within a process; • A thread of execution; • 进程当中的一条执行流程
线程—线程的基本概念 • 进程:资源分配单位(存储器、文件)和CPU 调度(分派)单位。又称为”任务(task)” • 多线程环境中进程的定义:进程是操作系统中 进行保护和资源分配的基本单位 • 它具有: – 一个虚拟地址空间,用来容纳进程的映像; – 对处理器、其他(通信的)进程、文件和I/O 资 源等的有控制有保护的访问。
• 传统进程原先所承担的控制流执行任务交给称 作线程的部分完成。
线程—线程的基本概念 • 线程:作为CPU调度单位,而进程只作为其他资源分配单 位。 • 线程是操作系统进程中能够独立执行的实体(控制流), 是处理器调度和分派的基本单位 – 只拥有必不可少的资源,如:线程状态、寄存器上下文和栈 – 同样具有就绪、阻塞和执行三种基本状态
• 同一个进程中的所有线程共享进程获得的主存空间和资 源,但不拥有资源 • 线程具有: – 线程执行状态(运行、就绪、等待、…) – 当线程不运行时,有一个受保护的线程上下文,用于存储现 场信息 – 一个执行堆栈 – 一个容纳局部变量的主存存储区
线程—线程的基本概念 • 线程的优点:减小并发执行的时间和空间开销 (线程的创建、退出和调度),因此容许在系统 中建立更多的线程来提高并发程度。 – 线程的创建时间比进程短; – 线程的终止时间比进程短; – 同进程内的线程切换时间比进程短; – 由于同进程内线程间共享内存和文件资源,可 直接进行不通过内核的通信;
线程—线程的基本概念 从两个方面来理解进程: 从资源组合的角度:进程把一组相关的 资源组合起来,构成了一个资源平台 (环境),包括地址空间(代码段、数据 段)、打开的文件等各种资源; 从运行的角度:代码在这个资源平台上的 一条执行流程(线程)。
资源平台 线程
线程—线程的基本概念 进程 = 线程 + 资源平台 优点: 一个进程中可以同时存在多个线程; 各个线程之间可以并发地执行; 各个进程之间可以共享地址空间。
线程—线程的基本概念 • 进程要支撑线程运行, – 为线程提供地址空间和各种资源 – 进程封装管理信息,包括对指令代码、全局数据、 打开的文件和信号量等共享部分的管理
• 线程封装执行信息 – 对CPU、寄存器、执行栈(用户栈和核心栈)和局 部变量、过程调用参数、返回值等私有部分管理
• 有时,线程称为轻量进程LWP(Light-Weight Process)
线程—线程的基本概念 线程: • 有执行状态 • 不运行时保存上下文,用于存储现场信息 • 有一个执行栈 • 有一些局部变量的静态存储 • 可存取所在进程的内存和其他资源 • 可以创建、撤消另一个线程 • 就绪、等待和运行三种基本状态
线程—线程的基本概念 • 线程组成: – 唯一标识符及线程运行状态信息; – 未运行时所保存的上下文信息 – 核心栈(核心态工作时保存参数,在函数 调用时返回地址等) – 存放线程局部变量和用户栈的私有存储区
线程—线程的基本概念 • 属性 – 每个线程有一唯一标识符和一张线程描述表, 线程描述表记录了线程执行的寄存器及栈等现 场状态 – 不同线程可以执行相同程序 – 同一进程中的各个线程共享该进程的内存地址 空间 – 线程是处理器的独立调度单位,多个线程可以 并发执行 – 一个线程在被创建后开始生命周期,直至终 止;线程会经历等待、就绪、运行等状态
线程—线程的特性 • 并发性 – 同一进程的多个线程可在一个/多个处理器上并发或并行地 执行,进程之间的并发执行演变为不同进程的线程之间并 发执行
• 共享性 – 同一个进程中的所有线程共享但不拥有进程的状态和资 源,且驻留在进程的同一个主存地址空间,可以访问相同 的数据。需要有线程之间的通信和同步机制(实现方便)
• 动态性 – 线程是程序在相应数据集上的一次执行过程,由创建而产 生,至撤销而消亡,有生命周期,经历各种状态变化。
• 结构性 – 线程是操作系统中的基本调度和分派单位,具有唯一的标 识符和线程控制块,其中应包含所需的一切私有信息
线程—线程的基本概念 • 例子 – 某大厦的装潢工程作为一个“进程”,下有许多工 程队,如瓦工队、木工队、水电工队、油漆工队 等,每个工程队看作一个“线程” • “进程”负责采购资源(源料)和工程管理 • 有资源时上述工程队可以按进度齐头并进同时工 作(多线程并行执行) • 缺少源料时,相应工程队等待(线程被阻塞), 而可以调度其他工程队(线程)工作 • 从而提高整个系统(装潢工程)的并发行,加快工 程进度
线程—线程的基本概念 线程和进程: 单进程、单线程 单进程、多线程 多进程、一个进程一个线程 多进程、一个进程多个线程
Unix
one process one thread
multiple processes one thread per process Unix
one process Windows NT multiple threads
MS-DOS
multiple processes multiple threads per process
进程与线程的关系
Windows NT …
线程所需的资源 线程独享
线程共享
add r1, r2, r3 sub r2, r3, r10 st r2, 0(r1) …
线程所需的资源(续)
线程控制块 • TCB(Thread control block) – 标志线程存在的数据结构, 其中包含对线程 管理需要的全部信息.
• 内容 – 线程标识、线程状态 – 调度参数、现场(通用寄存器,PC,SP)
• 存放位置 – 用户级线程:目态空间 – 核心级线程:系统空间
线 程 多进程结构(用户视图) 进程1 内存
进程2 寄存器 内存
动 态 堆 静态数据 程序代码
寄存器
动 态 堆 栈
静态数据 程序代码
栈
线 程 多线程结构(用户视图) 进程
内存
线程1:
线程2:
寄存器
寄存器
栈
栈
动 态 堆 静态数据 程序代码
线程—线程的基本概念 • 引入线程的好处: –创建一个新线程花费时间少(结束亦如此) –两个线程的切换花费时间少 –因为同一进程内的线程共享内存和文件,因 此它们之间相互通信无须调用内核 –线程可以独立执行,能充分利用和发挥处理 器与外部设备并行工作能力
线程的优点
线程的基本状态 (1) 执行状态 (2) 就绪状态 (3) 阻塞状态
思考:挂起状态是否可以作为线程级的状态?
线程的基本状态 • 线程的创建和终止 –创建新线程时,需要利用线程创建函数(或系统 调用),并提供相应参数。线程创建函数执行完 后,返回一个线程标识符供以后使用。 • 例:Java ---Thread –Java为我们提供了线程类Thread来创建线程 –在多线程OS中,应用程序启动时,通常只有一 个线程(初始化线程)在执行,它根据需要创建 若干线程
Java线程 Java线程状态之间的转换关系图 Java线程四种基本状态 –New:新建的线程 –Runnable:可运行状态 –Suspend:封锁状态 –Dead:终止状态. Runnable Start( ) New
Sleep( ) Suspend( ) Waiting I/O
Stop( )
Resume( )
Suspend
Dead
JAVA线程与JVM • Java线程是由Java虚拟机JVM支持的 • JVM位于操作系统之上 • Java线程与操作系统线程之间的对应关系由 JVM确定 – 对于Windows NT的JVM,Java线程与操作系统 线程具有一对一关系; – 对于Solaris的JVM,其对应关系为多对多.
线程的基本状态 • 线程的终止方式: –自愿退出 –被其它线程强行终止
–线程被终止后并不立即释放资源,只有 当进程中的其它线程执行分离函数后, 资源才分离出来能被其它线程利用
Windows NT的线程状态
Windows NT的线程状态 NT线程的上下文包括:寄存器、核心栈、线程环境块和 用户栈 NT线程状态 (1) 就绪状态:线程已获得除处理机外的所需资源,等待执行。 (2) 备用状态:特定处理器的执行对象,系统中每个处理器上只 能有一个处于备用状态的线程。 (3) 运行状态:完成描述表切换,线程进入运行状态,直到内核 抢先、时间片用完、线程终止或进行等待状态。 (4) 等待状态:线程等待对象句柄,以同步它的执行。等待结束 时,根据优先级进入运行、就绪状态。 (5) 转换状态:线程在准备执行而其内核堆栈处于外存时,线程 进入转换状态;当其内核堆栈调回内存,线程进入就绪状态。 (6) 终止状态:线程执行完就进入终止状态;如执行体有一指向 线程对象的指针,可将线程对象重新初始化,并再次使用。
Windows NT的线程状态 NT线程的有关API ¾CreateThread()函数在调用进程的地址空间上创建 一个线程,以执行指定的函数;返回值为所创建 线程的句柄。 ¾ExitThread()函数用于结束本线程。 ¾SuspendThread()函数用于挂起指定的线程。 ¾ResumeThread()函数递减指定线程的挂起计数, 挂起计数为0时,线程恢复执行。
Windows 进程对象描述图 对象头部属性
Type: Process
对象体属性
进程标识(Process id) 访问令牌(Access token) 基础优先级(Base priority) 缺省亲合处理机(Default processor affinity) 配额限制(Quota limits) 执行时间(Execution time) 输入/输出记数(I/O counters) 执行/调试端口(Exception/debugging ports) 退出状态(exit status)
服务
创建进程(Create process) 打开进程(Open process) 查询进程信息(Query process information) 设置进程信息(Set process information) 当前进程(Current process) 终止进程(Terminate process) 分配/释放虚拟存储(Allocate/free virtual memory) 读/写虚拟存储(Read/write virtual memory) 保护虚拟存储(Protect virtual memory) 加锁/开锁虚存(Lock/unlock virtual memory) 查询虚拟存储(Query virtual memory) 刷新虚拟存储(Flush virtual memory)
Windows 线程对象描述图 对象头部属性 属性
类型:线程(Type: thread)
属性
客户标识(client id) 线程上下文(thread context) 动态优先级(dynamic priority) 处理机亲合掩码(thread processor affinity) 已执行时间(thread execution time) 警觉状态(alert status) 挂起记数(suspension count) 非角色令牌(impersonation token) 终止端口(termination port) 终止状态(exit status)
服务
创建线程(Create thread) 打开线程(Open thread) 查询线程状态(Query thread information) 设置线程状态(Set thread information) 当前线程(Current thread) 终止线程(Terminate thread) 取上下文(Get context) 置上下文(Set context) 挂起(Suspend) 恢复(Resume) 警示线程(Alert thread) 测试线程警示(Test thread alert) 注册终止端口(Register termination port)
Linux进程与线程 • 进程与线程在系统内部具有统一的表示 • 进程与线程的差别通过与fork不同的另外一 个系统调用clone体现出来 • Clone系统调用的形式 Pid = clone(function,stack_ptr,sharing_flag,arg)
• http://topic.csdn.net/t/20060805/19/4929619.html
线程— OS对线程的实现方式 • 内核线程(kernel-level thread) –依赖于OS核心,由内核的内部需求进行创建和 撤销,用来执行一个指定的函数 • 内核维护进程和线程的上下文信息 • 线程切换由内核完成 • 一个线程发起系统调用而阻塞,不会影响其他线 程的运行(内核把系统调用只看作该线程的行 为,内核能调度其他线程进行运行) • 时间片分配给线程,所以多线程的进程获得更多 CPU时间
–如:Windows NT和OS/2支持内核线程
内核线程
用户 空间 内核 空间
TCB
PCB
线程— OS对线程的实现方式 优点: • 对多处理器,核心可以同时调度同一进程的多个线 程 • 阻塞是在线程一级完成 –即进程中一个线程被阻塞,内核能够调度同一进程中的 其他线程占有处理器,也可运行其他进程的线程
• 内核级线程数据结构和堆栈很小,切换速度快 缺点: • 线程在用户态运行,而线程的调度和管理在内核实 现,在同一进程中,控制权从一个线程传送到另一 个线程时需要用户态—核心态—用户态模式切换, 系统开销大
线程— OS对线程的实现方式 • 用户线程(user-level thread) – 不依赖于OS核心,应用进程利用线程库提供创建、 同步、调度和管理线程的函数来控制用户线程。 – 调度由应用软件内部进行,通常采用非抢先式和更 简单的规则,也无需用户态/核心态切换,所以速度 特别快。 – 一个线程发起系统调用而阻塞(系统调用看作是整 个进程的行为),则整个进程在等待。时间片分配 给进程,多线程则每个线程就慢。 • 用户线程的维护由应用进程完成; • 内核不了解用户线程的存在; • 用户线程切换不需要内核特权; • 用户线程调度算法可针对应用优化;
线程库 • 线程库 – 多线程应用程序的开发和运行环境 – 多线程技术利用线程库提供一整套有关 线程过程调用或系统调用来支持多线程 运行 – 提供功能: • 孵化、封锁、活化、结束、通信、同步、互 斥、切换(保护和恢复线程上下文)、线程 调度 • 提供相关API以支持应用程序的创建、调度 、撤销并管理线程的运行
用户线程
TCB (Thread Control Block)
PCB
线程— OS对线程的实现方式 • 线程库 –创建、撤消线程 –在线程之间传递消息和数据 –调度线程执行 –保护和恢复线程上下文
• 对用户级线程的核心活动 –核心不知道线程的活动,但仍然管理线程的进 程的活动 –当线程调用系统调用时,整个进程阻塞 –但对线程库来说,线程仍然是运行状态
线程— OS对线程的实现方式 优点: • 线程切换不调用核心 –线程管理的数据结构均在进程的用户空间中, 管理线程切换的线程库也在用户空间运行,节 省模式切换的开销和内核宝贵资源
• 调度是应用程序特定的:可以选择最好的算法 • 用户级线程可运行在任何操作系统上(只需要 线程库) 缺点: • 大多数系统调用是阻塞的,因此核心阻塞进 程,故进程中所有线程将被阻塞 • 核心只将处理器分配给进程,同一进程中的两 个线程不能同时运行于两个处理器上
线程— OS对线程的实现方式 • 混合式线程 – 某些OS既支持用户级线程,又支持内核 级线程,如Solaris • 用户层:在用户线程库实现 • 核心层:在操作系统内核实现,支持内核级 多线程的建立、调度和管理,允许应用程序 建立、调度和管理用户级线程
线程—线程与进程的比较 • 地址空间和其他资源(如打开文件):进程间 相互独立,同一进程的各线程间共享--某进 程内的线程在其他进程不可见 • 通信:进程间通信IPC,线程间可以直接读写 进程数据段(如全局变量)来进行通信--需 要进程同步和互斥手段的辅助,以保证数据的 一致性
线程—线程与进程的比较 • 调度:线程上下文切换比进程上下文切换要快 得多; – 同进程中的线程切换不会引起进程的切换,不 同进程中的线程切换会引起进程的切换
• 并发性 – 一个进程中可以有多个线程并发执行,提高系 统资源的利用率
• 系统开销 – 系统要为进程分配或回收资源,其开销将大于 为线程创建和撤销的开销
多线程与进程之间的关系
线程的组织 • 进程中的若干线程可以有多种组织方式: – 调度员-工作者:进程中的一个线程担任调度 员,接受和处理工作请求,其他线程是工作 者线程,由调度员线程分配任务并唤醒工作 者线程 – 组模式:进程中各个线程可以取得并处理请 求,有时每个线程被设计成专门执行特定任 务,同时建立相应的任务队列 – 流水线模式:线程排成某个次序,第一个线 程所产生的数据传递给下一个线程处理,依 次类推
Multithreaded Process Model
Single-Threaded Process Model Process Control Block
User Stack
User Address Space
Kernel Stack
Thread
Thread
Thread
Thread Control Block
Thread Control Block
Thread Control Block
Process Control Block
User Stack
User Stack
User Stack
User Address Space
Kernel Stack
Kernel Stack
Kernel Stack
线程切换和进程切换
线程—线程举例 SUN Solaris 2.3
Solaris支持内核线程(Kernel threads)、轻权进 程(Lightweight Processes)和用户线程(User Level Threads)。一个进程可有大量用户线程; 大量用户线程复用少量的轻权进程,不同的轻 权进程分别对应不同的内核线程
线程举例—SUN Solaris 2.3 • 用户级线程(线程库): 可在应用进程中建立多个ULT 每个ULT需要:栈、程序计数器 不受调度程序的调度,线程切换快 对操作系统不可见 提供应用程序并行性接口
• 核心级线程: 设置了大量KLT 有一个小的数据结构和栈 完成内核的所有工作 调度处理器的单位,其结构由核心维护
线程举例—SUN Solaris 2.3 • 轻权进程(LWP): 每个ULT利用LWP与内核通信 每个LWP支持一个或多个用户级线程,并映射 到一个核心级线程 每个LWP对应用程序可见,内核看到的是多个 LWP而看不到ULT
用户级线程 可运行
停止
唤醒
继续 抢占 停止
停止
睡眠
分派 停止
睡眠 活跃 连接在LWP上
轻型进程状态 时间片 或抢占
停止
运行 唤醒
分派
阻塞 系统 调用
可运行
唤醒
停止
继续 阻塞
LWP状态独立于状态ULT (受限制ULT除外)
停止
• 用户级线程在使用系统调用时(如文件读写),需 要“捆绑(bound)”在一个LWP上。 – 永久捆绑:一个LWP固定被一个用户级线程占用,该 LWP移到LWP池之外 – 临时捆绑:从LWP池中临时分配一个未被占用的LWP
• 在使用系统调用时,如果所有LWP已被其他用户级 线程所占用(捆绑),则该线程阻塞直到有可用的 LWP--例如6个用户级线程,而LWP池中有4个 LWP • 如果LWP执行系统调用时阻塞(如read()调用),则 当前捆绑在LWP上的用户级线程也阻塞。
Process 1
Process 1 Permanently Bound Threads
UT
UT
LWP
UT
UT
UT
Unbound Threads
LWP
LWP
LWP
Pool of LWPs for Unbound Threads
KT
KT
KT
KT
Kernal KT
KT
CPU 1
CPU 1
用户线程、轻权进程和核心线程的关系
• 有关的C库函数 /* 创建用户级线程 */ int thr_create(void *stack_base, size_t stack_size, void *(*start_routine)(void *), void *arg, long flags, thread_t *new_thread_id); 其中flags包括:THR_BOUND(永久捆绑), THR_NEW_LWP (创建新LWP放入LWP池),若两者同时指定则创建两个新 LWP,一个永久捆绑而另一个放入LWP池
• 有关的系统调用 /* 在当前进程中创建LWP */ int _lwp_create(ucontext_t *contextp, unsigned long flags, lwpid_t new_lwp_id); / 构造LWP上下文 */ void _lwp_makecontext(ucontext_t *ucp, void (*start_routine)( void *), void *arg, void private, caddr_t stack_base, size_t stack_size); / 注意:没有进行”捆绑”操作的系统调用 */
进程管理 • 多道程序的设计 • 进程 • 进程间的相互作用 • 进程通信 • 进程调度 • 线程 • 系统内核
系统内核 系统核心: 向上提供多个无中断的虚拟机器 在核心内不允许中断 特点:* 为进程运行提供一个舞台
- 核心常驻内存
- 设计短小精焊
系统内核—核心的组成 • 内核提供的功能: –中断处理 –进程管理:
调度 控制 通讯 互斥 同步等 –存储管理的基本操作 –文件信息管理的基本操作 –时钟管理
• 内核的各种功能通过原语操作实现
系统内核—核心的组成 • 队列管理: 队列数据结构:指向队首的表指针 三个队列: 运行,就绪,等待队列 排队方式: 排队首 排队尾 插 队 出队方式: 队首出队/队中出队 队列管理: 中断之后,进程调度之前
系统内核—核心的组成 • 现场管理: 保存现场;注意顺序,中断之后第一步 恢复现场:恢复时机,进程调度最后一步 时钟管理: 以固定频率 +1 -1 用途:进入绝对时钟 间隔时钟 进行分析比较
系统内核—核心的组成 • 虚时钟: 每个进程分配给一个虚时钟来记录CPU时间,这 个时钟称为虚时钟 虚时钟存放在PCB中,属于现场的一部分,进 程运行时,将虚时钟放入内存开辟的专门单 元,离开CPU则放在 PCB中
系统内核—核心的执行 • 核心处理流程 –进入核心的唯一入口:中断 –中断后进入核心,由硬件完成
系统内核—核心的执行 • 内核的执行特点 –由中断驱动的: 中断→内核→退出 –内核执行是连续的 –内核执行过程中在中断屏蔽状态下 –内核使用特权指令
小结 • 顺序执行和并发执行 • 进程的定义(与程序比较),静态表示(组 成,包括PCB),动态表示(状态) • 进程间状态转换 • 互斥和同步:信号量及P、V操作,管程的概念 • 进程间通信:共享存储区,管道,消息,信 箱、套接字 • 线程:引入原因,与进程比较 • 系统内核的作用