何为操作系统
1,操作系统是为了给应用程序提供方便,安全,一致的接口,操作系统是计算机硬件和应用程序之前的一层软件,为应用程序和工具提供支持。
2,操作系统控制计算机系统内部的事件,为处理器执行进程进行调度和分派,给进程分配资源,并响应用户程序的基本服务请求,因此,可以把操作系统理解为管理系统资源的实体。
3,操作系统可以理解为统一资源管理的软件,为进程的运行提供支持,为用户程序提供操作硬件资源的统一接口。
何为进程
1,进程是一组元素组成的实体,进程的两个基本元素是 “程序代码” 和 “与代码相关联的数据集”,处理器开始执行这个程序代码,并把这个执行实体称为“进程”。
2,进程可以理解为早期的作业,可以理解为早期卡片机时代的一条带有孔的作业纸条,处理器根据这条纸条上孔的位置处理信息,在多道批处理系统的时候,多条纸条在监控程序(操作系统)的调度下在处理器下运行处理。
何为进程控制块
进程执行过程中的表示,可以由一下元素表征:
1,标识符
与进程相关的唯一标志符,用来区分其他进程
2,状态
若进程正在执行,则进程处于运行态
3,优先级
4,程序计数器
程序中即将执行的下一条指令的地址
5,内存指针
代码或进程中相关数据的指针,以及与其他进程共享内存块的的指针
6,上下文数据
进程执行时处理器的寄存器中的数据
7,I/O状态信息
包括显式的IO请求,分配给进程的IO设备,和被进程使用的文件
8,记账信息
包括处理器时间总和,使用的时钟数总和,时间限制,记账号
以上信息表示了一个进程控制块的基本信息,进程控制块由操作系统创建,进程控制块包含了充分的信息,可以中断一个进程的执行,并用于后来恢复进程的执行。
因此,可以说进程由程序代码和相关数据以及进程控制块组成。
现代操作系统可以在任何时刻中断进程,也可以在任何时刻恢复进程的运行,并把进程控制块中的程序计数器和进程上下文数据加载到处理器寄存器中,进而执行这一进程。
Copy

进程状态
进程在内存中的布局:

两态进程调度:

进程创建:

进程终止:

五种状态模型:

1,运行态:进程正在执行
2,就绪态:进程做好了准备,只要有机会就开始执行
3,阻塞/等待态:进程在某些事件发生前不能执行,如I/O操作完成前
4,新建态:操作系统还未把它加入可执行进程组,往往是进程控制块已经创建,但是还未把进程相关代码,以及数据加载到内存中的新进程
5,退出态:操作系统从可执行进程组中释放进程,要么它自身退出,要么因其他原因被取消。
进程的状态转换:
1,空-创建
2,新建-就绪
3,就绪-运行
4,运行-退出
5,运行-就绪
6,运行-阻塞
7,阻塞-就绪
8,就绪-退出
9,阻塞-退出
阻塞队列排队模型优化:

挂起态:
思考这样一个问题,由于处理器速度远远高于I/O速度,因此进程表中的进程很可能都处于阻塞态,而且内存被阻塞态的进程全部占用,处理器没办法创建新的进程,进而导致处理器处于暂停状态,如何解决这一问题呢?
1,增大内存
既然内存不够用,很简单的方式就是增加内存,以供保存更多的进程,从成本角度考虑,显然这种不合理
2,可不可以把当前处于阻塞态的进程置换到磁盘中呢?
因此引出了进程挂起态这一状态,把当前处于内存中阻塞的进程合理的置换到磁盘中,单纯增加一个挂起态还是有一个问题,如何将挂起态进程置换回内存继续执行呢?显然现在没办法做到,因为没记录挂起态进程是否事件已经到达,可以执行这一状态,因此需要把挂起态拆分为:阻塞挂起态,就绪挂起态。
当内存中没有就绪态进程时,操作系统可以优先在就绪挂起态队列中从磁盘获取进程执行,或者创建新的进程执行。
3,挂起态进程状态切换
1,阻塞-阻塞/挂起
2,阻塞/挂起-就绪/挂起
3,就绪/挂起-就绪
4,就绪-就绪/挂起
4,其他值得考虑的状态切换
1,新建-就绪/挂起和新建-就绪
2,阻塞/挂起-阻塞
3,运行-就绪/挂起
4,各种状态-退出
挂起态进程的其他用途:
目前为止,挂起进程等加于不在内存中的进程,置换出内存就是为了释放内存空间,不再内存中的进程无论是否等待一个事件,都不能立即执行。

