进程的描述与控制(二)

七、操作系统如何管理进程所用资源

1.操作系统中用于管理控制的数据结构

在这里插入图片描述
图注释:单处理器 P1占用处理器 虚线表示请求 实线表示占用

(计算机的启动过程实际上就是把操作系统装到内存去,操作系统检测,检测完成后,记录进程的相关情况。)
在这里插入图片描述
记录信息:
1.进程(现在分到了哪些资源,运行当中生成了哪些数据,还要用哪些资源)和资源(资源有没有分出去,分给谁了)的当前状态

2.对所有的进程和资源要构成一些表,表与表之间关联:

Memory TablesI/O Tables
记载内存的分配情况设备的状态是空闲可用的还是已经分配的
记录外存分配情况I/O操作状态
访问共享内存区的保护属性I/O传输时的源和目的地
管理虚拟存储需要的信息
File TablesProcess Tables
有哪些文件进程的位置(PCB的位置、程序的位置、数据地位置)
文件在外存的位置管理进程的一些属性(进程ID、进程状态、内存中的位置)
文件的当前状态
文件属性

进程的位置

1)进程包含一组程序集:
局部和全局变量的数据位置
常量
堆栈(先进后出)
2)PCB:进程属性的集合
3)进程映象:(把一个进程逻辑上的所有信息合起来叫进程映像)
用户数据
用户程序
存放系统及过程调用地址、参数
OS感知进程、控制进程的数据结构
注:进程映像也称进程图像,是进程执行的上下文环境。

2.进程控制块(PCB)

简称PCB:是OS控制和管理进程时所用的基本数据结构

作用:系统根据PCB而感知相关进程的存在。
1)作为独立运行基本单位的标识。PCB是相关进程存在于系统中的唯一标志,系统根据PCB而感知相关进程的存在。
2)能实现间断性运行方式
3)提供进程管理所需信息
4)提供进程调度所需信息。(只有处于就绪状态的进程才能被调度执行
5)实现与其他进程的同步与通信

内容:通常情况下,PCB包含Identifiers(标识)、状态、控制、指针等多种信息。
1)进程标识:
进程ID、父进程ID、用户ID
2)处理器的状态信息
用户可见寄存器
控制和状态寄存器(程序计数器条件代码寄存器、状态信息 )
堆栈指针(存储过程、系统调用的参数和地址)
3)调度和状态信息(进程的当前状态、优先级、与调度相关的其他信息)
事件
数据关系
进程之间的通信
内存管理信息(内存如何划分)
资源利用关系

将以上这些方方面面的信息抽象出来,就是一个进程映像

在这里插入图片描述

八、操作系统内核的功能

通常将一些与硬件紧密相关的模块(如中断处理程序等)、各种常用设备的驱动程序以及运行频率较高的模块(如时钟管理、进程调度和许多模块所公用的一些基本操作),都安排在紧靠硬件的软件层次中,将它们常驻内存,常被称为的OS内核
目的:一是便于对这些软件进行保护,防止遭受其他应用程序的破坏;二是可以提高OS的运行效率。

为了防止OS本身及关键数据(如PCB等)遭受到应用程序有意或无意的破坏,通常也将处理机的执行状态分成系统态和用户态两种:
①系统态:又称为管态,也称为内核态。它具有较高的特权,能执行一切指令,访问所有寄存器和存储区,传统的OS都在系统态运行。
②用户态:又称为目态。它是具有较低特权的执行状态,仅能执行规定的指令,访问指定的寄存器和存储区。
一般情况下,应用程序只能在用户态运行,不能去执行OS指令及访问OS区域,这样可以防止应用程序对OS的破坏。

1.资源管理功能
进程管理:进程创建和中止、调度、状态转换、同步和通信、管理PCB
内存管理:为进程分配地址空间、对换、段/页管理
设备管理:缓存管理、为进程分配I/O通道和设备

2.支撑功能
中断处理:多道程序系统必须基于中断
时钟管理:时钟计时
原语:原语与一般程序的区别:它的执行不可中断
统计:统计资源的使用情况
监测:监测系统的运行状态,监测系统的负载情况

