操作系统知识点整理

操作系统(OS; Operating System)

操作系统指控制和管理计算机系统的硬件和软件资源并合理组织和调度计算机的作业和资源分配的程序的集合是最基本的系统软件操作系统的主要目标为实现方便性有效性可扩充性和开放性

操作系统实现对计算机资源的抽象提供用户与计算机硬件系统间的接口其内核具有的两大功能如下资源管理功能和支撑功能资源管理功能指管理处理机存储器文件设备等计算机系统资源支撑功能的内容如下

  • 中断(Interrupt)中断分为由外部设备引起的外中断和来自CPU内部的内中断又称陷入(Trap)中断处理程序需要保存被中断进程的CPU环境并转入相应的设备处理程序还需要恢复CPU现场且这两个过程必须关中断
  • 时钟(Clock)内核中有大量的函数都是基于时间驱动的
  • 原语(Primitive)原语即由若干指令组成用于完成一定功能的原子操作

操作系统的主要功能如下进程管理存储器管理I/O管理文件管理

操作系统的基本特性如下

  • 并发(Concurrence)多个事件在同一时间间隔内发生对有限物理资源的强制性使用进程的引入实现并发执行极大提高资源利用率增加系统吞吐量
  • 共享(Sharing)系统中的资源可供内存中多个并发执行的进程共同使用又称资源复用共享的方式有互斥共享方式(临界资源等)和同时访问方式(磁盘设备磁盘文件等)
  • 虚拟(Virtual)通过某种技术将一物理实体变为若干逻辑对应物利用设备为某个用户服务的空闲转去服务其他用户以提高资源利用率如时分复用技术(虚拟处理机虚拟设备等)和空分复用技术(虚拟磁盘虚拟存储器等)
  • 异步(Asynchronism)进程推进的速度不可预知

其中并发和共享互为条件二者都是操作系统的最基本特性

操作系统的两种处理机状态如下

  • 内核态(Kernel Mode)运行操作系统程序操作硬件能访问所有的内存空间和对象其所占有的处理器是不允许被抢占的
  • 用户态(User Mode)运行用户程序进程所能访问的内存空间和对象受到限制其所处于占有的处理器是可被抢占的

通常用户态切换至内核态的途径有系统调用异常和中断等内核态切换至用户态可通过设置程序状态字(PSW; Program Status Word)的方式

未配置操作系统的计算机采用人工操作的方式对计算机进行操作用户独占计算机CPU等待人工操作计算机资源利用率严重降低即所谓人机矛盾后来引入脱机输入/输出(Off-Line I/O)方式即程序和数据的输入/输出是在脱离主机的情况下进行的减少了CPU的等待时间且提高了I/O速度

操作系统的发展历程可分为批处理系统分时系统实时系统网络和分布式系统等

图形用户界面(GUI; Graphical User Interface)可使用户基于各种输入设备操控图形对象而每种图形对象都对应一种计算机任务指令或现实世界对象等现在的计算机大部分都具有图形用户界面

批处理系统(Batch Processing System)

批处理系统可分为如下两类

  • 单道批处理系统(Simple Batch Processing System)解决人机矛盾和CPUI/O设备速度不匹配的矛盾但系统资源得不到充分的利用
  • 多道批处理系统(Multiprogramming Batch Processing System)资源利用率高系统吞吐量大但平均周转时间长且无交互能力

分时系统(Time-Sharing System)

分时系统使多个用户通过各自终端以共享使用一台计算机分时系统实现的关键问题如下及时接收措施如在系统中设置多路卡用缓冲区暂存命令及时处理措施如作业直接进入内存分短时间片轮转运行

实时系统(Real-Time System)

实时系统可及时响应外部事件在规定的时间内完成对该事件的处理并控制所有实时任务协调一致地运行实时系统的进程调度通常抢占式优先级高者优先

实时任务可分为如下两类允许失误的软实时系统(Soft Real-Time System)较为严格的硬实时系统(Hard Real-Time System)

进程管理(Process Management)

多任务处理操作系统的必要功能

进程(Process)

