一个程序的执行过程. 执行前需要将该程序放到内存中
进程 :
- 程序 : 就是一个指令序列
- 在不支持多道程序的计算机时期, 内存中只会有当前运行程序的数据, 括程序段和数据段, 程序的代码放在程序段内, 程序运行过程处理的数据放在数据段内(如变量);
- 引入多道程序技术之后, 内存中同时存放多道程序的代码和运算数据, 并且各个位置都不相同. 操作系统要怎么才能找到各程序的存放位置? 这时引入了PCB(进程控制块), 用来描述进程的各种信息(如进程代码存放位置), 操作系统会为每个运行的程序配置一个PCB
定义 : 进程是进程实体的运行过程, 是系统进行资源分配和调度的一个独立单位. 进程实体是静态的, 进程是动态的, 但一般不做区分
(进程实体的)组成 :
程序段 (程序代码)
数据段 (程序运行中的数据, 运算结果等)
PCB :进程的管理者(操作系统)所需的数据, 不保存程序本身的代码
一般我们所谓的创建进程, 实质上是创建进程实体中的PCB; 而撤销进程, 实质上就是撤销进程实体中的PCB; PCB是进程存在的唯一标志
进程描述信息
- 进程标识符PID (类似身份证号)
- 用户标识符UID (显示进程属于哪个用户)
进程控制和管理信息
- 进程当前状态
- 进程优先级
资源分配清单
- 程序段指针
- 数据段指针
- 键盘
- 鼠标
处理机相关信息
- 各种寄存器值
当进程切换时, 可能当前程序计算到一半, 中间结果的值可能是存放在寄存器中的, 为了让下一次接着进行计算,需要保存寄存器的值
组织方式(多个进程之间的)
- 链接方式 : 按照进程状态将PCB分为多个队列, 操作系统持有指向各个队列的指针
- 执行指针 : 指向当前处于运行态(执行态)的进程
- 就绪队列指针 : 指向当前处于就绪态的进程, 队列通常会把优先级高的进程放在队头
- 阻塞队列指针 : 指向当前处于阻塞态的进程
- 索引方式 : 根据进程状态的不同,建立几张索引表, 操作系统持有指向各个索引表的指针
- 执行指针
- 就绪表指针
- 阻塞表指针
特征
- 动态性 : 进程最基本的特征, 进程是程序的一次执行过程
- 并发性 : 内存中有多个进程实体, 各进程可并发执行
- 独立性 : 进程是能独立运行, 独立获得资源, 独立接受调度的基本单位
- 异步性 : 导致结果的不可预知
- 结构性 : 每个进程都会配置一个PCB. 结构上看, 进程是由程序段, 数据段, PCB组成
进程的状态
- 创建态
- 就绪态 : 阻塞态到就绪态不是进程自身能够控制的,是一种被动行为, 没有CPU执行权
- 运行态 : CPU和其他所需资源
- 阻塞态 : 运行态转阻塞态是进程的一种自身行为,进程用"系统调度"的方式申请某种系统资源, 或者请求等待某个事件发生, 没有CPU执行权和其它所需资源的控制权
- 终止态 : 运行任务结束或者遇到不可修复的错误
命令接口(允许用户直接使用)
程序接口(允许用户通过程序间接使用, 由一组系统调用组成)
也称 : 系统调用=广义指令 例如, user32.dll
系统调用可以认为是特殊的函数
用户进程向操作系统申请资源的使用, 操作系统提供系统调用的功能, 用户进程只能通过系统调用向操作系统发起请求, 由操作系统来协调管理
系统调用分类 : (都是只能在核心态下完成)
设备管理
文件管理
进程控制
进程控制就是要实现进程状态转换, 为了保证这个过程的安全, 使用原语
原语的特点就是执行期间不允许中断, 采用关中断和开中断指令, 原语的特权非常大
进程通信
- 共享存储 : 分配一个共享空间, 对共享空间的访问时互斥的
- 基于数据结构的共享
比如共享空间只能放一个长度为10的数组, 这种共享方式速度慢, 限制多, 是一种低级通信方式- 基于存储区的共享
在内存中画出一块共享储存区, 数据的形式, 存放位置都由进程控制,而不是操作系统. 相比之下, 这种共享方式速度更快, 是一种高级通信方式- 消息传递
- 直接通信方式
- 间接通信方式
- 管道通信
在内存中开辟一个大小固定的缓冲区, 半双工通信
双向同时通信需要设置两个管道
管道没有写满不允许读, 没有读空就不允许写
读进程最多只能有一个内存管理
系统调用与库函数
高级语言执行封装了系统调用的库函数时, 先在用户态执行陷入指令(内中断), 执行完成之后切换到核心态, 在核心态执行系统调用相应的服务程序, 完成后再切换回用户态
GUI: 图形用户界面
并发:
? 并发 : 同一时刻只执行一个程序, 但相互交替
? 并行 : 同一时刻执行多个程序
共享
虚拟
异步
OS的发展与分类
OS的运行机制与体系结构
运行机制
操作系统内核
时钟管理:实现计时功能
中断处理: 负责实现中断机制
中断机制的诞生: 为了解决利用率低的问题, 实现多道程序并发执行
? 本质: 发生中断就意味着需要操作系统介入,开展管理工作
用户态的状态下执行程序1, 计时部件发出中断信号, CPU切换到核心态,对中断进行处理, 执行权限交给操作系统, 操作系统经过一系列的管理操作后将CPU的执行权限交给用户进程, 切换回用户态
? 中断是用户态切换到核心态的唯一途径; 核心态到用户态则很容易
? 中断分为内中断(异常)和外中断(任务的完成), 区别在于信号的来源是否是CPU内部
外中断发生时,需要保护被中断的CPU进程,相当于存盘方便读取进度
? 陷入指令是唯一一个只可以在用户态下执行而不可以在核心态下执行的指令
原语(原子性: 一旦开始, 不可中断)
对系统资源进行管理
操作系统的体系结构
先来先服务FCFS : First Come First Serve
1.公平
2.按照到达的先后顺序进行服务(等待时间越久,越优先得到服务)
3.用于作业调度时,考虑哪个作业先到达后备序列;用于进程调度时,考虑的是哪个进程先到达就绪队列
4.非抢占式的算法
5.对长作业有利,对短作业不利(短作业:需要的服务时间短的作业)
6.不会导致饥饿(饥饿:某些作业或进程长时间等不到服务)
饥饿的理解 : 想象一下每个人都插你的队,来一个插一个,永远排不到你
排队买奶茶,假如你前面那个人要买20杯,店家还是先给他弄完20杯再给你弄,你的体验是相当糟糕的,相当于你被19个人插队
短作业优先SJF : Shortest Job First
1.每次选择当前已到达的且运行时间最短的作业/进程
2.默认是非抢占式
3.在所有进程都几乎同时到达的情况下,采用SJF调度算法的平均等待时间,平均周转时间最小
4.在不加前提下,抢占式的多作业优先算法的平均等待时间和平均周转时间最少
5.不公平;并且作业(或进程)的服务时间是由用户提供的,不一定真实
6.会导致饥饿;如果一直有短作业进入,那长作业会饿死.就相当于上面那买20杯奶茶的人可能得从它开始排队的时候等到所有人买完奶茶,才会轮到他
高响应比优先HRRN
1.要综合考虑作业(或进程)的等待时间和要求服务的时间
2.在每次调度时先计算各个作业(或进程)的响应比,选择响应比最高的作业(或进程)为其服务
响应比 = (等待时间 + 要求服务时间)/要求服务时间
疑问:为什么不直接用等待时间/要求服务时间呢?平白无故加个1
3.非抢占式
4.不会导致饥饿
时间片轮转RR: Round-Robin
1.只用于进程调度
2.按照先到先得给每个进程分配一个时间片(),进程没有在时间片结束前执行完,则剥夺处理机,将其重新放到就绪队列队尾重新排队
3.抢占式的算法,由时钟装置发出时钟中断来通知CPU时间片已到
4.时间片不能太大,否则退化成先来先服务算法;也不能太小,进程切换频繁
5.不会导致饥饿
优先级调度算法
1.调度时选择优先级最高的
2.既可以用于作业调度,也可以用于进程调度,甚至还会用于IO调度
3.抢占式和非抢占式:
非抢占式 : 只需在进程主动放弃处理机时进行调度即可
抢占式 : 需要在每次就绪队列发生变化时,检查是否会发生抢占行为
多级反馈队列调度算法
抢占
CPU利用率
$$
利用率 = 忙碌的时间/总时间
$$
系统吞吐量
$$
系统吞吐量 = 总共完成了多少道作业/总共花了多少时间
$$
周转时间
$$
周转时间 = 作业完成时间 - 作业提交时间 = 作业实际运行时间 + 作业等待时间 + IO操作时间;
$$
$$
平均周转时间 = 各作业周转时间之和/作业数;
$$
$$
带权周转时间 = 作业周转时间/作业实际运行时间;
$$
$$
平均带权周转时间 = 各作业带权周转时间之和/作业数;
$$
等待时间
进程(或作业)等待被服务的时间之和
平均等待时间 = 各个进程(或作业)等待时间的平均值
响应时间
从用户提交请求到首次产生响应所用的时间
一段时间内只允许一个进程使用的资源称为临界资源
注意 :
临界区时进程中访问临界资源的代码段;
进入区和退出区是负责实现互斥的代码段
临界区也可称为"临界段"
原则
类比排队上厕所
软件实现方法 p18
自己分析的关键在于分析哪些代码是进入区执行的, 让进入区代码进行交替执行会不会产生进程安全问题; 异步性的机制导致我们需要对进入区代码进行多种执行顺序的组合
单标志法 : 违背了空则让进的原则
双标志先检查法 : 异步性的属性会违背忙则等待的原则
双标志后检查法 : 先上锁再检查, 违背了"空闲让进"和"邮箱等待"的原则, 会产生"饥饿"现象
Peterson算法 : 只是没有遵循让权等待的原则; 类比上厕所说客套话
每个人都是先声明自己的意愿, 再客套一下, 每个人都要客套并且只客套一次
所以后客套的人遭殃
硬件实现方法
多对一模型 : 并发度不高, ,没有利用到多核的优势
一对一模型 : 并发度高, 但一个进程占用太多内核级线程, 开销太大
多对多模型 : 相当于综合两者, 属于二者的一个折中方案
不能进行进程调度与切换的情况
有的系统中, 只允许进程主动放弃处理机, 有的系统中, 进程可以主动放弃处理机也会强行被剥夺处理机
进程的等待时间和作业的等待时间
作业的等待时间不仅包括在内存中建立进程的等待时间, 还包括在外存中等待被内存调用的时间
内存 : 过山车前的等待; 外存 : 进入游乐园的等待; 一开始都在外存中排队买票, 即使进入了内存, 还是需要在内存中排队等待被赋予CPU的执行权
覆盖技术 :
解决 "程序大小超过物理内存总和" 的问题
增加了用户编程的负担, 退出了历史的舞台
交换技术 :
原文:https://www.cnblogs.com/yimeisuren/p/12640089.html