Chapter 10 操作系统
计算机的操作系统把硬件和软件紧密地结合在一起,它是其他软件依附的基础。
并允许我们编写与机器交互的程序。
10.1 操作系统的角色
应用软件(application software): 帮助我们解决现实世界问题的软件
系统软件(system software): 管理计算机系统并与硬件交互的程序
操作系统(operating system): 管理计算机资源并为系统交互提供界面的系统软件
操作系统负责管理硬件资源,它允许应用软件直接地或通过其他系统软件访问系统资源,提供人机交互界面。
A. 内存、进程和CPU管理
回顾C5 -- 正在执行的程序都驻留在内存,其中的指令以读取-解码-执行这种周期性方式被一个接一个处理
CPU需要调度内存管理和进程管理
进程(process): 程序执行过程中的动态表示法
多道程序设计(mulitprogramming): 同时在内存中驻留多个程序,由它们竞争CPU技术
内存管理(memory management): 了解主存载有多少个程序以及它们的位置的动作
进程管理(process management): 了解活动进程的信息的动作
CPU调度(CPU scheduling): 确定主存中的哪个进程可以访问CPU以便执行的动作
B. 批处理
可以在多道程序设计的环境中执行分批系统。这种情况下,操作员将一个分批中的多个作业
载入内存,这些作业将竞争CPU和其他共享资源的使用权。当作业具备了所需的资源后,将被调度用CPU。
现在术语"批"表示的是一个系统,这个系统中,程序和系统资源的协助与执行不需要用户和程序
之间的交互,现代操作系统的批处理概念,是允许用户把一系列OS命令定义为一个批文件,
以控制一个大文件或一组交互程序的处理。
尽管目前使用的大多数计算机都是交互式的,但有些作用仍然会自行批处理。
C. 分时操作
分时系统(timesharing): 多个交互用户同时共享CPU时间的系统
虚拟机(virtual machine):分时系统创建的每个用户都有专用机器的假想
主机(mainframe): 一个大型的多用户计算机,通常与早期的分时系统相关
哑终端(dumb terminal): 在早期的分时系统中用户用于访问主机的一套显示器和键盘
D. 其他OS要素
PC: 个人计算机、台式计算机、工作站
操作系统必须把计算机通常连接到网络这个因素考虑在内,OS需要支持通信。
操作系统要负责与各种各样的设备通信,通常在设备驱动程序的协助下完成。
(新硬件通常会附带适用的驱动程序)
操作系统需要支持实时系统,即给用户提供最少响应时间的系统。
实时系统(real-time system): 应用程序的特性决定了响应时间至关重要的系统
响应时间(response time): 收到信号和生成响应之间的延迟时间。
10.2 内存管理
因为多道程序设计环境,即在主存中同时驻留多个程序和其数据,因此操作系统需要:
1. 跟踪一个程序驻留在内存的什么位置以及如何驻留的
2. 把逻辑程序地址转换成实际的内存地址
逻辑地址(logical address): 对一个存储值的引用,是相对于它的程序的
物理地址(physical address): 主存储设备中的真实地址
地址联边(address binding): 逻辑地址和物理地址直接的映射
A. 单块内存管理
把主存分为两个部分,只有两个程序 -- 操作系统和要执行的应用程序。
一部分主存给操作系统,余下的分配给应用程序
单块内存管理(single contiguous memory management):
把应用程序载入一段连续的内存区域的内存管理方法
优点在于实现和管理都很简单,但却大大浪费内存空间和CPU时间。
B. 分区内存管理
使得能够在内存中驻留多个应用程序,共享空间和CPU时间
两种划分内存的方法:
1. 固定分区法(fixed-partition technique):
把内存分成特定数目的分区以载入程序的内存管理方法
主存将被划分为特定数目的分区。这些分区的大小不一定相同,
但再操作系统初始引导时它们的大小就固定了。作业将被载入
足够容纳它的分区。OS具有一个地址表,存放了每个分区的起始
地址和长度
2. 动态分区法(dynamic-partition technique)
根据容纳程序的需要对内存分区的内存管理方法
将根据程序的需要创建分区。初始时,内存被看作一个大的空白分区
操作系统会维护一个分区信息表。
//!----------------------------------------------------------//
两种方法地址编制基本一致
OS处理地址转换的方式有很多:
当CPU开始运行一个程序时,OS将把它的分区起始地址存储到基址
寄存器中。同样的,分区长度被存入界限寄存器中。当逻辑地址
被引用时,首先将它与基址寄存器中的值比较,确保该引用属于
分配给程序的内存空间。如果引用没有超出范围,那么逻辑地址
的值将被加到基址寄存器中,以生成物理地址。
基址寄存器(base register): 存放当前分区的起始地址的寄存器
界限寄存器(bounds register): 存放当前分区的长度的寄存器
对于一个新程序,给它分配分区的分区选择法:
a. 最先匹配: 即把第一个足够容纳程序的分区分配给它
b. 最佳匹配: 即把最小的能够容纳程序的分区分配给它
c. 最差匹配: 即把最大的能够容纳程序的分区分配给它
3. 页式内存管理(paged memory technique)
把进程划分为大小固定的页,载入内存时存储在帧中的内存管理方法
在这方法下,内存被划分为大小固定的存储块,叫做帧,进程被划分页
操作系统为内存中的每个进程维护一个独立的页映射表PMT,把每个页映射
到载入它的帧。 注! 页和帧都是从0开始编号,可以简化地址计算
地址被转换为两个值 -- 页编号和偏移量,逻辑地址表示: <页编号,偏移量>
生成物理地址,首先需要查看PMT,找到也所在的帧编号,再用帧的编号乘
帧的大小再加上偏移量即可。--便于解释,假设帧大小和页大小相同
帧(frame): 大小固定的一部分主存,用于存放进程页。
页(page) : 大小固定的一部分进程,存储在内存帧中。
页映射表(PMT,page map table): 操作系统用于记录页和帧之间的关系的表
*分页的优点在于不必再把进程存储在连续的内存空间中。这种分割进程的能力
把进程寻找一大块可用空间的问题转化成一个寻找足够多的小块内存。
请求分页(damand paging): 页式内存管理法的扩展,只有当页面被引用(请求)
时才会被载入内存。
页面交换(page swap): 把一个页面从二级存储设备载入内存通常会使另
一个页面从内存中删除
虚拟内存(virtual memory): 由于整个程序不必同时处于内存而造成的程序大小
没有限制的假像
系统颠簸(thrashing): 频繁的页面交换造成的低效处理
10.3 进程管理
操作系统必须管理的另一个重要资源是每个进程使用的CPU时间
A. 进程状态(process state)
在操作系统的管理下,进程会经历几种状态:
即进入系统,准备执行,执行,等待资源以及执行结束
创建阶段: 创建一个新的进程
准备就绪状态: 进程没有任何执行障碍,只是等待使用CPU的机会
运行状态: 当前CPU执行的进程,它的指令将按照读取 - 执行周期被处理
等待状态: 进程在等待除CPU以外的资源
终止状态: 进程已经完成它的执行,不再是活动进程
B. 进程控制块(PCB,process control block)
操作系统管理进程信息使用的数据结构
上下文切换(context switch): 当一个进程移出CPU,另一个进程取代它时发生的寄存器信息交换
10.4 CPU调度
CPU调度,就是确定把哪个处于准备就绪状态的进程移入运行状态,即觉得CPU给哪个进程
非抢先调度(nonpreemptive scheduling): 当当前执行的进程自愿放弃了CPU时发生的CPU调度
抢先调度(preemptive scheduing): 当操作系统决定照顾另一个进程,抢占当前执行进程的
CPU资源时发生的CPU调度
周转周期(turnaround time): 从进程进入准备就绪状态到它完成之间的时间间隔,
是评估CPU调度算法的标准之一,平均周转周期越小越好
A. 先到先服务(FCFS)
进程按照它们到达准备就绪状态的顺序转移到CPU,是非抢先的。
B. 最短作业有限(SJN)
该算法查看所有处于准备就绪状态的进程,分派一个具有最短服务时间的,是非抢先的
C. 循环调度法
将处理时间平均分配给所有准备就绪的进程。该算法将建立单独是时间片(时间量子)
即在每个进程被抢占并返回准备就绪状态之前收到的时间量,被抢占的进程,最终
会得到其他的CPU时间片。这个过程持续到进程得到了所需的全部时间从而终止
是抢先的算法。时间片到期,进程就会被强制移出CPU,即从运行变为准备就绪状态
它是应用最广泛的调度算法,一般支持所有作业,被认为是最公平的算法。