进程即系统进行资源分配和调度的独立单位进程的特征如下进程具有动态性即进程的实质是进程实体的执行过程有别于程序的静态性进程具有并发性即多个进程实体同存于内存中且能在一段时间内同时运行此外进程还具有独立性和异步性

进程的基本状态如下

  • 新生(New)
  • 就绪(Ready)分配到除CPU外的所有必要资源
  • 执行(Running)已获得CPU正在运行
  • 阻塞(Blocked)又称等待(Waiting)即等待某一事件而无法执行
  • 终结(Terminated)

进程控制块(PCB; Process Control Block)描述一个进程及其与其他进程和系统资源的关系是用于刻画一个进程在各个时期所处状态的数据结构进程控制块是进程存在于系统的唯一标识

进程控制块记载的内容如下进程标识符即由创建者提供的外部标识符和整数的内部标识符处理机状态包括通用寄存器(用于在中断时保存现场)程序计数器程序状态字和用户栈指令等进程调度信息进程控制信息

进程实体包含进程控制块程序段和数据段

进程控制是进程管理中最基本的功能一般由操作系统内核中的原语实现

进程控制的相关原语

进程控制的相关原语如下

  • 创建(Create)申请空白PCB并分配资源和初始化插入就绪队列
  • 终止(Destroy)检索PCB结束并置调度标志为真终止其子孙进程归还资源给父进程或系统最后将PCB从所在队列中移除
  • 阻塞(Block)由于I/O请求申请缓冲区失败等原因释放CPU阻塞的进程仍处于内存中
  • 唤醒(Wakeup)撤销阻塞状态
  • 挂起(Suspend)由于负荷调节的需要等原因释放CPU挂起的进程通过对换技术被换出
  • 激活(Active)撤销挂起状态

临界资源(Critical Resources)又称独占资源指一段时间内只允许一个进程访问的资源如某些物理设备(打印机磁带机等)以及栈变量等临界区(Critical Section)则是访问临界资源的代码片段

中断屏蔽(Interrupt Mask)或称关中断是当一个进程正在使用临界资源时防止其他进程再进入临界区访问的最简单方法中断屏蔽的缺点如下易被滥用长时间中断屏蔽将影响效率不适用于多处理机系统下对临界资源的互斥访问

进程间通信(IPC; Inter-Process Communication)即至少两个进程间传送数据或信号的一些技术或方法为协调进程间的相互制约关系引入进程同步(Process Synchronization)的概念即令并发执行的进程按一定规则共享系统资源使程序执行具有可再现性

主要的IPC方法如下文件(File)信号量(Semaphore)管道(Pipe)管程(Monitor)共享存储器系统(Shared-Memory System)消息传递系统(Message Passing System)其中信号量机制由戴克斯特拉提出是卓尔有效的进程同步工具包括如下部分

  • P(Proberen)P原语表示尝试即申请资源
  • V(Verhogen)V原语表示升高即释放资源

互斥锁(Mutex)是防止同时访问共享资源的程序对象用于实现对临界资源的独占式处理是特殊的二值型信号量可见互斥是同步的特殊情况

信号量机制的改进

计数信号量(Counting Semaphore)又称整型信号量使用s表示资源数目P原语的部分可用如下两段操作类比

1
2
while(s <= 0);
s--;

V原语的部分即与如下操作类似

1
s++;

此外可在计数信号量的基础上加入进程链表连结所有阻塞进程以实现记录此时P原语的部分类似如下操作

1
2
s->value--;
if(s->value < 0) block(s->list);

V原语的部分类似如下操作

1
2
s->value++;
if(s->value <= 0) wakeup(s->list);

二进制信号量(Binary Semaphore)又称与型信号量s的取值只有01即将进程在整个过程中需要的所有资源一次性分配

信号量集(Semaphore Set)的改进即多个信号量的集合且增设对资源的需求值和资源的分配下限

管程机制中使用条件变量(Conditional Variable)以区别不同的等待原因x为条件变量的记号x.wait()的形式将调用此原语的进程阻塞于x条件队列x.signal()即唤醒x中的队首进程

信号量机制和管程机制的对比