进程描述
操作系统控制计算机内部事件,为处理器执行进程进行调度和分派,给进程分配资源,并相应用户程序的基本服务请求。进程可以理解为早期的作业,操作系统理解为早期的监控程序。因此我们可以把操作系统理解为系统管理资源的实体。
操作系统的控制结构
操作系统控制进程并管理资源,需要哪些信息呢?
1,操作系统为了管理进程,资源,必须掌握每一个进程和资源的当前状态
操作系统普遍采用的方法是,操作系统构造并维护其管理的每个实体的信息表:
1,内存
2,文件
3,I/O
4,进程
对于进程来说,就是进程表。

进程控制结构
你想找一个人,就需要知道这个人在哪里?以及这个人长什么样?穿什么样的衣服?
操作系统要想控制进程需要知道进程位置,以及进程的属性(进程ID,进程状态)
进程位置:
要想理解进程的位置,就需要知道进程的物理表示是啥?
进程由一组程序,局部变量,全局变量,以及一些其他已经定义的数据单元,因此需要内存空间来保存这些程序和数据,另外还需要程序调用过程中参数传递的栈,以及与进程本身相关的一些属性(进程控制块)
程序,数据,栈和属性的集合称为进程映像。
1,那么进程的位置就是进程映像的位置,进程映像保存在内存块或者连续的内存块中,程序位于外存中(磁盘),因此操作系统管理进程时,需要进程映像一部分位于内存中(进程的属性),那在运行进程的时候,就必须将整个进程映像载入内存或至少载入虚存中,因此操作系统需要知道进程在磁盘中的位置,以及在内存中的位置。
2,另外当进程被挂起换出内存的时候,或者一部分在内存中时,操作系统维护的进程表需要知道每个进程映像每页的位置。
进程属性:进程控制块,具体进程控制块信息可以参考前面的图片
总结:
进程映像:描述了操作系统中进程整体信息
进程控制块:进程控制的核心,包括之后进程保护,进程调度,资源分配,中断,性能监控都离不开进程控制块,而且每种操作都涉及修改进程控制块,那么如果保护进程控制块呢?
进程控制-进程控制块的保护模式
处理器执行模式
1,用户模式
通常是用户程序在该模式下运行。
2,内核模式
操作系统在该模式下运行
使用两种模式的原因?
保护操作系统或者进程控制块,不受用户程序的干扰。
处理器如何知道他自己处于什么模式?
1,当发生系统调用,中断时,处理器状态寄存器(PSR)中的CPL(Current Privilege Level 当前权限级别)被设置为0(0-3,0是最高权限),执行模式被设置为内核模式
2,当从系统服务返回用户进程时,或者中断结束会执行一个IRT指令(Interrupt Return),CPL被自动设置为0,执行模式被设置为用户模式
3,模式的切换 PSR CPL IRT
进程创建
1,为新进程分配一个唯一的进程标识符
2,为进程分配空间
3,初始化进程控制块
4,设置正确的链接
5,创建或扩充其他数据结构
进程切换
区分进程切换与模式切换的区别:
进程切换:进程状态的切换
模式切换:用户模式/内核模式间的切换,但是进程并不一定切换
何时发生进程切换:
中断:
1,IO中断
2,时钟中断
3,内存失效
陷阱:
1,进程执行过程中出现不可恢复的错误
系统调用
何时发生模式切换:
系统调用:执行特权指令
中断:中断处理程序执行特权指令
中断模式切换:
当发生中断时,需要把当前进程的上下文保存到当前程序的进程控制块中:
保存处理器状态信息,包含程序计数器,其他处理寄存器和栈信息
进程切换步骤:
1,保存处理器状态信息,包含程序计数器和其他寄存器
2,更新正运行的进程控制块,修改状态,保存退出运行态状态和记账信息
3,该进程的进程控制块移动到对应队列(就绪,阻塞)
4,选择另一个进程执行
5,更行所选进程鹅进程控制块,以及进程状态修改为运行态
6,更新内存管理的数据结构
7,载入新进程的程序计数器和其他寄存器存储的值,将处理器上下文恢复为上次退出运行态时的上下文
文章转载自go技术沙龙,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




