OS考前看一眼

OS考前复习
Operating System(第9版)

文章目录

一、计算机系统概述

操作系统的基本概念

操作系统的概念

  • 计算机系统自下而上可大致分为4部分:硬件、操作系统、应用程序和用户。
  • 操作系统是指控制和管理整个计算机系统的硬件与软件资源,合理地组织、调度计算机的工作与资源的分配,进而为用户和其他软件提供方便接口与环境的程序集和。
  • 操作系统是计算机系统中最基本的系统软件。

操作系统的特征

  • 操作系统的基本特征包括并发共享、虚拟和异步
并发
  • 并发是指两个或多个事件在同一时间间隔内发生。
  • 并发,是一段时间内,宏观上有多道处理程序在同时执行,而在每时刻,微观上这些程序仍是分时交替执行的。操作系统的并发通过分时得以实现
  • 并行,系统具有同时惊醒运算或操作的特性,在同一时刻能完成两种或两种以上工作。
共享
  • 资源共享即共享,是指系统中的资源可供内存中多个并发执行的进程共同使用
  • 互斥共享方式
    • 某些资源,一段时间内只允许一个进程访问该资源,该资源被称为临界资源
    • 大多物理设备及某些软件中使用的栈、变量都属于临界资源,需要互斥共享
  • 同时访问方式
    • 宏观上同时,微观上分时共享。
    • 典型资源是磁盘设备
  • 互斥共享要求一种资源在一段时间内只能满足一个请求,而同时访问共享要求一个请求分几个时间片段间隔完成,其效果与连续完成效果相同
  • 并发和共享式操作系统两个最基本的特征
    • 共享是以并发为条件的,若系统不允许程序并发执行,则自然不存在资源共享
    • 若系统不能对资源共享实施有效管理,则必影响到程序的并发执行
虚拟
  • 虚拟是指把一个物理上的实体变为若干逻辑上的对应物
    • 虚拟处理器、虚拟内存、虚拟外部设备
  • 分时使用一个处理器,同时为多个用户服务,使每个终端用户感觉有一个CPU专门为它服务。利用多道程序设计技术把一个物理上的CPU虚拟为多个逻辑上的CPU,称为虚拟处理器
  • 同理,有虚拟存储器。
  • 操作系统的虚拟技术可归纳为:时分复用技术;空分复用技术
异步
  • 多道程序环境允许多个程序并发执行,但由于资源优先,进程的执行并不是一贯到底,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。

操作系统的目标和功能

处理机管理、存储器管理、设备管理、文件管理

操作系统作为计算机系统资源的管理者
  • 进程管理

    • 进程控制
    • 进程同步
    • 进程通信
    • 死锁处理
    • 进程调度
  • 存储器管理:提供良好环境,便用用户使用,提高内存利用率

    • 内存分配与回收
    • 地址映射
    • 内存保护与共享
    • 内存扩充
  • 文件管理:操作系统中负责文件管理的部分为文件系统

    • 文件存储空间的管理
    • 目录管理
    • 文件读写管理
    • 文件保护
  • 设备管理:I/O请求,方便用户使用各种设备,提高设备利用率

    • 缓冲管理
    • 设备分配
    • 设备处理
    • 虚拟设备
操作系统作为用户与计算机硬件系统之间的接口
  • 命令接口:利用操作命令来组织和控制作业的执行
    • 联机命令接口(交互式命令接口):适用于分时或实时系统的接口
    • 脱机命令接口(批处理命令接口):适用于批处理系统
  • 程序接口:由一组系统调用组成
    • 图形接口
操作系统用作扩充机器
  • 没有任何软件支持的计算机称为裸机,仅构成计算机系统的物质基础,而实际呈现在用户面前的计算机系统是经过若干层软件改造的计算机。裸机在最里层,外面为操作系统,提供资源管理功能和方便用户的各种服务功能

错题精选

  • 操作系统与用户接口通常包括(缓存管理指令)

  • 以下不属于多道程序设计的基本特征是(顺序性)

    • 制约性 间断性 顺序性 共享性
  • 计算机开机后,操作系统最终被加载到(RAM)

  • 库函数与系统调用的区别与联系

    • 库函数是语言或应用程序的一部分,可以运行在用户空间中
    • 系统调用是操作系统的一部分,是内核为用户提供的程序接口,运行在内核空间中。
    • 许多库函数都会使用系统调用来实现功能。未使用系统调用的库函数,其执行效率通常要比系统调用的高。因为使用系统调用时,需要上下文的切换及状态的转换。

操作系统的发展与分类

手工操作阶段

  • 无操作系统
    • 用户独占全机
    • CPU等待手工操作

批处理阶段

单道批处理系统
  • 自动性
  • 顺序性
  • 单道性
多道批处理系统
  • 多道
  • 宏观上并行
  • 微观上串行
  • 优点:资源利用率高,多道程序共享计算机资源,使各种资源得到充分利用:系统吞吐量大,CPU和其他资源保持忙碌状态
  • 缺点:用户相应时间长,不提供人机交互能力,用户不能了解计算机运行情况,不能控制计算机。

分时操作系统

  • 把处理器的运行时间分成很短的时间片,按时间片轮流把处理器分配各联机作业使用。
  • 分时操作系统是指多个用户通过终端同时共享一台主机,这些终端连接在主机上,用户可以同时与主机进行交互操作而互不干扰
  • 同时性
  • 交互性
  • 独立性
  • 及时性

实时操作系统

  • 某个动作必须绝对在规定时刻发生,硬实时系统
  • 某个特定动作在规定时间内完成,能够接受偶尔违反时间规定且不会引起任何永久性伤害,则称为软实时系统
  • 严格时限内处理完及接收的时间。
  • 及时性
  • 可靠性

网络操作系统和分布式计算机系统

  • 网络操做系统把计算机网络中的各台计算机有机地结合起来,实现各台计算机之间数据互相传送,主要特点是网络中各资源的共享及各台计算机之间的通信
  • 分布式计算机系统是由多台计算机组成满足下列条件的系统
    • 系统中任意两台计算机通过通信方式交换信息
    • 系统每台计算机都有同等的地位
    • 每台计算机上的资源为所有用户共享
    • 系统中任意台计算机都可以构成一个子系统,且能重构。
    • 分布性
    • 并行性

在这里插入图片描述

错题精选

  • 提高单机资源利用率的关键技术是多道程序设计技术
  • 下列关于批处理系统的叙述中,正确的是批处理系统分为单道和多道中断技术使得多道批处理系统和I/O设备可与CPU并行工作
  • 与单道程序系统相比,多道程序系统的优点是:CPU利用率高系统吞吐量大I/O设备利用率高
  • 分时系统追求的目标是比较快速响应用户

操作系统的运行环境