信号量机制和管程机制的对比如下

机制 描述 优点 缺点
信号量机制 分散式同步机制
共享变量信号量操作分散在
整个系统或各个进程中
高效且灵活 可读性差正确性不易保证
且不易修改
管程机制 集中式同步工具
共享变量及相关操作集中在
同一个模块中
可读性好正确性可保证
且易于修改
不甚灵活效率略低

经典的IPC问题及其基于信号量的解答如下

  • 生产者-消费者问题(Producer-Consumer Problem)又称有限缓冲问题(Bounded-Buffer Problem)描述共享固定大小缓冲区的两个进程在实际运行时的情况注意下述解答的头两行P()语句不能颠倒位置否则可能引起死锁

    1
    Semaphore empty = N, full = 0, mutex = 1;
    1
    2
    3
    4
    5
    P(empty);
    P(mutex);
    // 放入缓冲区
    V(mutex);
    V(full);
    1
    2
    3
    4
    5
    P(full);
    P(mutex);
    // 从缓冲区取出
    V(mutex);
    V(empty);
  • 读者-写者问题(Reader-Writer Problem)描述多个进程尝试访问同一个共享资源的情况下述是读者优先的解答此外独木桥问题是读者-写者问题的衍生可转换为两类读者的问题

    1
    2
    Semaphore mutex = 1, c_mutex = 1;
    int counter = 0;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    P(c_mutex);
    if(counter == 0) P(mutex);
    counter++;
    V(c_mutex);
    // 读数据对象
    P(c_mutex);
    counter--;
    if(counter == 0) V(mutex);
    V(c_mutex);
    1
    2
    3
    P(mutex);
    // 写数据对象
    V(mutex);
  • 睡眠理发师问题(Sleeping Barber Problem)戴克斯特拉提出其解决的关键是互斥锁

    1
    2
    3
    #define N 5 // 理发店的椅子数
    Semaphore mutex = 1, customer = 0, barber = 0;
    int waiting = 0;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    P(mutex);
    if(waiting < N) { // 有椅子
    waiting++;
    V(customer);
    V(mutex);
    P(barber); // 理发师是否空闲
    } else {
    V(mutex);
    }
    1
    2
    3
    4
    5
    P(customer); // 是否有顾客
    P(mutex);
    waiting--;
    V(barber);
    V(mutex);

线程(Thread)

线程是调度的最小单位会被频繁地调度和切换引入线程旨在减少程序并发执行时所付出的时空开销使得并发粒度更细并发性更好

C++11的线程可见此处

线程的实现方式如下

  • 内核支持线程(KST; Kernel Supported Thread)又称内核线程轻量级进程(LWP; Light Weight Process)
  • 用户级线程(ULT; User Level Thread)又称用户线程用户进程中的一个实体内核意识不到用户线程的存在

用户线程与内核线程的组合方式即多线程模型(Multithreading Model)的实现方式如下

  • 多对一模型(Many-to-One Model)将用户线程映射到一个内核线程若一个线程在访问内核时阻塞则整个进程都会阻塞
  • 一对一模型(One-to-One Model)将每一个用户线程映射到一个内核线程并发功能更好但创建一个用户线程就要创建一个相应的内核线程开销大
  • 多对多模型(Many-to-Many Model)将许多用户线程映射到同样数量或更少数量的内核线程若一个线程阻塞内核可调度至另一线程执行

调度(Scheduling)

调度即分配所需资源的方法进行调度工作的程序称调度器(Scheduler)

批处理系统环境中进程又称为作业(Job)一个比程序更广泛的概念包含程序数据和作业说明书分时系统环境中进程又称为任务(Task)批处理系统环境是以作业为基本单位由辅存调入内存的

处理机调度的层次即调度器的类型如下

  • 高级调度(High Level Scheduling)又称长程调度或作业调度决定辅存中的哪些作业调入内存主要用于多道批处理系统而分时实时系统中不设置
  • 低级调度(Low Level Scheduling)又称短程调度或进程调度决定就绪队列中的哪个进程获得处理机是最基本的一种调度操作系统必须配置
  • 中级调度(Intermediate Scheduling)又称内存调度将暂时不运行的进程挂起以提高内存利用率