九、原语

操作系统能提供的原语:

1.进程切换
什么时候会切换进程?

a. 时钟中断(time out)(执行到最大时间片的长度)
b. I/O中断(程序中执行一个I/O语句,这时候要中断当前进程的执行,调度新的进程执行)
c. 存储访问失效(主要指虚拟存储里面):当访问一个进程时,它的数据不在内存,此时,中断这个进程的执行,装入数据,从阻塞变为就绪后,才可以重新调度
d. 陷阱:发生错误可能会导致进程退出
e. 管理程序调入:打开文件

进程切换时的过程

a. 保存处理器的上下文(保存现场),包括程序计数器和其他寄存器
b. 更新当前进程的PCB
c. 将PCB移动到相应的队列(ready或blocked)
d. 选另外一个进程来执行
e. 更新当前选中的进程的PCB
f. 更新内存管理的数据
g. 恢复被选中进程的执行现场(把PCB里相应的数据读到相应的寄存器里面)

进程切换和模式切换的区别:

进程切换:是作用于进程之间 的一种操作。当分派程序收回当前进程的CPU并准备把它分派给某个就绪进程时,该操作将被引用。
模式切换:是进程内部 所引用的一种操作。从用户态转到系统态,又从系统态返回回去。
进程切换的时候一定有模式切换,但模式切换不一定由进程切换
:调度程序是系统的,进程切换要调度程序;中断在系统态,进程切换一定要中断。

2.进程的创建与终止
什么时候会创建进程?

a. 新用户注册
b. 作业调度
c. 提供一些服务,例如:打印
d. 一个进程创建另一个进程:父进程、子进程

creat()原语,步骤

1.为进程分配一个唯一标识号ID:主进程表中增加一个新的表项
2.为进程分配空间:用户地址空间、用户栈空间、PCB空间。若共享已有空间,则应建立
相应的链接。
3.初始化PCB:进程标识、处理及状态信息、进程状态
4.建立链接:若调度队列是链表,则将新进程插入到就绪或(就绪、挂起)链表
5.建立或扩展其他数据结构

什么时候会终止进程?

正常结束
超时终止,执行事件超过预计时间,批作业处理过程中遇到一个终止指令Halt
内存严重不足,无法为进程分配所需的内存空间
越界访问
企图使用未经允许用的数据,或操作方式错
计算错,如除零,或企图存储硬件允许的最大数
超时等待某事件的发生
企图执行不存在的指令或特权指令
数据类型不符,或未初始化

destroy()原语,步骤

1.根据被终止进程的标识符ID,找到其PCB,读出该进程的状态;
2.若该进程为执行状态,则终止其执行,调度新进程执行;
3.若该进程有子孙进程,则立即终止其所有子孙进程
4.将该进程的全部资源,或归还给其父进程,或归还给系统
5.将被终止进程(的PCB)从所在的队列中移出,等待其它程序来搜集信息

注意:
进程被终止之后,进程并不是彻底消失,还在系统中。只不过处于“僵死状态”。

3.进程的阻塞与唤醒

阻塞的原因 :

请求系统服务
启动某种操作,如I/0
新数据尚未到达
无新工作可做

阻塞原语block():当出现阻塞事件,进程调用阻塞原语将自己阻塞。状态变为“阻塞状态”,并进入相应事件的阻塞队列

唤醒原语wakeup():当阻塞进程期待的事件发生,有关进程调用唤醒原语,将等待该事件的进程唤醒。状态变为Ready,插入就绪队列

有阻塞就必有唤醒

4.进程的挂起与激活
挂起原语suspend():当出现挂起事件,系统利用挂起原语将指定进程或阻塞状态进程挂起。进程从内存换到外存,状态改变:Ready->Ready,Suspend;Blocked->Blocked,Suspend,插入相应队列

激活原语active():当激活事件发生,系统利用激活原语将指定进程激活。进程从外存换入到内存,状态改变:Ready,Suspend->Ready;Blocked,Suspend->Blocked,插入相应队列

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值