计算机系统概述
概念
操作系统是指控制和管理整个计算机系统的硬件和软件资源,合理地组织、调度计算机的工作与资源的分配,进而为用户和其他软件提供方便接口与环境的程序集合。
特征
- 并发
两个或多个事件在同一时间间隔内发生 - 共享
互斥共享方式
同时访问方式 - 虚拟
把一个物理上的实体变成若干逻辑上的对应物 - 异步
进程的执行是走走停停的,以不可预知的速度向前推进
目标和功能
- 计算机系统资源的管理者
处理机管理
存储器管理
文件管理
设备管理 - 为用户与计算机硬件系统之间的接口
命令接口(联机控制方式,脱机控制方式)
程序接口(系统调用,广义指令) - 扩充机器
额外知识
计算机开机后,操作系统最终被加载到
R
A
M
RAM
RAM
BIOS(基本输入输出系统)
RAM(随机存储存储器)
ROM(只读存储器)
库函数是高级语言中提供的与系统调用对应的函数(也有些库函数与系统调用无关),目的是隐藏“访管”指令的细节,使系统调用更为方便、抽象。库函数属于用户程序而非系统调用,是系统调用的上层。
陷入指令不是特权指令
中断处理程序是内核程序,需要运行在内核态
发出系统调用请求是在用户态,而对系统调用的相应处理是在核心态下进行
访管指令是在用户态下进行的,不可能是特权指令
由用户态向核心态的转换是由硬件完成的
进程管理
概念
进程映像:程序段、相关数据段和PCB
PCB是进程存在的唯一标志
进程是系统进行资源分配和调度的一个独立单位
进程5状态
就绪->进行:获得处理机资源
运行->就绪:时间片用完或被剥夺
运行->阻塞:请求资源或等待某一事件的发生(主动)
阻塞->就绪:等待事件到来(被动)
进程通信
共享存储
存在一块可直接访问的共享空间
消息传递
直接通信方式
间接通信方式
管道通信
pipe文件
线程
一个基本的CPU执行单位,程序执行流的最小单元,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,处理机的分配单位
同一个系统的进程可以由系统调用的方法被不同的进程多次使用
处理机调度
作业调度
中级调度
进程调度
不能进行进程调度与切换的情况
处理中断的过程
在操作系统内核程序临界区(但是进程处于临界区时是可以进行处理及调度的)
其他需要完全屏蔽中断的原子操作过程中
调度的基本准则
CPU利用率
系统吞吐量:单位时间内CPU完成任务的数量
周转时间:从提交到完成所经历的时间
带权周转时间:作业周转时间与作业实际运行时间的比值
等待时间:进程是建立后等待被服务的时间之和,作业是不仅考虑上面,还要考虑在外存后备队列中等待的时间,等于周转时间-运行时间-I/O操作的时间
响应时间:用户提交请求到系统首次产生响应所用的时间
调度算法
先来先服务(FCFS)
对长作业有利
有利于CPU繁忙型作业
短作业优先(SJF)
导致长作业饥饿
完全未考虑作业的紧迫程度
用户可能会有意或无意缩短作业的估计运行时间
平均等待时间、平均周转时间最少
优先级调度算法
系统进程>用户进程
交互型进程>非交互型进程
I/O进程>计算型进程
高响应比优先调度算法
相应比 = (等待时间 + 要求服务时间) / 要求服务时间
时间片轮转调度算法
多级反馈队列调度算法
总结
对于这种调度算法之类,可以画出甘特图,纵坐标既可以是进程,也可以是响应的物理设备,灵活应变
进程同步
临界资源
进入区,检查是否可以进入临界区,能进入,设置标志
临界区,访问临界资源的代码
退出区,将正在访问临界区的标志清除
剩余区,代码区的其余部分
互斥
空闲让进:临界区空闲,允许一个请求进入临界区的进程立即进入临界区
忙则等待:已有进程进入临界区时,其他试图进入临界区的进程必须等待
有限等待:对请求访问的进程,应保证能在有限时间内进入临界区
让权等待:当进程不能进入临界区时,立即释放处理器,防止忙等待
实现临界区互斥的基本方法
软件实现方法
算法一:单标志法(检查自己,谦让对方)
利用turn变量来标志允许进入临界区的进程编号,违背空闲让进
算法二:双标志法(先检查对方,标志自己)
flag[i],违背忙则等待
算法三:双标志后检查法(自己想进,谦让对方)
导致饥饿
算法四:Peterson’s Algorithm(自己想进,谦让对方)
flag数组+turn变量
仍不符合让权等待原则
硬件实现方法
中断屏蔽方法
硬件指令方法
信号量
整型信号量
记录型信号量
管程
代表共享资源的数据结构,以及由对该共享数据结构实时操作的一组过程所组成的资源管理程序,称为管程
组成:
- 管程的名称
- 局部于管程内部的共享结构数据说明
- 对该数据结构进行操作的一组过程
- 对局部于管程内部的共享数据设置初始值的语句
管程把对共享资源的操作封装起来
每次仅允许一个进程进入管程,从而实现进程互斥。
条件变量
x.wait()
x.signal
生产者-消费者问题
读者-写者问题
哲学家进餐问题
吸烟者问题
死锁
死锁:多个进程竞争资源而造成的一种僵局,若无外力作用,这些进程无法向前推进。
饥饿:长期得不到想要的资源,某进程无法向前推进,可能只有一个发生饥饿
死循环:某进程执行过程中一直跳不出某个循环的现象
死锁产生原因
- 系统资源的竞争
- 进程推进顺序非法
- 死锁产生的必要条件
互斥条件
不剥夺条件
请求并保持条件
循环等待条件
死锁的处理策略
死锁预防
破坏四条件
避免死锁
银行家算法
算出需求矩阵
发出request[j]
判request[i,j]<=need[i,j]
判request[i,j]<=available[j]
分配过去
安全性检测
死锁的检测及解除
死锁解除
资源剥夺法
撤销进程法
进程回退法
内存管理
内存管理的功能
内存空间的分配与回收
地址转换
内存空间的扩充
存储保护
内存装入模块在装入内存时的三种方式
绝对装入
若知道程序将驻留在内存中的某个位置,则编译程序将产生绝对地址的目标代码
可重定位装入
必须给它分配要求的全部内存空间,若没有足够的内存,则不能装入该作业。
动态运行时装入
可以将程序分配到不连续的存储区中
内存保护
先比较界地址寄存器,再加上重定位寄存器
覆盖与交换
覆盖用于同一个进程或程序中,交换技术在不同进程之间进行
PCB常驻内存,不会被换出内存
连续分配管理方式
- 单一连续分配
无外部碎片,有内部碎片,存储器的利用率极低 - 固定分区分配
有内部碎片,无外部碎片 - 动态分区分配
首次适应算法
最佳适应算法
最坏适应算法
邻近适应算法
但这三种在主存中都是连续存放的