处理机调度算法的共同目标如下资源利用率公平性即避免饥饿现象平衡性即使处理机和各种外设能经常忙碌策略强制执行

调度算法汇总

调度算法总结如下

  • 先来先服务(FCFS; First-Come First-Served)非抢占的调度方式系统开销最小有利于长作业和处理机繁忙的作业但响应时间可能很高不利于短作业和倾向I/O的进程
  • 短作业优先(SJF; Short Job First)非抢占的调度方式平均周转时间最短有利于短作业而不利于长作业但必须预知作业运行时间人机无法交互且未考虑作业紧迫程度
  • 最高响应比优先(HRRN/HRN; Highest Response Ratio Next)非抢占的调度方式其中响应比属动态优先权定义为响应时间和要求服务时间之比而响应时间为等待时间与要求服务时间之和HRRN可兼顾长短两种作业但每次调度必须计算响应比显然会增加系统开销
  • 时间片轮转(RR; Round Robin)是抢占的调度方式相对公平且短时间片有利于短作业但不能保证及时响应时间片轮转算法的关键是时间片长短的选择时间片太短将增加系统开销而时间片太长算法将退化为FCFS
  • 最高优先权优先(HPF; Highest Priority First)抢占的调度方式可使紧迫型作业能得到优先处理其中优先级可分为静态优先级和动态优先级两种类型
  • 多级反馈队列(Multilevel Feedback Queue)是抢占的调度方式有利于倾向I/O的进程且不必估计进程执行时间可满足终端型用户和长短批处理作业用户的需要

实时调度(Real Time Scheduling)使用的方法有最早截止时间优先(EDF; Earliest Deadline First)和最低松弛度优先(LLF; Least Laxity First)其中松弛度(Laxity)是任务紧急的程度定义如下

松弛度 必须完成时间 任务本身运行时间 当前时间

周转时间(TAT; Turn-Around Time)指从作业提交至作业完成的时间间隔平均周转时间(ATT; Average Turn-Around Time)常用于评估处理机调度算法的性能优劣

死锁(Deadlock)

两个或两个以上的进程因竞争彼此资源而造成的阻塞现象一组死锁的进程中每一进程都在等待只有其他进程才能引发的事件竞争不可抢占资源或可消耗资源进程推进顺序不当等都是产生死锁的原因

预防死锁需要破坏死锁的四个必要条件之一内容如下

  • 互斥(Mutual Exclusion)该条件无法破坏
  • 保持和请求(Hold and Wait)当一个进程在请求资源时不能持有不可抢占的资源
  • 不可抢占(No Preemption)当一个进程提出新的资源请求不能满足时必须释放已持有的所有资源
  • 循环等待(Circular Wait)对所有类型资源线性排序规定每个进程必须按序号顺序请求资源

对于破坏保持和请求的条件有如下两种协议一次申请运行所需的全部资源但会使资源严重浪费且进程经常发生饥饿现象允许一个进程只获取运行初期所需的资源便能够开始运行是对第一种协议的改进

对于破坏不可抢占的条件可规定当提出新的资源请求不能满足时必须释放已保持的所有资源

对于破坏循环等待的条件可对所有类型资源线性排序规定每个进程必须按序号顺序请求资源

