操作系统的特征:
并发
- 宏观上是同时发生,微观上交替发生(操作系统和程序并发是一起诞生的)
共享
- 互斥共享方式(一个时间段内只允许一个进程访问资源)
- 同时共享方式(允许一个时间段内多个进程“同时”对他们进行访问)
同时往往是指宏观上
== 并发性和共享性互为存在条件 ==
虚拟技术
- 空分复用技术(如虚拟存储技术)
- 时分复用技术(如虚拟处理器)
只有系统拥有并发性,才能导致异步性。
发展与分类
手工操作阶段
缺点:人机速度导致资源利用率低。
批处理阶段
单道批处理系统
操作系统的雏形(监督程序)
优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升。
缺点:内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序,CPU有大量的时间是在空闲等待I/O完成。资源利用率很低。
多道批处理系统
每次往内存输入多道程序,在多道批处理系统阶段,操作系统才诞生了,并且引入了中断技术,由操作系统负责管理这些程序的运行,各个程序并发执行。
优点:多道程序并发执行,共享计算机资源,资源利用率大幅度提高,系统吞吐量增大。
缺点:没有人机交互功能(运行过程中),响应时间长。
分时操作系统:
计算机以时间片为单位轮流为各个用户/作业服务。
优点:解决了人机交互问题,允许多个用户同时使用一台计算机。
缺点:不能优先处理一些紧急任务。
实时操作系统:
优点:能够优先响应一些紧急任务,不需要时间片排队。
特点:及时性和可靠性。
分类:硬实时系统和软实时系统。
注* 硬实时系统指必须在绝对严格的规定时间内完成处理(如:导弹控制系统)
注* 软实时系统指能接受偶尔违反时间规定。
OS的运行机制和体系结构
什么是指令?
答:就是处理器(CPU)能识别、执行的最基本命令。指令又分为:特权指令和非特权指令。
CPU如何判断当前是否可以执行特权指令?
答:CPU有两种处理器(寄存器)状态:分为用户态(目态)和核心态(管态)。这时我们又把程序分为内核程序和应用程序。
大内核和微内核:
大内核:高性能,代码多,结构乱,难维护;
微内核:功能少,结构明确,易维护,性能低。
注* 特权指令指不允许用户程序使用
注* 目态指CPU只能执行非特权指令。
注* 管态指特权和非特权都可执行。
注* 内核程序指管理者,可执行特权和非特权指令,运行在核心态,实现操作系统内核功能的程序;应用程序又称用户程序,运行在用户态,只能执行非特权指令。
注* 内核包括时钟管理、中断管理、进程管理、原语等(设备驱动、CPU切换)。
中断和异常
中断机制诞生:
为了解决资源利用率低的问题,引入了中断机制,从而实现了并发执行(多道批处理阶段)
本质:发生中断就是意味着需要操作系统介入,开发管理工作。
中断特点:
1、发生时,CPU立即进入核心态
2、发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理。
3、不同的中断信号会进行不同的处理。
注* 中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权。
中断分类:
内中断(异常)和外中断。
注* 内中断指信号来源CPU内部,与当前执行的指令有关。外中断指信号来源于CPU外部,与当前执行的指令无关。
系统调用(特殊函数)
注*
1、陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,从而CPU进入核心态。
2、发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行。
3、陷入指令是唯一一个只能在用户态执行,而不可再核心态执行的指令。
进程(动态性)…
特征:
动态性、并发性、独立性、异步性、结构性
程序就是一个指令序列
为了方便操作系统管理,完成各程序并发执行,引入了进程、进程实体的概念。
程序段、数据段、PCB组成了进程实体(又称进程映像,简称进程),所谓创建、撤销进程就是创建、撤销PCB(它是进程存在的唯一标志)
注* 进程实体是静态的;进程是动态的,一般要指明才去这样区分。
PCB(进程控制块):
1、进程描述信息
2、进程控制和管理信息
3、资源分配清单
4、处理机相关信息
只要是进程管理的数据都是在里面。
进程的组织方式:
链接方式
索引方式
两个相似
进程的三种状态:
运行态:
占有CPU,并在CPU上运行。
就绪态:
已经具备运行条件,但由于没有空闲CPU,而暂时不能运行。
阻塞态(等待态):
因等待某一件事暂时不能运行。
另外两种状态:创建态和终止态。
进程状态转换:
运行态到阻塞态是主动行为,阻塞态到就绪态是被动行为。
注* 不能由阻塞态直接转换为运行态。也不能由就绪态直接转换为阻塞态。
如何实现进程控制?
用原语实现进程控制,原语的特点是执行期间不允许中断,这种操作叫做原子操作。原语采用是“关中断指令”和“开中断指令”。
无论哪个原语,要做的无非就是三件事:
1、更新PCB中的信息。
2、将PCB插入到合适的队列中。
3、分配 / 回收资源。
进程的创建包括创建原语和引起进程创建的事件:
创建原语:
申请空白PCB、为新进程分配所需资源、初始化PCB、将PCB插入就绪队列中
引起进程创建的事件:
用户登录、作业调度、提供服务、应用请求
进程的终止包括撤销原语和引起进程撤销的事件:
撤销原语:
从PCB集合中找到终止进程的PCB、若进程正在进行,立即剥夺CPU、终止子进程、删除PCB、将该进程拥有的所有资源归还父进程或操作系统
引起进程终止的事件:
正常结束、异常结束、外界干扰
进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立,为了保证安全,一个进程不能直接访问另一个进程的地址空间。
基于数据结构的共享是一种低级通信的方式,基于存储区的贡献是一种高级通信方式。
管道只能采用半双工通信。要实现双向同时通信,则需要设置两个管道。各进程互斥访问。当管道写满时,写程序被阻塞,管道变空,读程序(最多只有一个)被阻塞。只有写满才可以读,不能边写边读,反之亦然。
进程间的数据交换以格式化的消息。
一个管道只能实现半双工通信。
传统的进程只能串行执行,为了保证执行更多,我们引入了线程。每个进程包含多个线程(可以并发执行),执行流的最小单位和基本的CPU执行单元,属于“轻量级进程”。
引入线程后,进程只作为除CPU之外的系统资源的分配单元。而线程成为调度的基本单位。
同一线程的切换在进程中完成,不需要切换环境。
线程的属性:
是处理机调度的单位
多CPU计算机中,线程可占用多个CPU
每一个线程都有ID、线程控制块(TCB)
有就绪、阻塞、运行三状态
几乎不拥有系统资源
同一进程的不同线程间共享进程资源
线程间通信无需系统干扰
同一进程中的线程切换,不引起进程切换
切换同进程内的线程,系统开销很小
切换进程,系统开销大
用户级线程:
通过线程库实现,所有的线程管理工作都由应用程序负责(包括线程切换),线程切换可以在用户态下即可完成,无需操作系统干预。从用户视角看线程。
内核级线程:
由操作系统内核完成,切换需在核心态下完成。从操作系统内核视角看线程。
重点:只有内核级线程才是处理机分配的单位
处理机调度:
确定某种规则来决定处理任务的顺序。按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程的并发执行。
高级调度(作业调度):
频率低。建立相应的进程(建立PCB),获得竞争处理机的权利。是辅存(外存)和内存之间。作业调入时会建立相应的PCB,作业调出时才撤销PCB。调入时机需操作系统决定(所指)(外存 —》内存)面向作业。
中级调度(内存调度):
暂时调到外存等待的进程的状态为挂起状态,这时PCB不会一起调到外存,会常驻内存,被挂起的进程PCB会被放到挂起队列中。发送频率高于高级调度。(外存 — 》内存)面向进程。
挂起态包括就绪挂起、阻塞挂起。