文章目录
操作系统OS(Operating System)
- 用户与计算机硬件之间的接口
- 控制和管理计算机资源的软件
OS是一个分配者,分配的主体就是任务,就是一切硬件资源都需要找OS申请之后才能被授权使用。
程序 & 进程
程序
程序 = 指令 + 数据
程序是静态的,一般表现为一个或者一组文件
进程
什么是进程?
进程是动态的。
1.用户角度
进程是程序的一次执行过程,是程序在“运行阶段”的视角主体
一个程序,可以进行多次执行(表现为多个进程), 也可以“同时”执行(多个进程同时存在)
2.操作系统角度
进程是OS进行资源分配的基本单位
- OS的职责:分配任务
- 资源:被OS管理的硬件资源、软件资源
- 分配的单位:分配的时候,最多考虑到这一层级
- 基本:允许有更高层次的单位,但最小到这里
换言之,同一个进程中的资源是共享的,不同进程间的资源的隔离的。
总结
进程是动态过程
绑定着一个程序
允许同时存在
OS内部资源分配的最小实体
操作系统的职责
- 进程管理模块:主要负责进程的调度工作,主持不同进程在CPU运行的时间划分。
- 内存管理模块:主持内存空间的分配工作——进程通信问题。
- 文件管理模块:把硬盘上的数据抽象成文件。
硬盘是最为主要的二级存储,重要的IO设备,OS进行硬盘上的数据协调
OS一般不会直接去管理硬盘的数据,一般委托文件系统进行抽象管理 - 网络管理模块
- 其他硬件——以文件驱动的形式进行管理——驱动管理
进程管理
进程管理 / 进程调度, 负责CPU的分配。
以时间线作为主轴去理解
以指令去执行
要做好进程调度我们面临的问题
1.进程控制块抽象(PCB)
Process Control Block
计算机内部要管理任何现实事物,都需要将其抽象成一组有关联的、互为一体的数据。
在Java中,我们可以通过类 / 对象来描述这一特征。
class PCB {
1.进程的唯一标识,pid
2.进程关联的程序信息
a.哪个用户启动的
b.进程工作目录
c.什么时候开始的,什么时候结束的
3.分配给该资源使用的各个资源
4.调度是用到的信息
}
这样,每一个PCB对象都代表着一个实实在在运行着的程序,即进程。
操作系统再通过这种数据结构,例如线性表、搜索树等将 PCB 对象组织起来,方便管理时进行增删改查的操作。
2.细化进程
通过对进程做状态划分,来区分处于不同情况下的进程状态
- 新建,进程处于正在创建中
- 就绪,进程已经获得了除CPU以外的所有所需资源,等待分配CPU资源
- 运行,进程的指令在CPU中运行着
- 阻塞,进程由于等待外部条件无法继续
- 结束,进程的所有指令执行结束,但PCB暂时保留,OS还需要做一些其他工作
3.如何选择进程上CPU
在就绪队列中,应该选择哪个进程上CPU?
需要保证公平性、要有消息、要让更紧急的任务先被处理、低成本
- 先来先服务
- 优先级划分(进程PCB中需要管理一个优先级属性)
- 短作业优先级
4.OS什么时候会介入进程调度
——选择一个新的进程,进行CPU分配
- 一个新的进程刚处于就绪状态时,当该进程优先级较高时——抢占式(实时)
- 运行状态的进程 -> 结束,一个进程结束了
- OS每隔一段时间,会调度一次:进程的时间片耗尽
- 进程主动放弃CPU:
运行 -> 阻塞
运行 -> 就绪
5.OS具体进程切换
通过上下文切换 —— 保护上一个进程的上下文 + 恢复下一个进程的上下文(Context)
上下文指的是:以PC寄存器所代表的一组寄存器中的值
保护上下文:把寄存器中的值保存在内存中的某个位置
恢复上下文:把内存中之前保存的值写入寄存器中
谢谢浏览