处理器管理

进程状态: 七态转换
进程组成:进程控制块(PCB)+ 程序代码 + 数据集
进程控制: 基本控制操作 + 进程队列 + 调度层次,算法
进程通信: 管道,共享内存,Socket

进程状态: 核心为就绪,运行,阻塞三态
在这里插入图片描述
1.创建状态:进程在创建时需要申请一个空白PCB(processcontrol block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态
2.就绪状态:进程已经准备好,已分配到所需资源,只要分配到CPU就能够立即运行。即现在CPU没有资源。(非自身原因)
3.执行状态:进程正在CPU中处理执行。
4.阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用。等待用户输入,接收不到输入参数逻辑上无法运行。(CPU空闲也不行,自身原因)
5.终止状态:进程结束,或出现错误,或被系统终止,或被其他进程代替,进入终止状态。无法再执行
6.挂起状态:计算机资源不足(CPU,内存等资源)时,将进程从内存调到外存,剥夺其资源,待到有资源后再参与调度。

进程组成: 核心为进程控制块(进程的属性集合,分三部分)
一个进程映像(Process Image)包括:
1.进程控制块,每一个进程都将捆绑一个进程控制块,用来存储进程的标志信息、状态信息和控制信息。进程创建时,建立进程控制块;进程撤销时,回收进程控制块,它与进程一一对应。 进程控制块类似于协议(消息单元)的头部。 表明标识,状态,控制信息。
2.进程程序块,即被执行的程序,规定了进程一次运行应完成的功能。通常它是纯代码,作为一种系统资源可被多个进程共享。
3.进程数据块,即程序运行时加工处理对象,包括全局变量、局部变量和常量等的存放区以及开辟的工作区,常常为一个进程专用。
4.系统/用户堆栈,每一个进程都将捆绑一个系统/用户堆栈。用来解决过程调用或系统调用时的信息存储和参数传递。 堆栈是存储数据的一块连续内存

进程标识块(PCB,process control block)组成:
在这里插入图片描述
核心为 进程标识符(PID)
在这里插入图片描述
核心为程序计数器 进程的状态信息包括 进程状态信息和 处理器状态信息
在这里插入图片描述
核心为 状态,优先级
在这里插入图片描述
在这里插入图片描述


进程控制: 核心为进程队列模块, 基本操作(状态切换),进程调度都围绕队列模块展开

基本控制操作
在这里插入图片描述
队列管理模块: 就绪,等待,挂起三队列
根据进程的三种状态将内存中的进程放入不同队列:就绪(根据队列调度算法优先级再分),等待(根据不同的终止原因再分),挂起三种队列
过程:完成新建——加入就绪队列——根据调度算法进入CPU运行——发生等待事件(中断,陷阱)——加入等待队列——发生挂起事件——加入挂起队列。
等待事件结束后——加入就绪队列,等待处理器处理。
在这里插入图片描述
处理器调度(谁<进程/线程>先使用,谁后使用CPU的问题)
双层调度机制 + 进程调度算法/程序
在这里插入图片描述
作业调度: 判断指令能否被系统接纳,进入内存成为进程。 完成进程的创建(态)和退出
进程调度:按照进程调度算法决定进程使用CPU的先后顺序

进程调度算法
调度算法——几个尝试
1.FCFS(First come first service): 先到先服务算法—对于长作业来说是很好,但是不利于短作业。对于CPU繁忙型的比较占优势,而对于耗时的IO繁忙型作业不利。
2.SJF(short job first): 短作业优先算法 —— 会一直处理短作业,长作业处于饥饿状态。
3.时间片轮转调度算法: 每个都处理固定时间 —— 可能都处理不完
4. 优先级调度算法: 设置优先级让优先度高的进程先执行。 先执行重要的任务,但仍旧会产生饥饿现象

最终 应用的调度算法: 多级反馈队列调度算法(综合以上算法优点),是个综合性算法
1.设置多个就绪队列,并为各个队列赋予不同的优先级,第1级队列的优先级最高,第2级队列次之,其余队列的优先级逐次降低。
2.赋予各个队列中进程执行时间片的大小也各不相同,在优先级越高的队列中,每个进程的运行时间片就越小。例如,第2级队列的时间片要比第1级队列的时间片长一倍, ……第i+1级队列的时间片要比第i级队列的时间片长一倍。
3.当一个新进程进入内存后,首先将它放入第1级队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第2级队列的末尾,再同样地按FCFS 原则等待调度执行;如果它在第2级队列中运行一个时间片后仍未完成,再以同样的方法放入第3级队列……如此下去,当一个长进程从第1级队列依次降到第 n 级队列后,在第 n 级队列中便釆用时间片轮转的方式运行。
4.仅当第1级队列为空时,调度程序才调度第2级队列中的进程运行;仅当第1 ~ (i-1)级队列均为空时,才会调度第i级队列中的进程运行。如果处理机正在执行第i级队列中的某进程时,又有新进程进入优先级较高的队列(第 1 ~ (i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i级队列的末尾,把处理机分配给新到的更高优先级的进程。

这么做的好处是明显的,对于短作业来说,可以很快的轮到并解决。对于长作业来说,一下子解决不了,可以放到下一条队列里,虽然等的时间久了,但是轮到自己的执行时间变长了,也可以接受,不容易产生饥饿现象。可以说是综合上面几种算法的优点。


进程通信(inter process communication ,ICP)方式
1.最基本: 管道,分为pipe(匿名管道), fifo(命名管道)
常见的Linux命令 “|” 其实就是匿名管道,表示把一个进程的输出传输到另外一个进程
半双工,单向通信,两个管道实现双向通信。
2.最高效:共享内存(配合信号量使用):两个进程各自拿出一块虚拟地址空间来,然后映射到相同的物理内存中,这样,两个进程虽然有着独立的虚拟内存空间,但有一部分却是映射到相同的物理内存,这就完成了内存共享机制。共享内存是临界资源,所以需要操作时必须要保证原子性。使用信号量进行保护。
3.最常用(实际使用):socket套接字 在多进程,多线程,多模块所构成的今天1最常见的分布式系统开发中,socket是几乎唯一选择。socket本地也可以实现通信,跨机器也可以通信(网络)。
实际中,都直接用成熟的基于socket的库了,比如zeromq。
4.其他: 消息队列几乎不使用, 信号量功能是—对临界资源进行保护。


进程管理软件
1.中断管理软件: 用于进程切换
2.队列管理程序: 操作系统管理进程控制块的程序,核心程序包
3.进程控制程序: 控制进程状态转换
4.进程调度程序: 用于进程调度(内存向CPU调度时)
5.进程通信程序:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值