第一章 操作系统概述
- 操作系统的作用:1)控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;2)提供给用户和其他软件方便的接口和环境;3)实现了对计算机资源的抽象,是计算机系统中最基本的系统软件,是最接近硬件的一层软件
- 计算机系统中的资源:可分为4类:处理机、存储器、I/O设备和信息(数据和程序)。OS正是对这4类资源进行有效的管理
- 处理机管理负责处理机的分配与控制
- 存储器管理负责内存的分配与回收
- I/O设备管理负责I/O设备的分配(回收)与操纵
- 文件管理负责文件的存取、共享与保护等
- 错误说法:操作系统是对硬件进行管理的软件:
对于一个完全无软件的计算机系统(即裸机),对用户提供的只有硬件接口。为了方便使用I/O设备,人们在裸机上覆盖了一层I/O设备管理软件(I/O软件),将I/O设备抽象为数据结构以及I/O操作命令(如read, write)。将覆盖了这种软件的I/O设备称为扩充机器或虚拟器。
同时,为了方便用户使用文件系统,又可在第一层软件(I/O软件)之上再覆盖一层用于管理文件的软件,由它来实现对文件操作的细节,并向上提供一组实现对文件进行存取操作的数据结构及命令。用户可用该软件提供的数据结构及命令来对文件进行存取。此时用户看到的是一台功能更强、使用更方便的虚拟器。
因此文件管理软件实现了对硬件资源操作的第二个层次的抽象。如果在文件爱你管理软件上再覆盖一层面向用户的窗口软件,那么用户便可在窗口环境下方便地使用计算机,从而形成一台功能更强的虚机器。
因此,OS是铺设在计算机硬件上的多层软件的集合,不仅增强了系统的功能,还隐藏了对硬件操作的具体细节,实现了对计算机硬件操作的多个层次的抽象模型。一个硬件不仅可以在低层加以抽象,还可在高层对该资源低层已抽象的模型进行再次抽象,从而形成更高层的抽象模型。抽象层次越高,抽象接口所提供的功能就越强,用户使用起来就越方便 - 操作系统向用户提供的接口:有两种
- 命令接口:用户用这些操作命令来组织和控制作业的执行
- 联机命令接口:交互性
- 脱机命令接口:批处理命令接口
- 程序接口:编程人员使用它们来请求操作系统服务。由系统调用(广义指令)组成
- 命令接口:用户用这些操作命令来组织和控制作业的执行
- 操作系统的发展
- 未配置操作系统:
- 人工操作方式:用户将(有程序和数据的)纸带装入纸带输入机,纸带输入机将纸带上的程序和数据输入计算机,计算机运行程序,运行完毕后由用户取走计算结果,然后下一个用户。
- 脱机I/O方式:先将(有程序和数据的)纸带装入纸带输入机,在一台外围机的控制下,把纸带上的程序和数据输入磁带。当CPU需要这些程序和数据时,再从磁带上将它们高速调入内存。当CPU需要输出时,可先由CPU把数据直接从内存高速送到磁带上,然后在另一台外围机的控制下,将磁带上的结果通过相应的输出设备输出。
- “脱机”:由于程序和数据的输入和输出都是在外围机的控制下完成的,即都是脱离主机的情况下完成的,故称为脱机I/O方式
- 减少了CPU的空闲时间:装带、卸带以及将输入从低速I/O设备送到高速磁带上(或反之)的操作,都是在脱机情况下由外围机完成的,并不占用主机时间,因此有效减少了CPU的空闲时间
- 提高I/O速度:当CPU在运行中需要输入数据时,是从高速磁带上将数据输入的
- “脱机”:由于程序和数据的输入和输出都是在外围机的控制下完成的,即都是脱离主机的情况下完成的,故称为脱机I/O方式
- 单道批处理系统:先把一批作业以脱机I/O方式输入磁带,并在系统中配上监督程序。在其控制下,这批作业能一个接一个被连续处理。
- 处理过程:先由监督程序将磁带上的第一个作业装入内存,并把运行控制权交给改作业;当该作业处理完成时,又把运行控制权交还给监督程序,再由监督程序把磁带上的第二个作业调入内存。直至磁带上所有作业全部完成。
- 名称解读:由于系统对作业的处理是成批进行的,但在内存中始终只有一道作业,所以称为单道批处理系统
- 缺点:由于内存中仅有一道程序,系统中的资源得不到充分利用。如当程序发出I/O请求后,CPU便会处于等待状态,并且必须在该程序I/O完成后才能继续运行
- 多道批处理系统:用户所提交的作业首先被放在外存上,并排成一个队列,称为“后备队列”。然后由作业调度程序按一定的算法从后备队列中选择若干个作业调入内存,使他们共享CPU和系统中的各种资源。
- 优点:
- 资源利用率高:能使多道程序交替运行,以保证CPU一直处于忙碌状态。提高内存利用率、I/O设备利用率
- 系统吞吐量大:CPU和其他资源保持忙碌状态;仅当作业完成时或运行不下去时才进行切换,系统开销小
- 缺点:
- 平均周转时间长:由于作业要排队且依次进行处理,所以周转时间长
- 无交互能力:用户一旦把作业提交给系统,那么直至作业完成,用户都不能与自己的作业进行交互,这对用户修改和调试程序不方便。批处理系统的主要缺点就是缺少交互性
- 需要考虑的问题:即产生了操作系统,对下面的问题进行有效处理,合理组织管理计算机硬件和软件资源,合理的对各类作业进行调度
- 争用处理机问题:既要满足各道程序运行的需要,又要能提高处理机的利用率
- 内存分配与保护问题:系统应能为每道程序分配必要的内存空间,以使它们各得其所,且不会因谋道程序出现异常而破坏其他程序
- I/O设备分配问题:应既能方便用户对设备的使用,又能提高设备利用率
- 文件的组织与管理问题:系统应能有效组织存放在系统中的大量程序和数据,以使它们既便于用户使用,又能保证数据安全性
- 作业管理问题:应能对系统中所有作业进行合理组织
- 用户与系统的接口问题:方便用户使用OS
- 优点:
- 分时系统:
- 功能:使用户能与自己的作业进行交互
- 共享主机:系统必须能提供多个终端同时给多个用户使用。每个用户都要像独占全机一样,不仅可以随时与计算机交互,而且不会感觉到其他用户的存在
- 当用户在自己的终端键入命令时,系统应能及时接收并处理该命令,然后返回结果
- 原理:
- 共享主机–多路卡:实现分时多路复用,即主机能以很快的速度周期性地扫描各个终端,并在每个终端停留一段时间(如30ms)以接收从终端发来的数据。每个终端配置一个缓冲区,用于暂存用户键入的命令或数据
- 及时处理:
- 作业直接进入内存(而非先放在外存,因为作业在磁盘上是不能运行的)
- 采用轮转运行的方式:未避免一个作业长期独占处理机,引入了时间片的概念。系统规定每个作业每次只能运行一个时间片,然后就暂停该作业的运行,并立即调度下一个作业运行。若在不长的时间内能使所有作业都执行一个时间片的时间,则可使每个用户都能及时地与自己的作业进行交互,从而可使用户的请求得到及时响应
- 特征:多路性、独立性(每个用户彼此互不干扰,好像独占主机一样)、及时性、交互性
- 功能:使用户能与自己的作业进行交互
- 实时系统:
- 实时任务的类型:
- 周期性实时任务和非周期性实时任务
- 硬实时任务和软实时任务:硬实时(HRT, hard real time)是系统必须满足任务对截止时间的要求,用于工业控制和武器控制;软实时(SRT, soft real time)任务也联系着一个截止时间,但并不严格,错过了也影响不会太大,如用于信息查询系统和多媒体系统中的实时任务
- 实时系统与分时系统特征的比较:
- 多路性:信息查询系统和分时系统是系统按分时原则为多个终端用户服务;实时控制系统是系统周期性地对多路现场信息进行采集,并对多个对象或多个执行机构进行控制
- 独立性:都表现为每个终端用户在与系统交互时彼此相互独立、互不干扰
- 及时性:实时系统是以控制对象所要求的截止时间来确定的,一般为秒级到毫秒级
- 交互性
- 可靠性:实时系统要求系统高度可靠,因此在实时系统中往往都采取了多级容错措施
- 实时任务的类型:
- 微机操作系统
- 未配置操作系统:
- 中断相关:
- 计算机通过硬件中断机制完成由用户态到核心态的转换。发生中断事件时(有可能是用户程序发出的系统调用),触发中断,硬件中断机制将计算机状态置为核心态
- 核心态程序只有在操作系统进入核心态后才可以执行
- 中断处理程序一般也在核心态执行,因此无法完成“转换成核心态”这一任务
- 用户程序也不可以将操作系统由用户态转换到核心态,因为如果这样,用户程序中就可以使用核心态指令,会威胁到计算机的安全
- 中断是现代操作系统正常运行的核心保障之一,所以关中断指令是权限非常大的指令,所以一定是特权指令
- 常见的特权指令:
- 对I/O设备操作的指令
- 访问程序状态的指令
- 存取特殊寄存器的指令
- 其他指令
- 操作系统体系结构汇总(大内核、微内核、分层、模块化、外核)
特性、思想 | 优点 | 缺点 | |
---|---|---|---|
分层结构 | 内核分多层,每层可单向调用更低一层提供的接口 | 1. 便于调试和验证,自底向上逐层调试验证;2. 易扩充和维护,各层之间调用接口清晰固定 | 1. 仅可调用相邻低层,难以合理定义各层的边界;2. 效率低,不可跨层调用,系统调用执行时间长 |
模块化 | 将内核划分为多个模块,各模块之间相互协作(内核=主模块1+可加载内核模块2) | 1. 模块之间逻辑清晰易于维护,确定模块间接口后即可多模块同时开发;2. 支持动态加载新的内核模块(如安装设备驱动程序、安装新的文件系统模块到内核),增强OS适应性;3. 任何模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高 | 1. 模块间接口定义未必合理实用;2. 模块间相互依赖,更难调试和验证 |
宏内核(大内核) | 所有的系统功能都放在内核里(大内核结构的OS通常也采用了“模块化”的设计思想 | 1. 性能高,内核内部各种功能都可以直接相互调用 | 1. 内核庞大功能复杂,难以维护;2. 大内核中某个功能模块出错,就可能导致整个系统崩溃 |
微内核 | 只把中断、原语、进程通信等最核心的功能放入内核。进程管理、文件管理、设备管理等功能以用户进程的形式运行在用户态 | 1. 内核小功能少、易于维护、内核可靠性高;2. 内核外的某个功能模块出错不会导致整个系统崩溃 | 1. 性能低,需要频繁地切换用户态/核心态;2. 用户态下的各功能模块不可以直接相互调用,只能通过内核的“消息传递”来间接通信 |
外核 | 内核负责进程调度、进程通信等功能,外核负责为用户进程分配未经抽象的硬件资源,且由外核负责保证资源使用安全 | 1. 外核可直接给用户进程分配“不虚拟、不抽象”的硬件资源,使用户进程可以更灵活的使用硬件资源;2. 减少了虚拟硬件资源的“映射层”,提升效率 | 1. 降低了系统的一致性;2. 使系统变得更复杂 |
主模块:只负责核心功能,如进程调度、内存管理 ↩︎
可加载内核模块:可以动态加载新模块到内核,而无需重新编译整个内 ↩︎