操作系统-进程管理
2024-02-28 09:18:17 0 举报
AI智能生成
进程、线程基础\进程间通信方式\多线程冲突\如何避免死锁\锁分类
作者其他创作
大纲/内容
CPU上下文切换
CPU上下文
CPU 寄存器是 CPU 内部一个容量小,但是速度极快的内存(缓存)
程序计数器则是用来存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置
CPU 寄存器和程序计数是 CPU 在运行任何任务前,所必须依赖的环境,这些环境就叫做 CPU 上下文
CPU上下文切换
CPU 上下文切换就是先把前一个任务的 CPU 上下文(CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务
系统内核会存储保持下来的上下文信息,当此任务再次被分配给 CPU 运行时,CPU 会重新加载这些上下文,这样就能保证任务原来的状态不受影响,让任务看起来还是连续运行
任务类型
进程
线程
中断
进程
概念
我们编写的代码只是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中
接着 CPU 会执行程序中的每一条指令,那么这个运行中的程序,就被称为「进程」
执行方式
多个程序、交替执行
对于一个支持多进程的系统,CPU 会从一个进程快速切换至另一个进程,其间每个进程各运行几十或几百个毫秒
单核的 CPU 在某一个瞬间,只能运行一个进程。但在 1 秒钟期间,它可能会运行多个进程,这样就产生并行的错觉,实际上这是并发
状态
创建状态
进程正在被创建时的状态
运行状态
该时刻进程占用 CPU
就绪状态
可运行,由于其他进程处于运行状态而暂时停止运行
阻塞状态
该进程正在等待某一事件发生(如等待输入/输出操作的完成)而暂时停止运行,这时,即使给它CPU控制权,它也无法运行
结束状态
进程正在从系统中消失时的状态
控制结构
在操作系统中,是用进程控制块(process control block,PCB)数据结构来描述进程的
PCB
概念
PCB 是进程存在的唯一标识,这意味着一个进程的存在,必然会有一个 PCB,如果进程消失了,那么 PCB 也会随之消失。
包含信息
进程描述信息
进程标识符
标识各个进程,每个进程都有一个并且唯一的标识符
用户标识符
进程归属的用户,用户标识符主要为共享和保护服务
进程控制和管理信息
进程控制和管理信息
进程当前状态,如 new、ready、running、waiting 或 blocked 等
进程优先级
进程抢占 CPU 时的优先级
资源分配清单
有关内存地址空间或虚拟地址空间的信息,所打开文件的列表和所使用的 I/O 设备信息
CPU 相关信息
CPU 中各个寄存器的值,当进程被切换时,CPU 的状态信息都会被保存在相应的 PCB 中,以便进程重新执行时,能从断点处继续执行。
结构
链表方式
把具有相同状态的进程链在一起,组成各种队列
将所有处于就绪状态的进程链在一起,称为就绪队列
把所有因等待某事件而处于等待状态的进程链在一起就组成各种阻塞队列
图示
分支主题
控制
1、创建
操作系统允许一个进程创建另一个进程,而且允许子进程继承父进程所拥有的资源
过程
1、申请一个空白的 PCB,并向 PCB 中填写一些控制和管理进程的信息,比如进程的唯一标识等
2、为该进程分配运行时所必需的资源,比如内存资源
3、将 PCB 插入到就绪队列,等待被调度运行
2、终止
当子进程被终止时,其在父进程处继承的资源应当还给父进程。而当父进程被终止时,该父进程的子进程就变为孤儿进程,会被 1 号进程收养,并由 1 号进程对它们完成状态收集工作
方式
正常结束
异常结束
外界干预(信号 kill 掉)
过程
1、查找需要终止的进程的 PCB
2、如果处于执行状态,则立即终止该进程的执行,然后将 CPU 资源分配给其他进程
3、如果其还有子进程,则应将该进程的子进程交给 1 号进程接管
4、将该进程所拥有的全部资源都归还给操作系统
5、将其从 PCB 所在队列中删除
3、阻塞
当进程需要等待某一事件完成时,它可以调用阻塞语句把自己阻塞等待。而一旦被阻塞等待,它只能由另一个进程唤醒。
过程
1、找到将要被阻塞进程标识号对应的 PCB
2、如果该进程为运行状态,则保护其现场,将其状态转为阻塞状态,停止运行
3、将该 PCB 插入到阻塞队列中去
4、唤醒
进程由「运行」转变为「阻塞」状态是由于进程必须等待某一事件的完成,所以处于阻塞状态的进程是绝对不可能叫醒自己的
如果某进程正在等待 I/O 事件,需由别的进程发消息给它,则只有当该进程所期待的事件出现时,才由发现者进程用唤醒语句叫醒它
过程
1、在该事件的阻塞队列中找到相应进程的 PCB
2、将其从阻塞队列中移出,并置其状态为就绪状态
3、把该 PCB 插入到就绪队列中,等待调度程序调度
上下文切换
概念
一个进程切换到另一个进程运行,称为进程的上下文切换
进程是由内核管理和调度的,所以进程的切换只能发生在内核态
进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源
处理过程
把交换的信息保存在进程的 PCB
当要运行另外一个进程的时候,我们需要从这个进程的 PCB 取出上下文,然后恢复到 CPU 中
分支主题
场景
1、CPU的时间片分配给各个进程
2、进程在系统资源不足(比如内存不足)时,要等到资源满足后才可以运行,这个时候进程也会被挂起,并由系统调度其他进程运行
3、当进程通过睡眠函数 sleep 这样的方法将自己主动挂起时
4、当有优先级更高的进程运行时,为了保证高优先级进程的运行,当前进程会被挂起,由高优先级进程来运行
5、发生硬件中断时,CPU 上的进程会被中断挂起,转而执行内核中的中断服务程序
线程
概念
线程是进程当中的一条执行流程
同一个进程内多个线程之间可以共享代码段、数据段、打开的文件等资源,但每个线程各自都有一套独立的寄存器和栈,这样可以确保线程的控制流是相对独立的
图示
分支主题
优点
一个进程中可以同时存在多个线程
各个线程之间可以并发执行
各个线程之间可以共享地址空间和文件等资源
与进程比较
线程是调度的基本单位,而进程则是资源拥有的基本单位
当进程只有一个线程时,可以认为进程就等于线程
当进程拥有多个线程时,这些线程会共享相同的虚拟内存和全局变量等资源,这些资源在上下文切换时是不需要修改的
线程也有自己的私有数据,比如栈和寄存器等,这些在上下文切换时也是需要保存的
上下文切换
当两个线程不是属于同一个进程,则切换的过程就跟进程上下文切换一样
当两个线程是属于同一个进程,因为虚拟内存是共享的,所以在切换时,虚拟内存这些资源就保持不动,只需要切换线程的私有数据、寄存器等不共享的数据
实现
用户线程
概念
在用户空间实现的线程,不是由内核管理的线程,是由用户态的线程库来完成线程的管理
用户线程的整个线程管理和调度,操作系统是不直接参与的,而是由用户级线程库函数来完成线程的管理,包括线程的创建、终止、同步和调度等
模型
分支主题
内核线程
概念
在内核中实现的线程,是由内核管理的线程
内核线程是由操作系统管理的,线程对应的 TCB 自然是放在操作系统里的,这样线程的创建、终止和管理都是由操作系统负责
模型
分支主题
轻量级进程
概念
在内核中来支持用户线程
轻量级进程(Light-weight process,LWP)是内核支持的用户线程,一个进程可有一个或多个 LWP,每个 LWP 是跟内核线程一对一映射的,也就是 LWP 都是由一个内核线程支持,而且 LWP 是由内核管理并像普通进程一样被调度
模型
分支主题
1 : 1,即一个 LWP 对应 一个用户线程
N : 1,即一个 LWP 对应多个用户线程
M : N,即多个 LWP 对应多个用户线程
用户线程与内核线程对应关系
多对一
分支主题
一对一
分支主题
多对多
分支主题
0 条评论
下一页