银行家算法(Banker's Algorithm)是避免死锁的著名算法戴克斯特拉提出银行家在客户申请的贷款数量不超过自己拥有的最大值时都应尽量满足客户的需要在银行家算法中银行家就好比操作系统资金就是资源客户就相当于要申请资源的进程

安全状态(Safe State)指系统能按某种推进顺序为每个进程分配资源直至满足每个进程对资源的最大需求使每个进程都可顺利完成银行家算法在资源分配前进行判断若分配不会使系统处于不安全状态才进行资源分配

检测死锁利用死锁定理即一组进程为死锁的充分条件是当且仅当该组进程的资源分配图不可完全化简即不能使所有进程结点都孤立解除死锁的方式有剥夺资源和撤销资源分配的进程等

存储器管理(Memory Management)

对计算机内存资源的分配和使用的技术其功能如下内存空间的分配与回收逻辑地址到物理地址的转换内存空间的扩充即虚拟内存的应用存储保护即防止内存地址越界

程序的执行需要经过编译链接和装入等步骤其中装入(Loading)即将模块置于主存程序的装入可分为如下几种方式

  • 绝对装入(Absolute Loading)编译后即产生物理地址
  • 可重定位装入(Relocation Loading)即静态重定位地址变换在装入时一次完成
  • 动态运行时装入(Dynamic Run-Time Loading)即动态重定位增设重定位寄存器使地址变换在程序真正执行时才进行

程序的链接可分为如下几种方式

  • 静态链接(Static Linking)事先链接且不再拆开
  • 装入时动态链接(Load-Time Dynamic Linking)装入时链接
  • 运行时动态链接(Run-Time Dynamic Linking)将某些模块的链接推迟至程序执行时

连续分配方式汇总

连续分配方式总结如下

  • 单一分区(Single Partition)内存划分为系统区和用户区可使用后者全部空间是最简单的连续分配方式适用于单用户单任务的操作系统只有分配和回收两种操作易于管理但极易造成内存浪费
  • 固定分区(Fixed Partition)系统初启时将内存划分为若干分区分区大小可以各不相等可通过分区说明表实现易于实现且开销小但会产生内存碎片造成浪费且分区总数固定会限制并发执行的程序数目
  • 动态分区(Dynamic Partition)装入时建立分区根据作业需求分配大小可通过分区空闲表空闲分区链和请求表实现在其基础上引入紧凑技术即可移动内存中作业的位置将原来多个小分区拼接为大分区称为可重定位分区(Relocatable Partition)可重定位分区消除内存碎片提高内存利用率但提高了硬件成本紧凑时花费处理机时间

动态分区分配算法汇总

动态分区分配算法总结如下

  • 首次适应(FF; First Fit)空闲分区链按首地址递增的顺序组织释放存储区不改变空闲区在表中的位置且能保证高地址空间的空闲较大但低地址空间容易产生碎片进而降低主存空间利用率
  • 循环首次适应(NF; Next Fit)FF演变而来从上次分配的分区起查找可通过设置起始查询指针实现可使空闲区分配更均匀从而减少查询时的开销但会导致缺乏较大的空闲区
  • 最佳适应(BF; Best Fit)空闲分区链按容量递增的顺序组织不至于浪费较大的空闲区但分配后残余空闲区总是最小的因此会留下许多碎片
  • 最坏适应(WF; Worst Fit)空闲分区链按容量递减的顺序组织查询效率高分配后残余空闲区可能大且不会有很多碎片但会分割大的空闲区

离散分配方式有分页存储管理分段存储管理和段页式存储管理(先分段再分页各取所长)

(Page)

页是进程逻辑地址空间(Block)与之大小相同但是内存物理地址空间页内碎片即进程最后一页装不满一块形成的不可利用的碎片

页表(Page Table)是一种数据结构实现页号-物理块号的地址映射转换进行的场所成为地址变换机构系统为每一进程建立一个页表页表的长度和首地址存于PCB占用CPU的进程其页表必须驻于内存

有效访问时间(EAT; Efficient Access Time)指从发出访问请求至取出数据的时间计算式如下

其中为一次内存访问所需的时间

快表(TLB; Translation Lookaside Buffer)又称页表缓存或转译后备缓存CPU的一种缓存用于改进逻辑地址到物理地址的转译速度引入快表后有效访问时间的计算式如下

其中为一次内存访问所需的时间为查找快表的时间为命中率

页的总结如下页数是信息的物理单位分页是系统管理的需要页的大小固定且由系统决定分页的作业地址空间是一维的只需一个记忆符即可表示一个地址分页有内部碎片无外部碎片分页不易实现共享和动态链接

(Segment)

段是作业按逻辑关系的划分段可有数据段(DS; Data Segment)和代码段(CS; Code Segment)

段的总结如下段是信息的逻辑单位分段是用户的需要段的长度不固定且取决于程序分段的作业地址空间是二维的需要给出段名和段内地址分段有外部碎片无内部碎片分段容易实现共享和动态链接

虚拟内存(Virtual Memory)

虚拟内存只适用于离散分配技术属于高速缓存技术基于局部性原理装入时只需装入一部分就可以启动执行时当访问的信息不在内存则由操作系统将其调入内存将暂时不用的程序和数据换出至外存对换(Swapping)对换根据执行的基本单位不同可有如下类型进程

文件区占磁盘空间的大部分访问频率低采用离散分配方式而对换区占磁盘空间的小部分操作频率高采用连续分配方式

虚拟内存的三大特征为多次行对换性和虚拟性多次性是最重要的特征多次性和对换性建立于离散分配的基础上多次性和虚拟性则以对换性为基础

页面置换算法汇总

页面置换算法总结如下

  • 最佳置换算法(OPT; Optimal)可保证最低的缺页率但需要预知调入页是无法实现的算法但可作为衡量优劣的标准
  • 先进先出(FIFO; First In First Out)可通过总指向内存中最早调入页面的替换指针实现会产生贝莱迪异常(Belady's Anomaly)即物理页数增多反而缺页率上升的现象原因是FIFO的置换特征与进程访问内存的动态特征是矛盾的
  • 最近最久未使用(LRU; Least Recently Used)可通过位移寄存器实现访问物理块时将对应寄存器最高位置1每隔一定时间右移淘汰最长时间未使用的页面即淘汰位移寄存器中值最小的
  • 最少使用(NFU/LFU; Not/Least Frequently Used)同样通过位移寄存器实现但淘汰一定时间内是用最少的页面即淘汰位移寄存器中置1位最少的
  • 时计(Clock)又称最近未使用(NRU; Not Recently Used)算法LRUFIFO的折衷通过判断访问位决定淘汰页面访问位为1时置0访问位为0时淘汰将各页面的访问位连结为环形链表重复修改后移而实现改进型的时计算法考虑修改位以尽量淘汰未被修改的页面

抖动(Thrashing)指从内存中换出某页又请求换入改页预防抖动的方式如下采用局部置换策略将工作集(在时间间隔内进程要访问的页面的集合)算法融入处理机调度利用准则调节缺页率(为缺页之间的平均时间为平均缺页服务时间)选择暂停优先级最低的进程

I/O管理(I/O Management)

I/O设备的控制方式如下

  • 轮询(Polling)
  • 中断(Interrupt)
  • 直接存储器访问(DMA; Direct Memory Access)方式设备和内存间的数据通路可使成块地传送数据而无需处理机的干预提高了CPU利用率
  • I/O通道(I/O Channel)又称I/O地址(I/O Address)I/O专用的特殊处理机具有执行I/O指令的能力该方式是DMA方式的发展可进一步减少处理机的干预

设备无关性(Device Independence)将逻辑设备名映射至物理设备名通过逻辑设备表(LUT; Logical Unit Table)实现

假脱机技术(SPOOLing; Simultaneous Peripheral Operating Online)是指在联机情况下实现的同时外围操作将独占设备改为共享设备可提高I/O速度实现虚拟设备功能

文件管理(File Management)

操作系统引入文件管理的目的是实现对文件的按名存取

文件(File)是由创建者定义的具有文件名的一组有逻辑意义信息的相关元素的集合文件控制块(FCB; File Control Block)是用于描述和控制文件的数据结构是文件存在的标识包括文件基本信息存取控制信息和使用信息等

文件目录(File Directory)即文件控制块的有序集合是文件名与辅存空间中物理地址的对应关系打开文件的操作即将指定的文件目录内容复制到主存的活动文件表

计算机存储文件之前首先需要将存储介质格式化(Formatting)以将盘片划分为轨道进一步将轨道分为扇区或称为簇文件的不同部分分散在不相邻的簇中通常会导致驱动器性能下降碎片整理(Defragment)重新排列磁盘的文件以使它们存储在相邻的簇中进而使驱动器恢复最佳性能