操作系统的运行机制

  • CPU执行两种不同性质的程序:操作系统内核程序和用户自编程序

  • 特权指令:是指计算机中不允许用户直接使用的指令(I/O指令、置中断指令、存取用于内存保护的寄存器、送程序状态字。

  • 内核是计算机上配置的底层软件,是计算机功能的延伸。大多数操作系统有4方面内容

时钟管理
  • 时钟是最关键的设备,操作系统需要通过始终管理,向用户提供标准的系统时间。通过时钟中断的管理,可以实现进程的切换。
中断机制
  • 主要针对外部设备,提高CPU利用率。中断机制中,仅一小部分功能属于内核,它们负责保护和恢复中断现场的信息,转移控制权到相关的而处理程序。减少中断处理时间,提高系统的并行处理能力。
原语
  • 操作系统底层必然是一些可被调用的公用小程序,完成一个规定的操作
  • 特点
    • 处于操作系统的最底层,是最近硬件的部分
    • 这些程序的运行具有原子性,其操作只能一气呵成。
    • 这些程序运行时间都比较短,因而运行频繁
  • 定义原语的直接方法是关闭中断,让其所有动作不可分割地完成后再打开中断。
系统控制的数据结构及处理

作业控制块,进程控制块(PCB),设备控制块,各类链表,消息队列,缓冲区,空闲区等

  • 为实现有效管理,需要一些基本操作
    • 进程管理:进程状态管理,进程调度和分配,创建与撤销进程控制块等。
    • 存储器管理:存储器的空间分配和回收、内存信息保护程序、代码兑换程序等。
    • 设备管理:缓冲区管理,设备分配和回收等。

中断和异常的概念

  • 中断也称外中断,来自CPU执行指令以外的事件的发生

  • 异常也称内中断,源自CPU执行指令内部的之间。异常不能被屏蔽,应立即处理。

在这里插入图片描述

  • 中断处理过程

    在这里插入图片描述

系统调用

  • 系统调用是指用户在程序中调用操作系统所提供的一些子功能,系统调用可视为特殊的公共子程序。凡是与资源有关的操作,都必须通过系统调用方式向操作系统提出服务请求,由操作系统代为完成。

  • 分类

    • 设备管理
    • 文件管理
    • 进程控制
    • 进程通信
    • 内存管理
  • 用户程序执行陷入指令(访管指令、trap指令)发起系统调用,请求操作系统提供服务。处理完后,操作系统内核把CPU的使用权还给用户程序。

    • 用户程序不能直接执行对系统影响非常大的操作,需通过系统调用方式请求操作系统代行
    • 保证系统的稳定性和安全性,防止用户程序随意更改或访问重要的系统资源。
  • 在这里插入图片描述

  • 用户态到核心态的例子

    • 用户程序要求操作系统的服务,系统调用
    • 发生一次中断
    • 用户程序中产生了一个错误状态
    • 用户程序企图执行一条特权指令
    • 从核心态转向用户态由一条指令实现,这条指令也是特权指令,一般是中断返回指令。

错题精选

  • 下列说法正确的是( B D BD BD)

    • 批处理的主要缺点是需要大量内存
    • 当计算机提供了核心态和用户态时,输入/输出指令必须在核心态下执行
    • 操作系统中采用多道程序设计技术的最主要原因是为了提高CPU和外部设备的可靠性
    • 操作系统中,通道技术是一种硬件技术
  • 用户程序在用户态下要使用特权指令引起的中断属于访管中断

  • 操作系统各个功能组成部分中,进程调度不需要硬件支持

  • 在中断发生后,进入中断处理的程序属于操作系统程序

  • 用户态到核心态的转换是由硬件完成的,核心态到用户态转变是由操作系统完成的

  • “访管指令”仅在用户态下使用

  • 在操作系统中,只能在核心态下执行的指令是广义指令

  • 处理外部中断时,应该由操作系统保存的是通用寄存器的内容


操作系统的体系结构

  • 大内核系统将操作系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为应用提高性能的系统服务。因个管理模块之间共享信息,能有效利用相互之间的有效特性,所以具有无可比拟的性能优势
  • 为解决操作系统内核代码难以维护的问题,提出了微内核体系结构。将内核最基本的功能保留在内核,不需要再核心态执行的功能移到用户态执行,降低复杂性。微内核结构有效的分离了内核与服务、服务与服务,使得它们的接口更加清晰,保证了操作系统的可靠性。性能问题,来回切换用户态和核心态。

本章疑难点

并行性与并发性的区别与联系?
  • 并行性是指两个或多个事件在同一时刻发生
  • 并发性是指两个或多个事件在同一时间间隔内发生
  • 在多道程序环境下,并发性是指在一段时间内,宏观上有多个程序同时运行,但在单处理器系统中每个时刻仅能有一道程序执行,因此微观上交替执行。若在计算机系统中有多个处理器,则这些可以并发执行的程序便被分配到多个处理器上,实现并行执行。
特权指令与非特权指令?
  • 所谓特权指令,是指有特殊权限的指令,由于这类指令的权限最大,使用不当将导致整个系统崩溃,如清内存、置时钟、分配系统资源等。为保证系统安全,这类指令只能用于操作系统或其他系统软件,不能直接提供给用户使用。因此,特权指令必须在核心态执行。
  • 为了防止用户程序中使用特权指令,用户态下只能使用非特权指令,核心态下可以使用全部指令。在用户态下使用特权指令时,将产生中断以阻止用户使用特权指令。所以把用户程序放在用户态下运行,而操作系统中必须使用特权指令的那部分程序在核心态下运行,保证了计算机系统安全可靠。
访管指令与访管中断?
  • 访管指令是一条可以在用户态下执行的指令。在用户程序中,因要求操作系统提供服务而有意识地使用访管指令,从而产生一个中断事件(自愿中断),将操作系统转换为核心态,称为访管中断。访管中断由访管指令产生,程序员使用访管指令向操作系统请求服务。
  • 处于用户态的用户程序使用访管指令时,系统根据访管指令的操作数执行访管中断处理程序,访管中断处理程序将按系统调用的操作数和参数转到相应的例行子程序。完成服务功能后,退出中断,返回到用户程序断点继续执行。

二、进程管理

进程与线程

进程的概念和特征

进程的概念
  • 进程控制块 ( P C B ) (PCB) (PCB)是进程存在的唯一标志
  • 进程是程序一次执行的过程
  • 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
  • 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
进程的特征

进程是由多道程序的并发执行而引出的,它和程序是两个截然不同的概念

  • 动态性:最基本的特征
  • 并发性:多个进程实体同时存在于内存中,在一段时间内同时运行,重要特征
  • 独立性:进程实体是一个能独立运行、独立获得资源独立接受调度的基本单位
  • 异步性:进程具有执行的间断性,按各自独立,不可预知的速度向前推进
  • 结构性:每个进程都配置一个PCB对其描述。进程实体,由程序段、数据段、进程控制块组成

进程的状态与切换

  • 通常五种状态,前三种最基本状态

    • 运行态:进程在处理机上运行
    • 就绪态:获得所需资源,排成就绪队列等待CPU
    • 阻塞态:等待某一事件而暂停运行
    • 创建态:进程正在被创建,申请PCB,分配必需资源
    • 结束态:放入结束态后,资源释放和回收
  • 在这里插入图片描述

  • 注:进程运行态->阻塞态为主动行为,阻塞态->就绪态为被动行为,需要其他进程协助

进程控制

进程的创建
  • 允许一个进程创建另一个进程,创建者为父进程,被创建为子进程,子进程可以继承父进程的所拥有的资源。子进程撤销时,资源归还;父进程撤销,同时撤销所有子进程。
  • 创建过程
    • 为新进程分配一个唯一的进程标识号,并申请一个空白的 P C B PCB PCB
    • 为进程分配资源,为新进程的程序和数据及用户栈分配必要的内存空间
    • 初始化 P C B PCB PCB,主要包括初始化标志信息,初始化处理机状态信息,处理机控制信息,优先级等
    • 若进程就绪队列能接纳新进程,则插入就绪队列等待调度
进程的终止
  • 引起进程终止的事件
    • 正常结束
    • 异常结束
    • 外界干预
  • 终止过程
    • 根据被终止进程标识符,检索 P C B PCB PCB,从中读出该进程的状态
    • 若被终止进程处于执行态,则立即终止其执行,处理机资源分配给其他进程
    • 若该进程还有子孙进程,终止所有子孙进程
    • 将该进程所拥有的全部资源或归还给父进程,或归还给操作系统
    • 将该 P C B PCB PCB从队列中删除
进程的阻塞和唤醒
  • 阻塞原语
    • 找到被阻塞进程的标识号对应 P C B PCB PCB
    • 若该进程为运行态,保护现场,转为阻塞态,停止运行
    • 将该 P C B PCB PCB插入响应事件的队列,将处理机资源调度给其他就绪进程
  • 唤醒原语
    • 在该事件的等待队列中找到相应进程的 P C B PCB PCB
    • 将其从等待队列中移出,并置其状态为就绪态
    • 把该 P C B PCB PCB插入就绪队列,等待调度程序调度
进程切换
  • 切换过程
    • 保存处理机上下文,包括程序计数器和其他寄存器
    • 更新 P C B PCB PCB信息
    • 把进程的 P C B PCB PCB移入相对应队列
    • 选择另一个进程执行,并更新其 P C B PCB PCB
    • 更新内存管理的数据结构
    • 恢复处理机上下文
  • “调度”是指决定资源分配哪个进程的而行为,是一种决策行为;切换是指实际分配的行为,是执行行为,一般来说,先有资源的调度,然后才有进程的切换。

进程的组织

进程由三部分组成,最核心的是进程控制块

进程控制块

在这里插入图片描述

程序段
  • 程序段就是能被进程调度程序调度到CPU执行的程序代码段。程序可被多个进程共享
数据段
  • 一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或最终结果

进程的通信

进程通信是指进程之间的信息交换

共享存储
  • 在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换。需要使用同步互斥工具(PV操作),对共享空间的写/读进行控制。

在这里插入图片描述

消息传递
  • 进程间的数据交换是以格式化的信息为单位的。
  • 直接通信方式。发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。
  • 间接通信方式。发送进程把消息发送到某个中间实体,接收进程从中间实体取得消息。中间实体一般称为信箱。
管道通信
  • 管道:用于连接一个读进程和一个写进程以实现它们之间的通信的一个共享文件。
  • 向管道提供输入的发送进程,以字符流形式将大量的数据送入写管道;而接收管道输出的接收进程则从管道中接收读数据。
    • 互斥
    • 同步
    • 确定对方都存在

在这里插入图片描述

  • 管道某时刻只能单向传输,一旦被读取,就从管道中被抛弃。

线程概念和多线程模型

线程的基本概念
  • 引入进程是为了更好地使多道程序并发执行,提高资源利用率和系统吞吐量

  • 引入线程目的是减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能

    • 空间代价:进程控制块及协调个运行机构所占有的内存空间开销
    • 时间代价:进行进程间的切换、同步及通信等所付出的时间开销
  • 引入线程后

    • 进程只作为 C P U CPU CPU外的系统资源的分配单元
    • 线程作为处理机的分配单元。
线程与进程的比较
  • 调度:线程使独立调度的基本单位,进程是拥有资源的基本单位
  • 拥有资源:线程不拥有系统资源,但线程可以访问其隶属进程的系统资源
  • 并发性:不仅进程之间可以并发执行,多个线程之间也可以并发执行,提高系统吞吐量
  • 系统开销:线程切换只需保存和设置少量寄存器内容,开销小,线程之间的同步与通信容易
  • 地址空间和其他资源:进程的地址空间相互独立,某进程内的线程对于其他进程不可见。
  • 通信方面:进程间通信( I P C IPC IPC)需要进程同步和互斥手段,线程可以直接读写进程数据段通信。
线程的属性
  • 线程是一个轻型实体,它不拥有系统资源,但都有一个线程控制块记录相关信息
  • 不同的线程可以执行相同的程序。
  • 同一进程的各个线程共享该进程所拥有的资源
  • 线程是处理机的独立调度单位,多个线程是可以并发执行的。
  • 一个线程被创建后,便开始了它的生命周期,直至终止。
线程的实现方式
  • 用户级:应用程序完成线程管理
  • 内核级:内核完成线程管理

在这里插入图片描述

多线程模型
  • 多对一:多个用户级线程映射到一个内核线程,线程管理在用户空间完成
    • 优点:线程管理在用户空间进行,效率比较高
    • 缺点:一个线程在使用内核服务时被阻塞,整个进程都会被阻塞,多个线程不能并行
  • 一对一:每个用户级线程映射到一个内核线程
    • 优点:当一个线程被阻塞后,允许另一个线程继续执行,并发能力强
    • 缺点:每创建一个用户级线程都需要创建一个内核级线程,开销大,影响性能
  • 多对多:n个用户级线程映射到m个内核级线程, n ≤ m n\leq m nm
    • 有各自的优点,克服了各自缺点。

处理机调度

调度的概念

调度的基本概念
  • 处理机调度是对处理机进行分配,即从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程并发地执行。

  • 处理机调度是多道程序操作系统的基础,是操作系统设计的核心问题

调度的层次
  • 作业调度:按照一定的原则从外存上处于后备状态的作业中挑选一个(或多个)作业,给它们分配内存、输入/输出设备等必要的资源,并建立相应的进程,以使它们获得竞争处理机的权力。
  • 中级调度:内存调度,作用是提高内存利用率和系统吞吐量。将那些暂时不能运行的进程调至外存等待,把此时的进程状态称为挂起态。具备条件又空闲时,重新调入内存。
  • 进程调度:按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。
三级调度的联系
  • 作业调度从外存的后备队列中选择一批作业进入内存,为它们建立进程,这些进程被送入就绪队列,进程调度从就绪队列中选出一个进程,状态改为运行态,把CPU分配给它。中级调度是为了提高内存的利用率,系统将那些暂时不能运行的进程挂起来。内存宽松时,将具备运行条件的唤醒
  • 作业调度为进程活动做准备,进程调度使进程正常活动起来,中级调度将暂时不能运行的进程挂起
  • 作业调度次数少,中级调度次数略多,进程调度频率最高
  • 进程调度是最基本的,不可或缺。

调度的时机、切换与过程

  • 进程调度和切换程序是操作系统的内核程序。请求调度的事件发生后,才可能运行进程调度程序,调度了新的就绪进程后,才会进行进程间的切换。三件事情理论上顺寻执行
  • 不能进行进程的调度与切换的情况
    • 在处理中断的过程中
    • 进程在操作系统内核程序临界区中
    • 其他需要完全屏蔽中断的原子操作过程中
  • 应该进行进程调度与切换的情况
    • 发生引起调度条件且当前进程无法继续运行下去时,可以马上进行调度与切换。非剥夺调度
    • 中断处理结束或自馅处理结束后,返回被中断进程的用户态程序执行现场前,若置上请求调度标志,可马上进行调度与切换。剥夺调度

进程调度方式

  • 非剥夺调度方式(非抢占方式)
    • 适用于大多数批处理系统,不能用于分时系统和大多数实时系统
  • 剥夺调度方式(抢占方式)
    • 提高系统吞吐量和响应效率。

调度的基本准则

  • CPU利用率
  • 系统吞吐量
  • 周转时间: 周 转 时 间 = 完 成 时 间 − 到 达 时 间 = 服 务 时 间 + 等 待 时 间 周转时间=完成时间-到达时间=服务时间+等待时间 ==+
  • 带权周转时间:周转时间与响应时间的比值
  • 等待时间: 等 待 时 间 = 开 始 时 间 − 到 达 时 间 等待时间=开始时间-到达时间 =
  • 响应时间: 响 应 时 间 = 完 成 时 间 − 开 始 时 间 响应时间=完成时间-开始时间 =

典型的调度算法

  • 先来先服务调度算法( F C F S FCFS FCFS)
    • 简单,长作业有理,有利于CPU繁忙型作业
    • 效率低,短作业不利,不利于I/O繁忙性作业
  • 短作业优先调度算法( S J F SJF SJF)
    • 对长作业不利
    • 完全未考虑作业的紧迫程度,不能摆正紧迫性作业会被及时处理
    • 作业的长短只是根据用户所提供的估计执行时间而定,会有意无意缩短
  • 优先级调度算法
  • 高响应比优先调度算法
    • 响 应 比 = 等 待 时 间 + 要 求 服 务 时 间 要 求 服 务 时 间 响应比=\frac{等待时间+要求服务时间}{要求服务时间} =+
    • 等待时间相同,要求服务时间越短,响应比越高,有利于短作业
    • 要求服务时间相同,作业的响应时间由等待时间决定,先来先服务
    • 对于长作业,作业的响应比可随等待时间增加提高,从而克服了饥饿状态
  • 时间片轮转调度算法
    • 时间片的大小对系统性能的影响很大
    • 时间片足够大,就是先来先服务算法
    • 时间片很小了,处理机开销增大。
  • 多级反馈队列调度算法(融合前几种算法的优点)
    • 设置多个就绪队列,各个队列赋予不同优先级,赋予各个队列不同时间片大小。
    • 终端型作业用户:短作业优先
    • 短批处理作业用户:周转时间较短
    • 长批处理作业用户:经过前面几个队列得到部分执行,不会长期得不到处理

本节小结

为什么要进行处理机调度?
  • 为了提高处理机的利用率,合理地处理计算机软/硬件资源

进程同步

进程同步的基本概念

  • 在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,引入了进程同步的概念。
临界资源
  • 一次仅允许一个进程使用的资源称为临界资源
  • 访问过程分为4个部分
    • 进入区:检查能够进入临界区,设置标志
    • 临界区:访问临界资源的那段代码
    • 退出区:将正在访问临界区的标志清除
    • 剩余区
同步
  • 同步为直接制约关系,是指完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。
互斥
  • 互斥为间接制约关系,当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一进程才允许去访问此临界资源
  • 同步机制应遵循的准则
    • 空闲让进:临界区空闲,允许一个请求进入临界区进程立即进入临界区
    • 忙则等待:有进程进入临界区时,其他进程进入临界区的进程必须等待
    • 有限等待:对请求访问的进程,保证有限时间内进入临界区
    • 让权等待:当进程不能进入临界区时,应立即释放处理器,防止进程忙等待

实现临界区互斥的基本方法

软件实现方法
  • 单标志法
    • 违背空闲让进
  • 双标志法先检查
    • 同时进入临界区会违背忙则等待
  • 双标志法后检查
    • 双方互相谦让,导致“饥饿”现象
  • P e t e r s o n ′ s A l g o r i t h m Peterson's Algorithm PetersonsAlgorithm
//P_i进程
flag[i] = TRUE, turn = j;
while(flag[j] && turn == j);
critical section
flag[i] = FALSE;
remainder section
    
//P_j进程
flag[j] = TRUE, turn = i;
while(flag[i] && turn == i);
critical section
flag[j] = FALSE;
remainder section
硬件实现方法
  • 中断屏蔽方法
    • 当进程正在使用处理机执行临界区代码时,防止其他进程进入其临界区进行访问的最简方法时,禁止一切中断发生。因为CPU只有在发生中断时引起进程切换。
    • 执行效率会降低。
  • 硬件指令方法
    • T e s t A n d S e t TestAndSet TestAndSet指令:原子操作,执行代码时不允许被中断,功能是读出指定标志后,把标志设置为真。
      • 不能实现让权等待
    • S w a p Swap Swap指令
      • 不能实现让权等待,可能会饥饿
  • 硬件方法的优点:适用于任意数目的进程,而不管是单处理机还是多处理机;简单、容易验证其正确性,可以支持进程内有多个临界区,只需为每个临界区设立一个布尔变量
  • 硬件方法的缺点:进程等待进入临界区时要耗费处理机时间,不能实现让权等待。从等待进程中随机选择一个进入临界区,有的进程可能一直选不上,导致“饥饿”现象。

信号量

  • 信号量机制是一种功能较强的机制,可用来解决互斥同步问题,只能被两个标准的原语 w a i t ( S ) wait(S) wait(S) s i g n a l ( S ) signal(S) signal(S)访问,也可记为“ P P P操作”和" V V V操作"
整型信号量
  • 整型信号量被定义为一个用于表示资源数目的整型量 S S S
wait(S){
    while(S <= 0);
    S = S - 1;
}
signal(S){
    S = S + 1;
}
  • 未遵循让权等待的准则,使进程处于忙等状态
记录型信号量
  • 除需要一个代表资源数目的整型变量外,再增加一个进程链表 L L L
typedef struct{
    int value;
    struct process *L;
}semaphore;
void wait(semaphore S){
    S.value--;
    if(S.value < 0){
        add this process to S.L;
        block(S.L);
    }
}
void siganl(semaphore S){
    S.value++;
    if(S.value <= 0){
        remove a process P from S.L;
        wakeup(P);
    }
}
利用信号量实现同步
// y在x之后才可执行
semaphore S = 0;
P1(){
	...
	x;
	V(S)
	...
}
P2(){
	...
	P(S);
	y;
	...
}
利用信号量实现进程互斥
semaphore S = 1;
P1(){
    ...
    P(S);
    //进程P1的临界区
    V(S);
    ...
}
P2(){
    ...
    P(S);
    //进程P2的临界区
    V(S);
}
利用信号量实现前驱关系
  • 举例

在这里插入图片描述

semaphore a1=a2=b1=b2=c=d=e=0;
S1(){
    ...;
    V(a1);V(a2);
}
S2(){
	P(a1);
	...;
	V(b1);V(b2);
}
S3(){
	P(a2);
	...;
	V(c);
}
S4(){
	P(b1);
	...;
	V(d);
}
S5(){
	P(b2);
	...;
	V(e);
}
S6(){
	P(c);P(d);P(e);
	...;
}
分析进程同步和互斥问题的方法步骤
  • 关系分析:找出问题中的进程数,分析它们之间的同步和互斥关系
  • 整理思路:找出关键点,确定PV操作大致顺序
  • 设置信号量,确定初值。

管程

管程的定义
  • 代表共享资源的数据结构,以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序,称为管程
  • 管程4部分
    • 管程名称
    • 局部于管理内部的共享结构数据说明
    • 对该数据结构进行操作的一组过程
    • 对局部于管程内部的共享数据设置初始值的语句
monitor Demo{
    共享数据结构S;
    init_code(){
        S=5;
    }
    take_away(){
        S--;
    }
    give_back(){
        S++;
    }
}
  • 管程把对共享资源的操作封装起来,管程内的共享数据结构只能被管程内的过程所访问。
  • 每次仅允许一个进程进入管程,从而实现进程互斥。
条件变量
  • 当一个进程进入管程后被阻塞,直到阻塞的原因解除时,在此期间,如果该进程不释放管程,其他进程无法进入管程。将阻塞原因定义为条件变量

  • 每个条件变量保存了一个等待队列,用于记录因该条件变量而阻塞的所有进程,对条件变量只能进行两种操作,wait和signal。

  • 条件变量和信号量的比较

    • 条件变量的wait和signal操作类似信号量的P/V操作,可以实现进程的阻塞/唤醒
    • 条件变量是没有值的,仅实现了排队等待功能;信号量是有值的,信号量的值反映了剩余资源数,而在管程中,剩余资源数用共享数据结构记录。

经典同步问题

生产者-消费者问题
  • 关系分析:生产者和消费者对缓冲区互斥访问是互斥关系,同时生产者和消费者又是一个相互协作的关系,只有生产者生产后,消费者才能消费,也是同步关系
  • 整理思路:两个进程存在互斥关系和同步关系
  • 信号量设置:信号量 m u t e x mutex mutex作为互斥信号量,用于控制互斥访问缓冲池,互斥信号量初值为1。信号量full用来记录当前缓冲池中满缓冲区的数量,初值为0。信号量empty记录当前缓冲池空缓冲区的数量,初值为n。
semaphore mutex = 1;
semaphore empty = n;
semaphore full = 0;
producer(){
    while(1){
        Produce an item in nextp;
        P(empty);
        P(mutex);
        add nextp to buffer;
        V(mutex);
        V(full);
    }
}
consumer(){
    while(1){
        P(full);
        P(mutex);
        remove an item from buffer;
        V(mutex);
        V(empty);
        consume the item;
    }
}
读者-写者问题
  • 关系分析:读者和写者是互斥的,写者和写者也是互斥的,而读者和读者不存在互斥问题
  • 整理思路:两个进程,读者和写者。写者,它和任何进程互斥,用PV操作即可,读者必须在实现与写者互斥的同时,实现与其他读者的同步。采用一个计数器,判断当前是否有读者读文件。当有读者时,写者无法写文件,读者一直占用,没有读者,写者可以写。
  • 信号量设置:设置count为计数器,用于记录当前读者的数量,初值为0。设置 m u t e x mutex mutex为互斥信号量,保护更新count变量时的互斥,设置互斥信号量 r w rw rw,用于保证读者和写者互斥访问。
//读进程优先,存在读进程,写操作被延迟
int count = 0;
semaphore mutex = 1;
semaphore rw = 1;
writer(){
    while(1){
        P(rw);
        writing;
        V(rw);
    }
}
Reader(){
    while(1){
        P(mutex);
        if(count == 0)
            P(rw);
        count++;
        V(mutex);
        reading;
        P(mutex);
        count--;
        if(count == 0)
            V(rw);
        V(mutex);
    }
}

//写进程优先,即有写进程时,后续读进程不得前置
//在读写进程中加入新信号量限制读写请求
int count = 0;
semaphore mutex = 1;
semaphore rw = 1;
semaphore w = 1;
writer(){
    while(1){
        P(w);
        P(rw);
        writing;
        V(rw);
        V(w);
    }
}
Reader(){
    while(1){
        P(w);
        P(mutex);
        if(count == 0)
            P(rw);
        count++;
        V(mutex);
        V(w);
        reading;
        P(mutex);
        count--;
        if(count == 0)
            V(rw);
        V(mutex);
    }
}
哲学家进餐问题
  • 关系分析:5名哲学家与左右邻居对其中间筷子的访问是互斥关系
  • 整理思路。5个进程,关键是如何让一名哲学家拿到两个筷子而不造成死锁和饥饿现象。解决方法有两个:一是让他们同时拿两根筷子;二是对每名哲学家的动作指定规则
  • 信号量设置。定义互斥信号量数组chopsticks[5]={1,1,1,1,1},用于对5个筷子的互斥访问。哲学家编号为0~4,哲学家i左边筷子编号为i,右边筷子编号为(i+1)%5
semaphore chopstick[5]={1,1,1,1,1};
semaphore mutex=1;
Pi(){
    do{
        P(mutex);
        P(chopstick[i]);
        P(chopstick[i+1]%5);
        V(mutex);
        eat;
        V(chopstick[i]);
        V(chopstick[i+1]%5);
        think;
    }while(1);
}
吸烟者问题

一个系统有三个抽烟者进程和一个供应者进程。每个抽烟者不停地卷烟并抽烟,但是卷起来一支烟,需要烟草、纸和胶水。三个抽烟者,第一个拥有烟草,第二个拥有纸,第三个拥有胶水。供应者进程无限地提供三种材料,供应者每次将两种材料放到桌子上,拥有剩下那种材料的抽烟者卷一根烟并抽掉它,并给供应者一个信号告诉已完成。此时供应者会将另外两种材料放到桌子上,如此重复

  • 关系分析:供应者与三个抽烟者为同步关系。由于供应者无法同时满足两个或以上的抽烟者,三个抽烟者对抽烟这个动作互斥
  • 整理思路:四个进程,供应者作为生产者向三个抽烟者提供材料
  • 信号量设置:信号量offer1,offer2,offer3分别表示烟草和纸、烟草和胶水、纸和胶水组合的资源。信号量finish用于互斥进行抽烟动作。
int random;
semaphore offer1 = 0;
semaphore offer2 = 0;
semaphore offer3 = 0;
semaphore finish = 0;
process P1(){
    random = 任意一个随机数;
    random = random%3;
    if(random == 0)
        V(offer1);
    else if(random == 1)
        V(offer2);
    else
        V(offer3);
    //任意两种材料放在桌子上
    P(finish);
}
process P2(){
    while(1){
        P(offer3);
        //拿纸和胶水卷成烟抽掉
        V(finish);
    }
}
process P3(){
    while(1){
        P(offer2);
        //拿烟草和胶水卷成烟抽掉
        V(finish);
    }
}
process P4(){
    while(1){
        P(offer3);
        //拿烟草和纸卷成烟抽掉
        V(finish);
    }
}

死锁

死锁的概念

死锁的定义
  • 多个进程因竞争资源而造成的一种互相等待僵局,无外力作用,无法向前推进。
死锁产生的原因
  • 系统资源的竞争
  • 进程推进顺序非法
  • 死锁产生的必要条件
    • 互斥条件
    • 不剥夺条件
    • 请求并保持条件
    • 循环等待条件

死锁的处理策略

死锁预防
  • 设置某些限制条件,破坏产生死锁的4个必要条件中的一个或几个
避免死锁
  • 在资源的动态分配中,用某种方法阻止系统进入不安全状态,从而避免死锁
死锁的检测及解除
  • 允许发生死锁。系统检测机构及时检测出,采取某种措施解除死锁

在这里插入图片描述

死锁预防

破坏互斥条件
  • 允许系统资源都能共享使用。有些资源不可
破坏不剥夺条件
  • 当一个已保持了某些不可剥夺资源进程请求新的资源而得不到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请。
破坏请求并保持条件
  • 采用预先静态分配方法,即进程再运行前依次申请完它所需要的全部资源,若不满足则不投入运行,一旦投入运行,资源一直归它所有。
破坏循环等待条件
  • 顺序资源分配法。资源编号,必须拥有前面的资源,才能拥有后面的资源

死锁避免

系统安全状态
  • 系统能按某种进程推进顺序为每个进程分配其所需的资源,直至满足每个进程对资源的最大需求,使每个进程都可顺序完成。
银行家算法
  • 最大需求矩阵、分配矩阵、需求矩阵、请求向量

死锁检测和解除

资源分配图
  • 进程到资源的边为请求边
  • 资源到进程的边为分配边
死锁定理
  • 简化资源分配图,找出所有有向边相连且该有向边对应资源申请数量小于等于已有空闲数量的进程,消去它所有的请求边和分配边,使之称为孤立点结点。
  • 循环此过程,直至消去所有边
死锁解除
  • 资源剥夺法

  • 撤销进程法

  • 进程回退法

本章疑难点

进程与程序的区别与联系?
  • 进程是程序机器数据在计算机上的依次运行活动,是一个动态的概念。进程的运行实体是程序,离开程序的进程是没有存在的意义。从静态角度看,进程是由程序、数据和进程控制块组成的。而程序是一组有序的指令集合,是一种静态的概念
  • 进程是程序的一次执行过程,它是动态地创建和消亡的,具有一定的生命周期,是暂时存在的。而程序是一组代码的集合,是永久存在的,可长期保存
  • 一个进程可执行一个或几个程序,一个程序也可构成多个进程。进程而创建进程,而程序不可能形成新的程序
  • 进程与程序的组成不同。进程包括程序、数据和PCB
死锁与饥饿?
  • 具有等待队列的信号量的实现可能导致这样的情况
    • 两个或多个进程无限地等待一个时间,而该事件只能由这些等待进程之一来产生。死锁
  • 与死锁相关的另一问题是无限期阻塞,即饥饿,即进程在信号量内无穷等待的情况
    • 饥饿的主要原因是:在一个动态系统中,对于每类系统资源,操作系统需要确定一个分配策略。当多个进程同时申请某类资源时,由分配策略确定分配给进程的次序。有时资源分配策略不公平,不能保证等待时间上界的存在。在这种情况下,即使系统没有发生死锁,某些进程也会长时间等待。当等待时间给进程推进和响应带来明显影响时,称发生了进程饥饿
银行家算法的工作原理?
  • 银行家算法的主要思想是避免系统进入不安全状态。在每次进行资源分配时,它首先检查系统是否有足够的资源满足要求,若有则先进行分配,并对分配后的新状态进行安全性检查。若新状态安全,则正式分配上述资源,否则拒绝分配i上述资源
作业和进程的关系?
  • 进程是系统资源的使用者,系统的资源大部分都是以进程为单位分配的。而用户使用计算机是为了实现遗传相关的任务,通常把用户要求计算机完成的这一串任务称为作业
  • 批处理系统中作业与进程的关系(进程组织)
    • 批处理系统可以通过磁记录设备或卡片机向系统提交批作业,由系统的 S P O O L i n g SPOOLing SPOOLing输入进程将作业放入磁盘的输入井,作为后备作业。作业调度程序每当选择一道后备作业运行时,首先为该作业创建一个进程(根进程)。该进程将执行作业控制语言解释程序,解释该作业的作业说明书。父进程在运行过程中可以动态地创建一个或多个子进程,执行说明书中语句。因此,一个作业动态的转换成了一组运行实体——进程族。
  • 分时系统中作业与进程的关系
    • 分时系统的用户通过命令语言逐条与系统应答式地输入命令,提交作业。每输入一条命令,便直接在系统内部对应一个进程。在系统启动时,系统为每个终端设备建立一个进程,该进程执行命令解释程序,命令解释程序从终端设备读入命令,解释执行用户输入的每条命令。
  • 交互地提交批作业
    • 人们可以交互的方式准备好批作业的有关程序、数据及作业控制说明书。用交互系统提供的全屏幕编辑命令编辑好将要提交的作业控制说明书文件,如Windows系统的bat文件和Linux系统的sh文件。然后用一条作业提交命令将作业提交到系统作业队列。系统有专门的作业调度进程负责从作业队列中选择作业,为被选取的作业创建一个父进程运行命令解释程序,解释执行作业控制说明书文件中的命令

三、内存管理

内存管理概念

内存管理的基本原理和要求

  • 内存管理是操作系统设计中最重要和最复杂的内容之一。
  • 内存管理的功能
    • 内存空间的分配和回收:由操作系统完成主存储器的空间的分配和管理
    • 地址转换:逻辑地址与物理地址
    • 内存空间的扩充:虚拟存储技术
    • 存储保护:保证各道作业在各自存储空间内运行
程序装入和链接
  • 编译
  • 链接
    • 静态链接
    • 装入时动态链接
    • 运行时动态链接
  • 装入
    • 绝对装入:逻辑地址=物理地址
    • 可重定位装入:地址变换装入时一次完成
    • 动态运行时装入:动态装入,动态申请分配内存
逻辑地址空间和物理地址空间
  • 编译后,每个目标模块都从0号单元开始编址,这成为该目标模块的逻辑地址。当链接程序将各个模块链接成一个完整的可执行目标程序时,链接程序顺序依次按各个模块的相对地址构成统一的从0号单元开始编址的逻辑地址空间。
  • 物理地址空间是内存中物理单元的集合,它是地址转换的最终地址,进程在运行时真执行指令和访问数据,最后都要通过物理地址从主存中存取。当装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成物理地址,称为地址重定位
内存保护
  • 在CPU中设置上、下限寄存器,存放用户作业在主存中的下限和上限地址,判断有无越界。
  • 重定位寄存器和界地址寄存器来实现保护,重定位寄存器含最小的物理地址值,界地址寄存器含逻辑地址的最大值。
    • 重定位寄存器用来加
    • 界地址寄存器用来比

覆盖与交换

覆盖
  • 由于程序运行时并非任何时候都要访问程序及数据的各个部分,因此可保用户空间分成一个固定区和若干覆盖区。经常活跃的放在固定区,其余部分按调用关系分段。先将即将访问的放入覆盖区,其他段放在外存中,在需要调用前,再将其调入覆盖区,覆盖原有段
  • 打破了必须将全部信息装入主存运行的限制,但当同时运行程序的代码量大于主存时仍不能运行。
交换
  • 把处于等待状态的程序从内存移到辅存,把内存空间腾出来,换出;把主备好竞争CPU运行的程序从辅存移到内存,换入。
  • 交换需要备份存储,通常是快速磁盘,它必须足够大,并提供对这些内存映像的直接访问
  • 执行时间应比交换时间长,转移时间占交换时间的大部分,与所交换的内存空间成正比
  • 若换出进程,则必须足额包该进程完全处于空闲状态
  • 交换空间通常作为磁盘的一整块,独立于文件系统,使用起来很块。

注:交换主要在不同进程之间进行,覆盖则用于同一进程中。覆盖已成历史,交换依旧存在

连续分配管理方式

  • 单一连续分配
    • 优点:简单、无外部碎片,可以采用覆盖技术,不需要额外的技术支持
    • 缺点:只能用于单用户、单任务操作系统中,有内部碎片,存储器的里利用率低
  • 固定分区分配
    • 问题:程序可能太大放不进任何一个分区/主存利用率低,存在空间浪费。
  • 动态分区分配
    • 根据进程的大小动态的建立分区,并使分区的大小正好适合进程的需要
    • 克服外部碎片可采用紧凑技术来解决
    • F F FF FF算法
    • N F NF NF算法
    • B F BF BF算法
    • W F WF WF算法

在这里插入图片描述

非连续分配管理方式

基本分页存储管理方式
  • 把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单位。每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间。

  • 不会产生外部碎片,内部碎片也很小

  • 分页存储的几个基本概念

    • 页面和页面大小。进程中的块成称为,内存中的块称为页框。外存也以同样单位划分,直接称为
      • 页面大小应是2的整数幂,太小会使进程的页面过多,页表过长。太大会使页内碎片增多,降低内存利用率。
    • 地址结构。分页存储管理的逻辑结构地址:页号P 页内偏移量W
      • 前一部分为页号,决定了地址空间最多允许多少页
      • 后一部分为页内地址,决定了每页的大小
    • 页表。便于内存中找到进程的每个页面所对应的物理块,系统为每个进程建立一张页表,记录页面在内存中对应的物理块号,页表一般存放在内存中。
      • 页表由页表项组成,页表项第一部分是页号,第二部分是物理内存中的块号。
      • 页表的第二部分和地址结构中的第二部分共同组成物理地址
  • 基本地址变换机构

    • 设页面大小为 L L L,逻辑地址为 A A A,物理地址为 E E E
      • 页号 P = A / L P = A/L P=A/L,页内偏移量 W = A % L W=A\%L W=A%L
      • 页表中 页 号 页号 P 对 应 的 页 表 项 地 址 = 页 表 始 址 F + 页 号 P × 页 表 项 长 度 对应的页表项地址 = 页表始址F+页号P\times页表项长度 =F+P×,该地址内容为 b b b
      • E = b × L + W E=b\times L + W E=b×L+W
        在这里插入图片描述
  • 具有快表( T L B TLB TLB)的地址变换机构

    • 在这里插入图片描述
  • 两级页表

    • 一级页号 二级页号 页内偏移
    • 在页表结构基础上,再加一层页表
基本分段存储管理方式
  • 分页管理方式是从计算机的角度考虑设计的,目的是提高内存的利用率,提升计算机的性能。分页通过硬件机制实现,对用户完全透明

  • 分段管理方式的提出则考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长及动态链接等多方面的需要。

  • 分段。段式管理方式按照用户进程中的自然段划分逻辑空间。每段从0开始编址,并分配一段连续的地址空间(段内要求连续,段间不要求连续),逻辑地址由段号 S S S和段内偏移量 W W W组成。

  • 段表。每个进程都有一张逻辑空间与内存空间映射的段表,每个段表项对应进程的一段,段表项记录段在内存中的始址和长度。段表内容:段号 段长 本段在主存的始址

  • 地址变换机构。

    • 在这里插入图片描述
  • 段的共享与保护。

    • 段的共享通过两个作业的段表中相应表项指向被共享的段的同一个物理副本来实现的,当一个作业正从共享段中读取数据时,必须防止另一个作业修改此共享段中数据
    • 存取控制保护,地址越界保护
段页式管理方式
  • 逻辑地址结构

    • 段号 页号 页内偏移量
    • 在这里插入图片描述
  • 地址变换机构

    • 在这里插入图片描述

本节小结

为什么要进行内存管理?
  • 在单道批处理系统阶段,一个系统在一个时间段只执行一个程序,内存的分配极其简单。引入多道程序的并发执行后,进程之间共享的不仅仅是处理机,还有主存储器。然而,共享主存会形成一些特殊的挑战。若不对内存进行管理,则容易导致内存数据的混录,以至于限制进程的并发执行,因此,为了更好地支持多道程序并发执行,必须进行内存管理。
页式管理中每个页表项大小的下限如何决定?
  • 页表项的作用是找道该页在内存中的位置。以32位逻辑地址空间、字节编址单位、一夜4KB为例,地址空间内共含有 2 3 2 B / 4 K B = 1 M 2^32B/4KB=1M 232B/4KB=1M页,需要20位才能保证表示范围能容纳所有页面,又因为以字节作为编址单位,页表项的大小 ≥ 20 / 8 取 上 整 \geq 20/8取上整 20/8。所以,为了保证页表项能够指向所有页面,页表项的大小应该大于3B;
多级页表解决了什么问题?带来什么问题?
  • 多级页表解决了当逻辑地址空间过大时,页表的长度会大大增加的问题。采用多级页表时,依次访盘需要多次访问内存甚至磁盘,会大大增加依次访存的时间。

虚拟内存管理

虚拟内存的基本概念

传统存储管理方式的特征
  • 一次性
  • 驻留性
局部性原理
  • 时间局部性:程序中某指令一旦执行,不久后该指令可能再次执行
  • 空间局部性:一旦程序访问了某个存储单元后,不久,附近的存储单元也将被访问。
虚拟存储器的定义和特征
  • 操作系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放要调入内存的信息。系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器
  • 对用户完全透明的装入、请求调入和置换功能,给用户感觉好像存在比实际物理内存大得多的存储器。
  • 多次性:无须再作业运行时一次性地全部装入内存,允许分成多次调入内存运行
  • 对换性:无需作业一直常驻内存,允许在作业的运行过程中,进行换进和换出
  • 虚拟性:从逻辑上扩充内存的容量,使用户所看到的内存容量远大于实际内存容量
虚拟内存技术的实现
  • 虚拟内存的实现建立在离散分配的内存管理方式的基础上
    • 请求分页存储管理
    • 请求分段存储管理
    • 请求段页式存储管理
  • 不管哪种方式,都需要一定的硬件支持
    • 一定容量的内存和外存
    • 页表机制(段表机制),作为主要数据结构
    • 中断机构
    • 地址变换机构

请求分页管理方式

建立在基本分页系统基础之上,为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能。请求分页是目前常用的一种实现虚拟存储器的方法。

页表机制
  • 页表项:页号 物理块号 状态位 访问字段 修改位 外存地址
    • 状态位:表示是否已调入内存
    • 访问字段:记录本页在一段时间内被访问的次数,或多久未被访问
    • 修改位:标识该页在调入内存后是否被修改过
    • 外存地址:指出该页在外存上的地址,通常是物理块号,共调入该页参考
  • 缺页中断机构
    • 要访问页面不再内存中,产生一个缺页中断,请求操作系统将所缺的页调入内存。
    • 一条指令在执行器件,可能产生多次缺页中断。
  • 地址变换机构
    • 在这里插入图片描述

页面置换算法

  • 最佳置换算法:淘汰以后永不使用的页面或在最长时间内不再访问的页面
  • 先进先出页面置换算法(FIFO)
  • 最近最久位置用置换算法(LRU)
  • 简单时钟置换算法:只判断使用位,循环一圈,使用位为0则置换,否则变为0。
  • 时钟置换算法:找00,没有找01,找01时将其他被跳过的使用位1变0。重复即可找到

页面分配策略

驻留集大小
  • 分配给一个进程的存储量越小,任何时候驻留在主存中的进程数量就越多,从而可以提高处理机的时间利用效率。

  • 若一个进程在主存中的页数过少,则尽管有局部性原理,页错误率仍然会相对较高

  • 若页数过多,则由于局部性原理,给特定的进程分配更多主存空间对该进程的错误率没有明显影响。

  • 因此三大策略

    • 固定分配局部置换:每个进程分配一定数目的物理块,运行期间不变,缺页则置换
    • 可变分配全局置换:每个进程分配一定数目的物理块,操作系统自身保持一个空闲物理块队列,缺页,系统从空闲物理块队列取出一个分配给该进程。
    • 可变分配局部置换:每个进程分配一定数目的物理块,缺页时,只允许选一页换出。若频繁换出,则系统分配若干物理块,直至缺页率适当。若缺页率特别低,可减少分配给该进程的物理块。
调入页面的时机
  • 预调页策略
    • 以预测为基础,预计在不久之后便会被访问的页面预先调入内存。
  • 请求调页策略
    • 需要访问的页面不存在而提出请求,系统将页面调入内存
从何处调入页面
  • 系统拥有足够的对换区空间。全部对换区都可,以提高调页速度。需要将文件区复制到对换区
  • 系统缺少足够的对换区空间。不会被修改的文件从文件去调入,未修改不必换出,被修改调到对换区,以后需要再从对换区调入。
  • UNIX方式。与进程有关的文件都放在文件去,因此未运行过的页面都从文件区调入。曾经运行过但又被换出的页面,放在对换区。

抖动

  • 刚刚换入的页面马上又要换出主存。
  • 某个进程频繁访问的页面数目高于可用的物理页帧数目。虚拟内存技术可在内存中保留更多的进程以提高系统效率。在稳定状态,几乎主存的所有空间都被进程块占据,处理机和操作系统可以直接访问到尽可能多的进程。

工作集

  • 工作集是指在某段时间间隔内,进程要访问的页面集合。基于局部性原理,可以用最近访问过的页面来确定工作集。
  • 选择该时刻前面 δ \delta δ大小的页面组成工作集。
  • 原理:让操作系统跟踪每个进程的工作集,并为进程分配大于其工作集的物理块。落在工作集内的页面需要调入驻留集,落在工作集之外的可以从驻留集中换出。若还有空闲物理块,可再调一个进程到内存以增加多道程序数。

地址翻译

在这里插入图片描述

本节小结

为什么要引入虚拟内存?
  • 多道程序并发执行不仅使进程之间共享了处理器,而且同时共享了主存。然而,随着对处理器需求的增长,进程的执行速度会以某种合理平滑的方式慢下来。但是,若同时运行的进程太多,则需要很多的内存,当一个程序没有内存空间可用时,那么它甚至无法运行。所以在物理上扩展内存相对优先的条件下,应尝试逻辑上扩充内存
虚拟内存空间大小由什么因素决定?
  • 虚存的大小 ≤ \leq 内存容量和外存容量之和
  • 虚存的大小 ≤ \leq 计算机的地址位数能容纳的最大容量
虚拟内存怎么解决问题?会带来什么问题?
  • 使用外存来扩充内存空间,通过置换,使得整个系统在逻辑上能够使用一个远远超出物理内存大小的内存容量。因为虚拟内存技术调换页面时需要访问外存,会导致平均访存时间增加,若使用了不合适的替换算法,会大大降低系统性能。

本章疑难点

在这里插入图片描述


四、文件管理

文件系统基础

文件的概念

文件的定义
  • 文件是操作系统中的一个重要概念。文件是以计算机硬盘为载体的存储在计算机上的信息集合
  • 系统运行时,计算机以进程为基本单位进行资源的调度和分配;用户进行的输入、输出中,则以文件为基本单位。
  • 文件的组成
    • 存储空间中的数据
    • 包含分类和索引的信息
    • 访问权限的信息
  • 文件的结构
    • 数据项:数据项是文件系统中最低级的数据组织形式
      • 基本数据项:描述一个对象的某种属性的一个值
      • 组合数据项:多个基本数据项组成
    • 记录:记录是一组相关的数据项的集合
    • 文件:文件是指由创建者所定义的一组相关信息的集合
      • 记录式文件:有结构文件
      • 流式文件:无结构文件
文件的属性
  • 名称
  • 标识符
  • 类型
  • 位置
  • 大小
  • 保护
  • 时间、日期和用户表示
  • 所有文件的信息都保存在目录结构中,而目录结构保存在外村上,文件信息在需要时才调入内存
文件的基本操作
  • 创建文件:找到空间,在目录中为新文件创建条目
  • 写文件:执行系统调用,指明文件名称和要写入文件的内容
  • 读文件:执行系统调用,指明文件名称和要读入文件块的内存位置
  • 文件重定位:按某条件搜索目录,将当前文件位置设为给定值,不会读、写文件
  • 删除文件:找道目录项,使之成为空项,然后回收该文件所占用的存储空间
  • 截断文件:允许文件所有属性不变,并删除文件内容,将其长度设为0并释放其空间
文件的打开与关闭
  • 操作系统维护一个包含所有打开文件信息的表(打开文件表)
  • 整个系统表包含进程相关信息。一个进程打开一个文件,系统打开文件就会为打开的文件增加相应的条目。同时用一个文件打开计数器,记录多少进程打开了该文件。当计数器为0时,文件不在被使用,若被修改过,文件写回外存,并将系统打开文件表相应条目删除,最后释放文件的文件控制块(FCB)
  • 每个打开文件都有如下关联信息
    • 文件指针
    • 文件打开计数
    • 文件磁盘位置
    • 访问权限

文件的逻辑结构

文件的逻辑结构是从用户观点触发看到的文件的组织形式,文件的物理结构(存储结构)是从实现观点出发看到的文件在外存上存储组织形式。

  • 无结构文件(流式文件)

    • 以字节为单位,时有序相关信息项的集合。对记录的访问呢只能穷举搜索方式。管理简单
  • 有结构文件(记录式文件)

    • 顺序文件:文件中的记录一个接一个顺序排列,记录通常定长,在访问呢时顺序搜索文件。

      • 按存入时间的先后排列
      • 按关键字顺序排列
      • 只有顺寻文件才能存储在磁带上,并能有效地工作,但顺序文件对查找、修改、添加或删除单条记录地擦欧总比较困难
    • 索引文件:建立索引表加快检索速度,索引表本身是定长记录地顺序文件。

      • 在这里插入图片描述
    • 索引顺序文件:两种形式结合。将顺寻文件分为若干组,为顺序文件建立一张索引表,在索引表中为每组中的第一条记录建立一个索引项,其中含有该记录地关键字值和指向该记录地指针。

      • 在这里插入图片描述

      • N N N条记录分为 N \sqrt{N} N 组,索引表中有 N \sqrt{N} N 个表项,每组有 N \sqrt{N} N 条记录,在查找某关键字值得记录式,先顺序查找索引表, N / 2 \sqrt{N}/2 N /2次,再在文件中找 N / 2 \sqrt{N}/2 N /2次,共 N \sqrt{N} N

    • 直接文件或散列文件:给定记录的键值通过散列函数转换的键值直接决定记录的物理地址

目录结构

  • 从用户角度,目录在用户所需要的文件名和文件之间提供一种映射,目录管理实现“按名存取”。
  • 目录存取效率决定系统性能,目录提供用于控制访问文件的信息,目录管理通过树形结构实现
文件控制块和索引节点
  • 文件控制块( F C B FCB FCB)是用来存放控制文件所需的数据结构,以实现“按名存取”。 F C B FCB FCB的有序集合称为文件目录,一个 F C B FCB FCB就是一个文件目录项

    • 基本信息:文件名等
    • 存取控制信息:存取权限等
    • 使用信息:文件建立时间等
  • 索引节点:检索目录文件过程中,只用到了文件名,当找到一个目录项时,需要从目录项中读出该文件的物理地址。有的系统采用了文件名和文件描述信息分开的方法,文件描述信息单独形成一个索引节点的数据结构。在文件目录中的每个目录项仅由文件名和指向该文件所对应的节点指针构成

  • 存放在磁盘上的索引节点,称为磁盘索引节点

    • 文件主标识符
    • 文件类型
    • 文件存取权限
    • 文件物理地址
    • 文件长度
    • 文件链接计数
    • 文件存取时间
    • 打开时,磁盘索引节点复制到内存的索引节点中,便于使用,增加内容
      • 索引节点编号
      • 状态
      • 访问计数
      • 逻辑设备号
      • 连接指针
目录结构
  • 在目录层次上所需要执行的操作
    • 搜索
    • 创建文件
    • 删除文件
    • 显示目录
    • 修改目录
  • 单级目录结构:整个文件系统只建立一张目录表,每个文件占一个目录项

在这里插入图片描述

  • 两级目录结构:单极容易文件名称混淆,两级分为主文件目录和用户文件目录两级

在这里插入图片描述

  • 多级目录结构(树形目录结构):用户要访问某个文件时,用文件的路径名标识文件,文件路径名是个字符串,由从根目录出发到所找文件通路上所有目录名与数据文件名用分隔符“/”连接而成。从根目录出发为绝对路径,每次从根目录浪费时间,引入当前目录。进程对个文件的访问都是相对于当前目录进行的。.

在这里插入图片描述

  • 无环图目录结构:树形目录结构能便于实现文件分类,但不便于实现文件共享。复杂,需要计数器

文件共享

基于索引节点的共享方式(硬链接)
  • 文件的物理地址及其他的文件属性等信息,放在索引节点中,在文件目录中只设置文件名及指向索引节点的指针,索引节点中还有一个连接技术count。
利用符号链实现文件共享(软连接)
  • 在新文件中只包含被连接文件的路径名,这方式称为符号连接。
  • 在利用符号链方式实现文件共享时,只有文件的拥有者才拥有指向其索引节点的指针。符号连删除无影响,文件拥有者将其删除,则无法使用。
  • 缺点:需根据文件路径名查找目录,多次读盘,符号连索引节点也耗费磁盘空间
  • 优点:网络共享只需提供该文件所在及其的网络地址及该机器中的文件路径

硬链接和软链接都是文件系统中的静态共享方法,在文件系统中还存在两个进程同时对同一个文件进行操作,该共享称为动态共享

文件保护

  • 口令保护、加密保护和访问控制等方式
访问类型
  • 读、写、执行、添加、删除、列表清单
访问控制
  • 为每个目录和文件增加一个访问控制表 ( A C L ) (ACL) (ACL),以规定每个用户名及其所允许的访问类型
  • 优点:解决复杂的访问方法
  • 去点:长度无法预计并且可能导致复杂的空间管理,使用精简的访问列表解决问题
  • 精简访问列表
    • 拥有者:创建文件的用户
    • 组:一组需要共享文件且具有类似访问的用户
    • 其他:系统内的其他用户
  • 口令指用户在建立一个文件时提供一个口令,系统为其建立 F C B FCB FCB时附上相应口令,同时告诉允许共享该文件的其他用户。用户请求访问时必须提供口令
    • 缺点:口令直接存在系统内部,不安全
    • 优点:时间和空间开销不多
  • 密码指用户对文件进行加密,文件被访问时需要使用密钥。
    • 优点:保密性强,节省了存储空间
    • 缺点:编码和译码需要花费一定时间

本节小结

什么是文件?什么是文件系统?
  • 文件是以计算机硬盘为载体的存储在计算机上的信息集合,它的形式多种多样。
  • 操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统,由三部分组成:与文件管理有关的软件、被管理的文件及实施文件管理所需的数据结构
文件系统要完成哪些工作?
  • 实现对文件的基本操作,文件共享和文件保护。
  • 管理与磁盘的信息交换
  • 完成文件逻辑结构和物理结构上的变换
  • 组织文件在磁盘上的存放
  • 采取好的文件排放顺序和磁盘调度方法以提高整个系统的性能。

在这里插入图片描述

错题精选

  • UNIX操作系统中,输入/输出设备视为特殊文件
  • 文件的逻辑结构是为了方便用户而设计的
  • F A T 32 FAT32 FAT32的文件目录项不包括文件控制块的物理位置
  • UNIX操作系统中,文件的索引结构放在索引节点
  • 可以提高文件访问速度的是
    • 提前读
    • 延迟写
    • 为文件分配连续的簇
    • 采用磁盘高速缓存

文件系统实现

文件系统层次结构

用户调用接口
文件目录系统
  • 管理活跃文件目录表、管理读写状态信息表、管理用户打开文件表i
存取控制验证系统
  • 比较用户访问要求和CPU
逻辑文件系统与文件信息缓冲区
  • 根据文件的逻辑结构将用户要读写的罗记录转换成中文件结构的相应块好
物理文件系统
  • 逻辑记录所在的相对块号切换成实际的物理地址
辅助分配模块
  • 管理辅存空间
设备管理程序模块
  • 分配设备、分配设备读写缓冲区、磁盘调度、启动设备、中断、释放设备读写缓冲区

目录实现

  • 线性列表:存储文件名和数据块指针的线性表
  • 哈希表:使用哈希函数
    • 查找迅速,插入和删除简单
    • 需要预备措施,对表长的依赖性。为减少I/O操作,把但概念使用的文件目录复制到内存。

文件实现

文件分配方式
  • 连续分配:每个文件在磁盘上占有一组连续的块

  • 连接分配:采用离散分配方式,消除了外部碎片,显出提高磁盘利用率。

    • 隐式链接:每个文件对应一个磁盘块链表,磁盘块分布在磁盘的任何地方,除最后一个盘块外,每个排块都有指向下一个盘的指针。这些指针对用户透明。
    • 显示连接:把用于链接文件各物理块的指针,从每个物理块的末尾中取出来,显示地存放在内存的一张连接表中。该表在整个磁盘仅设置一张,文件分配表(FAT)。每个表项中存放对应块的下一个链接指针。
    • F A T FAT FAT表在系统启动时就会被装入内存,因此查找 F A T FAT FAT是在内存中进行的,不仅提高检索速度,减少磁盘访问次数。
  • 索引分配:连接分配解决外部碎片和文件大小管理的问题,但链接分配不能有效支持直接访问。每个文件都有其索引块,这是一个磁盘块地址的数组。索引块的第 i i i个条目指向文件的第 i i i个块。目录名包括索引块的地址。

    • 每个文件必须有一个索引块,存储空间开销大。
    • 链接方案:一个索引块通常为一个磁盘块,本身直接读写,将多个索引块链接
    • 多层索引:第一层索引块指向第二层索引块
    • 混合索引:多种索引分配方式相结合

在这里插入图片描述

文件存储空间管理
  • 文件存储器空间的划分于初始化

    • 一个文件存储在一个文件卷中,文件卷可以是物理盘的一部分,也可以是整个物理盘,支持超大型文件的文件卷也可由多个物理盘组成。

    在这里插入图片描述

    • 在一个文件卷中,文件数据信息的空间(文件区)和存放文件控制信息FCB的空间(目录区)是分离的。
  • 文件存储器空间管理

    • 空闲表法:连续分配方式,为每个文件分配一块连续的存储空间。系统为外存上的所有空闲区建立一张空闲盘块表,每个空闲区对应与一个空闲表项。
    • 空闲链表法:空闲盘块链和空闲盘区链
      • 盘块:将磁盘上所有空闲空间以盘块为单位拉成一条链。系统从链首,依次摘下适当数目的空闲盘快分配给用户。回收依次插入盘块链末尾。
      • 盘区:所有空闲盘区(包含若干盘块)拉成一条链。每个盘区有本盘区大小信息和指向下一个空闲盘区的指针。通常采用首次适应算法分配
    • 位示图法:采用二进制的一位俩表示磁盘中一个盘块的使用情况
      • 顺序扫描图,找出一个或一组值为0的二进制位
      • 将找到的二进制位转换成盘块号。
      • 修改位示图
    • 成组链接法:结合空闲表和空闲链表,把顺序的n个空闲扇区地址保存在第一个空闲扇区内,其后一个空闲扇区内则保存另一顺序空闲扇区的地址。
      • 如此继续,直至空闲扇区均已链接,系统只需保存一个指向第一个空闲扇区的指针。
      • 在这里插入图片描述

本节小结

在目录中查找某个文件可以使用什么方法?
  • 线性列表法或哈希表法。
文件的逻辑结构和物理结构有何区别?单个文件的逻辑结构和物理结构是否在着某些制约关系?
  • 文件的逻辑结构是用户可见的结构,即用户使用文件的结构。
  • 文件的物理结构是文件在存储器上的组织结构,它表示一个文件在辅存上安置、链接、编目的方法。它和文件的存取方法以及辅存设备的特性都有着密切的联系。
  • 单个文件的逻辑结构和物理结构之间虽无明显的制约关系或关联关系,但如果物理结构选择不慎,也很难体现出逻辑结构特点,如一个逻辑结构是顺序结构,而物理结构是隐式链接结构的文件,理论上可以很快找出某条记录的地址,实际磁盘上一块一块的找。

在这里插入图片描述


磁盘组织与管理

磁盘的结构

  • 磁盘是由表面涂有磁性物质的金属或塑料构成的圆形盘片,通过一个称为磁头的导体线圈从磁盘存取数据。磁盘盘面上的数据存储在一组同心圆中,称为磁道。磁道又划分为几百个扇区,一个扇区称为一个盘块

  • 磁盘地址用 柱面号 盘面号 扇区号 表示

  • 固定头磁盘/活动头磁盘

  • 固定盘磁盘/可换盘磁盘

在这里插入图片描述

磁盘调度算法

  • 寻道时间 T s T_s Ts。跨越 n n n条磁道的时间和启动磁臂的时间 s s s

    • T s = m × n + s T_s=m\times n +s Ts=m×n+s m m m是与磁盘驱动器速度有关的常数,约0.2 ms,磁臂启动约2 ms
  • 延迟时间 T r T_r Tr,磁头定位到某一次磁道的扇区所需的时间,设磁盘转速为 r r r

    • T r = 1 2 r T_r=\frac{1}{2r} Tr=2r1
  • 传输时间 T t T_t Tt,从磁盘读出或像磁盘写入数据所经历的时间,取决于每次所读/写的字节数和磁盘转速

    • T t = b r N T_t=\frac{b}{rN} Tt=rNb r r r为磁盘每秒转数, N N N为一个磁道上的字节数。
  • 总平均存取时间为 T a = T s + 1 2 r + b r N T_a=T_s+\frac{1}{2r}+\frac{b}{rN} Ta=Ts+2r1+rNb

  • 先来先服务算法( F C F S FCFS FCFS)

  • 最短寻找时间优先算法( S S T F SSTF SSTF)

  • 扫描算法(( S C A N SCAN SCAN)电梯调度算法):初始到顶直接返回,方向改变

  • 循环扫描算法( C − S C A N C-SCAN CSCAN):初始到顶从头再来,方向不变

在这里插入图片描述

磁盘的管理

磁盘初始化
  • 一个新的磁盘只是一个含有磁性记录材料的空白盘。再磁盘能存储数据之前,它必须分成扇区以便磁盘控制器能进行读和写操作,称为低级格式化(物理分区)
    • 低级格式化为每个扇区采用特别的数据结构
  • 对物理分区进行逻辑格式化,操作系统将初始的文件系统数据结构存储到磁盘上,这些数据结构包括空闲和已分配的空间及一个初始为空的目录。
引导快
  • 计算机启动时需要运行一个初始化程序(自举程序),它初始化CPU、寄存器、设备控制器和内存等,接着启动操作系统。

  • 自举程序通常保存在 R O M ROM ROM中,避免改变自举代码而需要改变 R O M ROM ROM硬件的问题,只在 R O M ROM ROM中保留很小的自举装入程序,完整功能保存在磁盘的启动块上。

  • 拥有启动分区的磁盘称为启动磁盘

坏块
  • 对于简单磁盘,如电子继承驱动器(IDE),坏扇区可手工处理
  • 对于复杂的期盼,如小型计算机系统接口(SCSI),其控制维护一个磁盘坏块链表。

本节小结

磁盘上进行依次读写操作需要哪几部分时间?其中哪部分时间最长?
  • 寻道时间、延迟时间、传输时间
  • 寻道时间占用最长,因为需要移动磁臂

在这里插入图片描述

本章疑难点

磁盘结构
  • 引导控制块包含系统从该分区引导操作系统所需要的信息。UFS为引导块,NTFS为分区引导扇区
  • 分区控制块包含分区详细信息,UFS为超级块,NTFS为主控文件表
内存结构
  • 内存分区表包含所有安装分区的信息。
  • 内存目录结构用来保存进来访问过的目录信息。对安装分区的目录,可以包含一个指向分区的指针
  • 系统范围内的打开文件表:包含每个打开文件的FCB复制信息和其他信息
  • 单个进程的打开文件表:包括一个指向系统范围内已打开文件表中合适条目和其他信息的指针

五、输入/输出管理

I/O管理概述

I/O设备

  • I/O设备类型
    • 人机交互类外部设备
    • 存储设备
    • 网络通信设备
按传输速率分类
  • 低速设备
  • 中速设备
  • 高速设备
按信息交换的单位分类
  • 块设备:信息的存取总是以数据块为单位的,所以存储信息的设备称为块设备
  • 字符设备:数据输入/输出的设备为字符设备,传输的基本单位是字符

I/O控制方式

程序直接控制方式
  • 计算机从外部设备读取数据到存储器,每次读一个字的数据。对读入的每个字,CPU需要对外设状态进行循环检查,直到确定该字已经在I/O控制器的数据寄存器中。造成CPU的浪费。
中断驱动方式
  • 允许I/O设备主动打断CPU的运行并请求服务,从而解放CPU,使得其向I/O控制器发送都命令后,可以继续做其他有用的工作
  • 但由于数据中的每个字在存储器与I/O控制器之间的传输都必须经过CPU,仍会浪费较多时间
DMA方式
  • 在I/O设备和内存之间开辟直接的数据交换通路,彻底解放CPU
    • 基本单位是数据块
    • 所传送的数据,是从设备直接送如内存的,或者相反
    • 仅在传送一个或多个数据块的开始和结束时,才需CPU干预,整块数据的传送是在DMA控制器下完成的
  • DMA控制器
    • 命令/状态寄存器
    • 内存地址寄存器
    • 数据寄存器
    • 数据计数器

在这里插入图片描述

通道控制方式
  • I/O通道是指专门负责输入/输出的处理机。I/O通道方式是DMA方式的发展,进一步减少CPU的干预。
  • I/O通道与一般处理机的区别
    • 通道指令的类型单一,没有自己的内存,通道所执行的通道程序是放在主机的内存中的,也就是通道与CPU共享内存
  • I/O通道与DMA方式的区别
    • DMA需要CPU来控制传输的数据块大小、传输的内存位置
    • 通道方式这些信息由通道控制。

在这里插入图片描述

I/O子系统的层次结构

  • 用户层I/O软件:实现与用户交互的接口,用户可直接调用在用户层提供的、与I/O操作有关的库函数,对设备进行操作
  • 设备独立性软件:实现用户程序与设备驱动器的统一接口、设备命令、设备保护及设备分配与释放等,同时为设备管理和数据传送提供必要的存储空间
    • 执行所有设备的公有操作
    • 向用户层提供统一接口
  • 设备驱动程序:与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序。
  • 中断处理程序:用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完并恢复被中断进程的现场后,返回到被中断进程。
  • 硬件设备:I/O设备通常包括一个机械部件和一个电子部件。

本节小结

I/O管理要完成哪些功能?
  • 状态跟踪
  • 设备存取
  • 设备分配
  • 设备控制

在这里插入图片描述

I/O核心子系统

I/O子系统概述

  • 由于I/O设备种类繁多,功能和传输速率差异巨大,因此需要多种方法来进行设备控制。这些方法共同组成了操作系统内核的I/O子系统,他将内核的其他方面从繁重的I/O设备管理中解放出来。

I/O调度概念

  • I/O调度就是确定一个好的顺序来执行这些I/O请求。应用程序所发布的系统调用的顺序不一定是最佳选择,所以需要I/O调度来改善系统整体性能。

高速缓冲与缓冲区

磁盘高速缓存
  • 一种是在内存中开辟一个单独的存储空间作为磁盘高速缓存,大小固定。
  • 另一种是把未利用地内存空间作为一个缓冲池,供请求分页系统和磁盘I/O时共享
缓冲区
  • 目的

    • 缓和CPU和I/O设备间速度不匹配地矛盾
    • 减少对CPU地中断频率,放宽对CPU中断相应时间的限制。
    • 解决基本数据单元大小不匹配的问题
    • 提高CPU和I/O设备之间的并行性。
  • 实现方法

    • 采用硬件缓冲器,但由于成本太高,除关键部位,一般不采用硬件缓冲器
    • 采用缓冲器(位于内存区域)
  • 单缓冲

  • 双缓冲

  • 循环缓冲

  • 缓冲池

高速缓存与缓冲区对比

在这里插入图片描述

设备分配与回收

设备分配概述
  • 独占式使用设备
  • 分配式使用设备
  • 以SPOOLing方式使用外部设备
设备分配的数据结构
  • 设备控制表 ( D C T ) (DCT) (DCT)

在这里插入图片描述

  • 控制器控制表( C O C T COCT COCT)
  • 通道控制表 ( C H C T ) (CHCT) (CHCT)
  • 系统设备表( S D T SDT SDT)

在这里插入图片描述

设备分配的策略
  • 设备分配原则:既要充分发挥设备的使用效率,又要避免造成进程死锁,还要将用户程序和具体设备隔离开。
  • 设备分配方式:静态分配(主要用于独占设备)/动态分配在进程执行过程中根据执行需要进行
  • 设备分配算法:先请求先分配、优先级高者优先
设备分配的安全性
  • 安全分配方式
    • 每当进程发出I/O请求后便阻塞,直到其I/O操作完成被唤醒
  • 不安全分配方式
    • 进程在发出I/O请求后继续运行,需要时又发出第二个、第三个I/O请求,仅当进程所求的设备已被另一进程占用时,才进入阻塞态
逻辑设备名到物理设备名的映射
  • 逻辑设备表( L U T LUT LUT), ( L U T ) (LUT) (LUT)表项包括逻辑设备名、物理设备名和设备驱动程序入口地址
  • 整个系统只设置一张 L U T LUT LUT,不允许有相同逻辑设备名
  • 每个用户一张 L U T LUT LUT,用户登录时,系统便为该用户建立一个进程,同时也为之建立一张 L U T LUT LUT,并把该表放入进程的PCB中。

SPOOLing技术(假脱机技术)

  • 输入井和输出井
    • 指在磁盘上开辟出的两个存储区域。输入井模拟脱机输入时的磁盘,用于收容I/O设备输入的数据。输出并模拟脱机输出的磁盘,用于收容用户程序和输出数据
  • 输入缓冲区和输出缓冲区
    • 是在内存中开辟的两个缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井。输出缓冲区用于暂存输出井送来的数据,以后再传送到输出设备。
  • 输入进程和输出进程
    • 输入进程模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井。
    • 输出进程模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备

本节小结

当处理机和外部设备速度差距较大时,并且此时不想让其中一方等待,有什么办法解决?
  • 可以采用缓冲技术来缓解处理机与外部设备速度上的矛盾,即在某块地方设立一片缓冲区,外部设备与处理机的输入/输出都经过缓冲区,这样外部设备和处理机就都不用互相等待
什么是设备的独立性?引入设备的独立性有什么好处?
  • 设备独立性是指用户在编程序时使用的设备和实际设备无关。一个程序应独立于分配给它的某类设备的具体设备,即在用户程序中只指明I/O使用的设备类型即可。
  • 方便用户编程
  • 使程序运行不受具体机器环境的限制
  • 便于程序移植

在这里插入图片描述

本章疑难点

  • 分配设备。根据I/O请求中的物理设备名查找系统设备表( S D T SDT SDT),从中找出该设备的 D C T DCT DCT,再根据 D C T DCT DCT中的设备状态字段,可知该设备是否正忙。若忙,便将请求I/O进程的PCB挂到设备队列上;若空闲,则按照一定的算法计算设备分配的安全性,若安全,则将设备分配给请求进程,否则仍将其PCB挂到设备队列上。

  • 分配控制器。系统把设备分配给请求I/O的进程后,再到其 D C T DCT DCT中中出与该设备连续的控制器的 C O C T COCT COCT,从 C O C T COCT COCT中的状态字段可知该控制器是否忙碌。若忙,则请求I/O进程的PCB挂到该控制器的等待队列上;若空闲,则将控制分配给进程。

  • 分配通道。在该 C O C T COCT COCT中又可找道与该控制器链接的通道 C H C T CHCT CHCT,再根据 C H C T CHCT CHCT内的状态信息,可知该通道是否忙碌。若忙,则将请求I/O的进程挂到该通道的等待队列上;若空闲,则将该通道分配给进程,只有在上述三者都分配成功时,这次设备的分配才算成功。然后,便可启动该I/O设备进行数据传送。

  • S D T − > D C T − > C O C T − > C H C T SDT->DCT->COCT->CHCT SDT>DCT>COCT>CHCT,必须设备可用,控制器可用,通道可用

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值