操作系统内核与设计原理笔记

以下内容为笔者对操作系统内核与设计原理的一些概括性处理

操作系统内核与设计原理笔记

第1章 计算机系统概述
1.1 基本构成
  • 一条计算机是由处理器、存储器和输入/输出部件构成的。其中有四个主要的结构化部件,分别是处理器,内存、输入/输出模块、系统总线。其中处理器的功能是控制计算机的操作,执行数据处理功能;内存用于存储数据和程序;输入/输出模块用于再计算机和外部环境之间移动数据;系统总线为处理器、内存和输入/输出模块件提供通信的设施。
  • 处理器中有个内部寄存器,分别为MAR(存储器地址寄存器)和MBR(存储器缓冲寄存器);MAR用于确定下一次读/写的存储器地址,MBR用于存放要写入存储器的数据或者从存储器中读取的数据
1.2 微处理器的发展演化
  • 微处理器与传统的中央处理器相比,具有体积小、重量轻、易模块化。微处理器能够再一个芯片上容纳一个处理器,随着发展,微处理器逐步发成成了多重处理器(每个芯片上容乃了多个处理器),片上系统(CPU与高速缓存再一个芯片上,同时系统中的多数其他硬件也在这个芯片上,如数字信号处理器、GPU、I/O装置和内存。
1.3 指令的执行
  • 指令周期:一个单一的指令需要的处理成为一个指令周期
  • PC保存下一次要取的指令地址,IR保存取得的指令
  • 指令的动作可分为四类:处理器-存储器、处理器-I/O、数据处理、控制
1.4 中断
  • 中断是允许其他模块(I/O、存储器)中断处理器正常处理过程的机制。他最初是用于提高处理器效率一种手段,例如处理I/O设备与处理器速度不匹配的问题。

  • 常见的中断类型有:程序中断、时钟中断、I/O中断、硬件失效中断

  • 利用中断功能,处理器可以再I/O操作的执行过程中执行其他指令

  • 多个中断的处理方法:第一种是当正在处理一个中断时,禁止再发生中断。第二种方法时定义中断优先级,允许高优先级的中断打断低优先级的中断处理程序的运行

1.5 存储器的层次结构
  • 存储器的三个重要特性:价格、容量和访问时间
  • 为了同时满足上诉三个特性,提出了一种不依赖于单一的存储组件或技术,而是使用存储器的层次结构。该层次结构为:寄存器->告诉缓存->内存->磁盘->磁带,满足美味的价格递减、容量递增、存取时间递增、处理器访问存储器的频率递减的特点。容量较大、价格较便宜的的慢速存储器时容量较小、价格较贵的快速存储器的后背。
  • 内存时计算机中主要的内部存储器系统。
  • 非易失性的外部存储器也称为二级存储器或辅助存储器。
1.6 高速缓存
  • 高速缓存对操作系统不可见。
  • 什么是高速缓存:利用局部性原理,记载处理器和内存之间提供一个容量小而速度快的存储器,称为高速缓存。
  • 高速缓存缓解了处理器速度与内存访问速度不匹配的问题。它试图使访问速度接近现有最快的存储器,同时保持价格便宜的大存储容量。
  • 当高速缓存中的块大小增长时,由于局部性原理,命中率增加,但是当块增长到一定大小时,会导致新取得的块被使用的可能性低于被换出的块的使用的可能性,从而导致命中率降低。
  • 映射函数确定这个块将占据哪个高速缓存单元,置换算法确定当高速缓存满的时候,将哪个高速缓存单元中的块置换出去。映射函数设计的越灵活,就越有更大的余地来设计出可以增大命中率的置换算法,但也会导致逻辑电路越复杂。
  • 高速缓存设置为多级是一种较为常见的做法。
1.7 直接内存存取(DMA)
  • 针对I/O操作有三种可能的技术:可编程I/O、中断驱动I/O、直接内存存取
  • 可编程I/O通过想相应的I/O模块发命令执行与I/O相关的指令,该过程中并不中断处理器,也就是说,该进程应出去忙等待。
  • 中断驱动I/O:有处理器想I/O模块发送I/O命令。然后处理器继续做其他一些工作。
  • 可编程I/O与中断驱动I/O都受限于处理器,降低效率
  • DMA使用系统总线中一个独立的模块,不依赖于处理器。
1.8 多处理器和多喝计算机组织结构
  • 对称多处理器、多核计算机
第2章 操作系统概述
2.1 操作系统的目标和功能
  • 操作系统:操作系统是控制应用程序执行的程序,并充当应用程序和计算机硬件的接口
  • 操作系统的三个目标:方便、有效、扩展能力
  • 操作系统是系统程序的一部分,为程序员屏蔽了硬件细节,并为程序员使用系统提供方便的接口
  • 操作系统提供的服务:程序开发(各种各样的工具和服务、如编辑器和调试器)、程序运行、I/O设备访问、文件访问控制、系统访问、错误检测和响应、记账
  • 计算机系统(不是操作系统)的三个重要接口:指令系统体系结构(ISA、定义了计算机遵循的机器语言指令系统)、应用程序二进制接口(ABI、定义了程序间二进制可移植性的标准、操作系统的系统调用接口,以及在系统中通过ISA能使用的硬件资源和服务。ABI包含了应用程序在这个操作系统下运行时必须遵守的编程约定)、应用程序编程接口(API、允许应用程序访问系统的硬件资源和服务,这些服务由用户及ISA和高级语言库调用来提供)
  • 操作系统实际上也是一组计算机程序,负责管理计算机中的资源。
2.2 操作系统的发展
  • 串行处理
  • 简单批处理系统
  • 多道批处理系统:多道程序设计或多任务处理(多道程序设计是一种处理操作,它在两个或多个程序间交错处理每个进程)
  • 分时系统
2.3 主要成就
  • 操作系统开发中的4个重要的理论发展:进程、内存管理、信息保护和安全、调度和资源管理

  • 进程:一个正在执行的程序;计算机中正在运行的程序的一个实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行线索、一个当前状态和一组相关的系统资源所描述的活动单元

  • 计算机系统发展的三条主线:多道程序批处理操作、分时和实时事务系统。分时和事务处理系统的主要差别在于后者局限于一个或几个应用,在这两个系统中,系统的响应时间是最重要的。

  • 产生在很少见的事件序列发生时才会出现的错误的原因有:不正确的同步、失败的互斥、不确定的程序宝座、死锁。

  • 进程可以视为三部分组成:一段可执行的程序、程序所需要的相关数据(变量、工作空间、缓冲区等)、程序的执行上下文(又称进程状态、是操作系统用来管理和控制进程所需的内部数据。这种内部信息和进程是分开的,因为操作系统信息不允许被进程直接访问。上下文包括操作系统管理进程及处理器正确执行进程所需要的所有信息:包括各种处理器寄存器的内容,如程序计数器和数据寄存器;还包括操作系统使用的信息,如进程优先级及进程是否在等待特定I/O事件的完成)

  • 操作系统担负着5个基本的存储器管理责任:进程隔离、自动分配和管理、支持模块化程序设计、保护和访问控制、长期存储。操作系统使用虚存和文件系统机制来满足这些要求。虚存机制允许程序从逻辑的角度访问存储器,而不用考虑物理内存上可用的空间数量。文件系统实现了长期存储。

  • 与操作系统相关的安全和保护问题可以分为四类:可用性、保密性、数据完整性、认证

  • 资源分配和调度策略需要考虑三个因素:公平性、有差别的响应性、有效性

2.4 现代操作系统的特征
  • 至今为止的大多数操作系统都有一个单体内核,操作系统应该提供的大多数功能由这些大内核提供,包括调度、文件系统、网络、设备驱动器、存储管理等
  • 微内核体系结构只给内核分配一些最基本的功能,包括地址空间、进程间通信和基本的调度,其他的操作系统服务都是由运行在用户态下且与其他应用程序类似的进程提供的。
  • 多线程技术:线程(可分派的工作单位),进程(一个或多个线程和相关系统资源(如包含数据和代码的存储器空间、打开的文件和设备)的集合。
  • 对称多处理器,多处理器的存在对用户是透明的。
  • 分布式操作系统
第3章 进程描述和控制

操作系统必须交替执行多个进程,在合理的响应事件范围内使处理器的利用率最大。操作系统必须按照特定的策略给进程分配资源,同时避免死锁。操作系统可以支持进程间的通信和用户创建进程,它们对构造应用程序很有帮助。

3.1 什么是进程
  • 操作系统以一种有序的方式管理应用程序的执行的目的:资源对多个应用程序时可用的,物理处理器在多个应用程序间切换以保证所有程序都在执行中,处理器和I/O设备能得到充分利用。
  • 所有现代操作系统采用的方法都是依据对应于一个或多个进程存在的应用程序执行的一种模型
  • 进程的两个基本元素:程序代码,和代码相关联的数据集。
  • 进程执行时,任意给定一个时间,进程都可以唯一的表征为以下元素:标识符、状态、优先级、程序计数器、内存指针、上下文数据、I/O状态信息、记账信息。这些信息都存放在进程控制块(PCB)中。
  • PCB由操作系统创建和管理
3.2 进程状态
  • 进程的轨迹(trace):进程执行的指令序列
  • 五状态模型:运行态、就绪态、阻塞/等待态、新建态(该进程的信息保存在内存的进程表中,但进程自身还未进入内存,等待长程调度)、退出态
  • 进程创建的原因:新的批处理作业、交互登录、操作系统因为提供一项服务而创建、由现有的进程派生
  • 进程派生:操作系统为另一个进程的显示请求创建一个进程
  • 进程终止的原因:正常完成、超过时限、无可用内存、越界、保护错误、算术错误、时间超出、I/O失败、无效指令、特权指令、数据误用、操作员或操作系统干涉、父进程终止、父进程请求
  • 如果按照优先级方案分派进程,则维护多个就绪队列,每个优先级一个队列
  • 挂起进程:进程不能立即执行;进程可能是或不是正在等待一个事件;为阻止进程执行,可以通过代理吧这个进程至于挂起状态,代理可以是进程自己,也可以是父进程或操作系统;除非代理显示地命令系统进行状态转换,否则进程无法从这个状态转移。
  • 挂起的原因:交换(操作系统需要释放足够的内存空间,以调入并执行处于就绪状态的进程)、其他OS原因(操作系统可能挂起后台进程或工具程序进程,或被怀疑导致问题的进程)、交互式用户请求(调试)、定时(周期性的进程)、父进程请求
3.3 进程描述
  • 系统资源包括:处理器、I/O设备和内存
  • 操作系统维护着四种不同类型的表:内存、I/O、文件和进程。四扎根表以某种方式连接起来或交叉引用。操作系统使用位于其外的某些基本环境的配置数据进行创建表。
  • 内存表用于跟踪内存和外存,必须包括:分配给进程的内存,分配给进程的外存,内存块或虚拟内存块的任何保护属性、管理虚拟内存所需要的任何信息
  • I/O表管理计算机系统中的I/O设备和通道
  • 文件表提供关于文件是否存在、文件在外存中的位置、当前状态和其他属性的信息。
  • 与每个进程相关联的还有操作系统用于控制进程的许多属性,这些属性集合称为进程控制块。
  • 程序、数据、栈和属性的集合称为进程映像
  • 进程控制块中的典型元素:进程标识信息(标识符)、处理器状态信息(用户可见寄存器、控制和状态寄存器、栈指针)、进程控制信息(调度和状态信息、数据结构、进程间通信、进程特权、存储管理、组员的所有权和使用情况)
  • 进程控制块的作用:进程控制块是操作系统中最重要的数据结构。每个进程控制块包含操作系统所需要的关于进程的所有信息
3.4 进程控制
  • 两种执行模式:非特权态(用户态)、特权态(系统态、控制态、内核态)
  • 使用两种模式的原因:保护操作系统和重要的操作系统表不受用户程序的干涉。在内核态下,软件具有对处理器及所有指令、寄存器和内存的控制能力,这一级的控制对用户程序不是必需的,并且为了安全起见也不是用户程序可访问的
  • 进程创建的步骤:给新进程分配一个唯一的进程标识符、给进程分配空间、初始化进程控制块、设置正确的连接、创建或扩充其他数据结构
  • 进程切换:进程切换可以在操作系统从当前正在运行的进程中获得控制权的任何时刻发生。
  • 进程切换的原因:中断(interrupt)、陷阱(trap)、系统调用
  • 中断和陷阱的区别:中断和当前正在运行的进程无关的某种类型的外部事件相关,如完成一次I/O操作;陷阱与当前正在运行的进程所产生的错误或异常条件相关,如非法的文件访问。
  • 保护的上下文环境包括所有中断处理可能改变的信息和恢复被中断程序时所需要的信息,以保存处理器状态信息中的进程控制块部分,包括了PC、其他处理器寄存器和栈信息。
3.5 操作系统的执行
  • 无进程的内核
  • 在用户进程中执行:操作系统从根本上说时用户调用的一组例程,在用户进程环境中执行,用于实现各种功能
  • 基于进程的操作系统
第4章 线程
4.1 进程和线程
  • 进程包含两个特点: 资源所有权、调度/执行。分派的单位通常称为线程或轻量级进程,而拥有资源所有权的单位通常仍称为进程或任务
  • 多线程:多线程是指操作系统在单个进程内支持多个并发执行路径的能力。
  • 在多线程环境中,进程被定义为资源分配的单位和一个被保护的单位
  • 线程的优点:
    • 在一个已有进程中创建一个新线程比创建一个全新进程所需的时间要少很多
    • 终止一个线程比终止一个进程花费的时间少
    • 同一个进程内线程间切换比进程间切换花费时间少
    • 线程提高了不同执行程序间通信的效率
  • 使用线程的例子:前台和后台工作,异步处理,执行速度,模块间程序结构
  • 调度和分派是在线程基础上完成的
  • 线程同步:一个进程中的所有线程共享同一个地址空间和诸如打开的文件之类的其他资源。一个线程对资源的任何修改都会影响同一个进程中其他线程的环境。
4.2 用户级和内核级线程
  • 在一个纯粹的用户级线程软件中,有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在

  • 使用用户级线程的优点

    • 线程切换不需要内核态特权,因此,进程不需要为了线程管理切换到内核态,这节省了两次状态转换的开销
    • 调度可以是应用程序相关的
    • 用户级线程可以在任何操作系统中运行,不需要对底层内核进行修改以支持用户级线程
  • 使用用户级线程的缺点:

    • 在典型的操作系统中,许多系统调用都会引起阻塞
    • 在纯粹用户级线程策略中,一个多线程应用程序不能利用多处理技术
  • 内核级线程:在一个纯粹的内核级线程软件中,有关线程管理的所有工作都是内核完成的,应用程序部分没有进行线程管理的代码,只有一个到内核线程设施的应用程序编程接口

  • 内核级线程的缺点:在把控制从一个线程传送给同一个进程内的另一个线程,需要到内核状态的切换

  • 混合方法:线程创建完全在用户空间中完成,线程的调度和同步也在应用程序中进行。一个应用程序中的多个用户级线程被映射到一些内核级线程上。

4.3 多核和多线程
  • 多核系统上的软件性能:加速比 = 单处理器上程序的运行时间/在N个并行处理器上程序运行的时间= 1 ( 1 − f ) + f N \frac{1}{(1-f)+\frac{f}{N}} (1f)+Nf1
  • 在多喝系统中获益的应用程序:原生多线程应用程序、多进程应用程序、Java应用程序、多实例以用程序
第5章 并发性:互斥和同步
  • 并发包括很多设计问题,其中有进程间通信、资源共享与竞争(例如内存、文件、I/O访问)、多个进程活动的同步以及分配给进程的处理器时间等
  • 互斥解决方案:信号量、管程、消息传递
  • 关键术语:
    • 原子操作:一个函数或动作由一个或多个指令的序列实现,对外是不可见;也就是说,没有其他进程可以看到其中间状态或者中断此操作
    • 临界区:是一段代码,在这段代码中进程将访问共享资源,当有一个进程在这段代码中运行的,这个进程就不能在这段代码中执行
    • 死锁:两个或两个以上的进程因其中的每个进程都在等待其他进程做完某些事情而不能继续执行,这种情形称为死锁
    • 活锁:两个或两个以上的进程为了响应其他进程的变化而持续改变自己的状态但不做有用的工作,这种情形称为活锁
    • 互斥:当一个进程在临界区访问共享资源时,其他进程不能进入该临界区访问任何共享资源,这种情形称为互斥
    • 竞争条件:多个线程或者进程在读写一个共享数据时,结果依赖于他们执行的相对时间,这种情形称为竞争条件
    • 饥饿:是指一个可运行的进程尽管能继续运行,但被调度程序无限期的忽视,而不能被调度执行的情形
5.1 并发的原理
  • 交替和重叠都可以视为并发处理的一个实例,并且都代表了同样的问题。全局资源的共享充满了危险,操作系统很难对资源进行最优化分配,定位程序设计错误是非常困难的。
  • 操作系统的资源包括:处理器时间、存储器、文件、I/O设备
  • 操作系统的设计和管理问题:操作系统必须能够跟踪不同的进程、操作系统必须为每个活跃进程分配和释放各种资源,操作系统必须保护每个进程的数据和物理资源,一个进程的功能和输出结构必须与执行速度无关
  • 互斥的要求
    • 必须强制实施互斥
    • 在一个非临界区停止的进程不能干涉其他进程
    • 决不允许出现需要访问临界区的进程被无限延迟的情况,即不会出现死锁或饥饿
    • 当没有进程在临界区时,任何需要进入临界区的进程必须能够立即进入
    • 对相关进程的执行速度和处理器的数目没有任何要求和限制
    • 一个进程驻留在临界区的中的时间必须时有限的
5.2 互斥:硬件的支持
  • 中断禁用
  • 忙等待:进程在得到临界区访问权之前,它只能继续执行测试变量的指令来得到访问权
  • 专用机器指令:保证动作的原子性
    • 比较和交换指令(compare and swap instruction 或者 compare and exchange instruction)
    • exchange指令
  • 机器指令方法的特点
    • 适用于在单处理器或共享内存的多处理器上的任何数目的进程
    • 非常简单且易于证明
    • 可用于支持多个临界区,每个临界区都可以用它自己的变量定义
    • 使用的忙等待
    • 可能饥饿和死锁
5.3 信号量
  • 信号量:用于进程间传递信号的一个整数值。在信号量上只有上过操作可以进行:初始化、递减和递增,这三种操作都是原子操作。递减操作可以用于阻塞一个进程,递增操作可以用于解除阻塞的一个进程。也称为计数信号量或一般信号量
  • 二元信号量:只取0和1值的信号量。
  • 互斥量:类似于二元信号量,区别在于为其加锁和为其解锁的进程必须为同一个进程
  • 强信号量和弱信号量:采用先进先出策略的信号量称为强信号量,其余为弱信号量
5.4 管程
  • 管程:管程时由一个或多个过程、一个初始化序列和局部数据组成的软件模块,其主要特点有:局部数据变量只能被管程的过程访问,任何外部过程都不能访问;一个进程通过管程的一个过程进入管程;在任何时候,只能由一个进程在管程中运行
  • 管程通过使用条件变量提供对同步的支持
5.5 消息传递
  • 阻塞/无阻塞send,阻塞/无阻塞receive

  • 直接寻址(send原语包含目标进程的标识号,而receiver原语由两种处理方式。一种是要要求进程显式指定袁锦程,另一种不可能指定所期望的源进程),间接寻址(消息发动到信箱)

  • 信箱的所有权问题:对于端口,它通常归接收进程所有,并由接收进程创建。对于通用的信箱,操作系统提供一个创建信箱服务,信箱归创建者所有,在这种情况下它们也同该进程一个终止,或者也可以视为由操作系统所有,在这种情况下销毁信箱需要一个显式命令。

5.6 消费者/生产者问题
第6章 并发:死锁和饥饿
6.1 死锁原理
  • 死锁:一组相互竞争系统资源或进行通信的进程间的“永久”阻塞

  • 可重用资源:指一次只能供一个进程安全地使用,并且不会由于使用而耗尽的资源。可重用资源的例子包括处理器、I/O通道、内存和外存、设备,以及诸如文件、数据库和信号量之类的数据结构

  • 可消耗资源:指可以被创建和销毁的资源。例子由中断、信号、消息和I/O缓冲区中的信息

  • 死锁的条件:互斥、占有且等待、不可抢占、循环等待

  • 死锁的处理方法:第一种方法采用某种策略来消除条件中的一个的出现来预防死锁。第二种方法是基于资源分配的当前状态做动态选择来避免死锁。第三种方法是试图检测死锁的存在并且从死锁恢复出来。

6.2 死锁预防
  • 互斥:不可能禁止
  • 占有且等待:可以要求进程一次性地请求所有需要的资源
  • 不可抢占:如果占有某些资源的一个进程进一步申请资源时被拒绝,则该进程必须释放它最初占有的资源,如果有必要,可以再次申请这些资源和另外的资源。另一种方法是,如果一个进程请求当前被另一个进程占有的资源,则操作系统可以抢占另一个进程,要求它释放资源。只有在资源状态可以很容易地保存和恢复的情况下,这种方法才是实用的。
  • 循环等待:循环等待条件可以通过定义资源类型的线性顺序进行预防
6.3 死锁避免
  • 在死锁预防中,通过约束资源请求,使得4个死锁条件中至少有一个被破坏。但这会导致低效的资源使用和低效的进程执行。而死锁避免则通过名字的选择,确保永远不会达到死锁点,因此死锁避免比死锁预防允许更多的并发。在死锁避免中,是否允许当前资源分配请求时通过判断该请求是否可能导致死锁来决定的。也就是说,死锁避免需要知道将来的进程资源请求的情况

  • 两种死锁避免方法:1、如果一个进程的请求会导致死锁,则不启动这个进程。2、如果一个进程的增加的资源请求会导致死锁,则不允许此分配

  • 资源分配拒绝(银行家算法)

6.4 死锁检测

对于死锁检测来说,只要有可能,被请求的资源就被分配给进程。操作系统周期性的的执行一个算法检测循环等待条件。

  • 死锁的恢复:
    • 取消所有的死锁进程。操作系统最常用的方法
    • 在每个死锁进程回滚到前面定义的某些检查点,并且重新启动多有进程
    • 连续取消死锁进程知道不在存在死锁
    • 连续抢占资源直到不在存在死锁
  • 死锁恢复的策略3和4的选择原则可以采用
    • 目前为止消耗最小的处理器时间最少
    • 目前为止产生的输出最少
    • 预计剩下的时间最长
    • 目前为止分配的资源总量最少
    • 优先级最低
6.5 一种综合的死锁策略

在不同情况下使用不同的策略

  • 一种技术:将资源分成几组不同的资源类;为预防在资源类之间由于循环等待产生死锁,可使用前面定义的线性排序策略;在一个资源类中,使用该类资源最合适的算法
  • 可交换空间、进程资源、内存、内部资源
    • 可交换空间:通过要求一次性分配所有请求的资源来预防死锁,就像占有等待预防策略一样
    • 进程资源:使用死锁避免策略
    • 内存:基于抢占的预防时最合适的策略
    • 内部资源:可以使用基于资源排序的预防策略
6.6 哲学家就餐问题
  • 基于信号量的解决方案
    • 只允许四个哲学家进入餐厅,即新增一个信号量room,其值为4
  • 基于管程的解决方案
    • 哲学家都是先取左边的叉子,后取右边的叉子。与信号量不同的时,使用管程实现不会发生死锁,因为在同一时刻只有一个进程进入管程
第7章 内存管理
  • 内存管理:在单道程序设计系统中,内存被划分成两部分:一部分供操作系统使用,一部分供当前正在执行的程序使用。在多道程序设计系统中,必须在内存中进一步细分出“用户”部分,以满足多个进程的要求。细分的任务由操作系统动态完成,这称为内存管理。

  • 术语

    • 页框(frame):内存中一个个固定长度的块
    • 页(page):一个固定长度的数据块,存储在二级存储器中。数据页可以临时复制到内存的页框中
    • 段:一个编程的数据块,存储在二级存储器中。这个段可以临时复制到内存的一个可用区域内,或者可以将一个端分为许多页,将每页单独复制到内存中
7.1 内存管理的需求
  • 重定位:处理器硬件和操作系统软件必须能够通过某种方式把程序代码中的内存访问转换成实际的物理内存地址,并反映程序在内存中的当前位置
  • 保护:每个进程都应该受到保护,以免被其他进程有意或无意地干涉。必须在运行时检查进程产生的所有内存访问,以确保它们只访问了分配给该进程的内存空间。通常用户进程不能访问操作系统的任何部分,不论是程序还是数据,通常也泵跳转到另一个进程中的指令。内存保护的需求必须由处理器(硬件)来满足,而不是由操作系统(软件)来满足
  • 共享:任何保护机制都必须具有一定的灵活性,以允许多个进程访问内存的同一部分
  • 逻辑组织:大多数程序被组织成模块,某些模块是不可修改的,某些模块包含可以修改的数据。如果操作系统和计算机硬件能够有效的处理以某种模块的形式组织的用户程序和数据,会带来很多好处。(可以独立地编写和编译模块;通过适度的额外开销,可以给不同的模块以不同的保护级别;可以引入某种机制)。最容易满足这些需求的工具是分段。
  • 物理组织:计算机存储器至少要被组织成两级,称为内存和外存。
7.2 内存分区
  • 内存管理最基本的操作是由处理器把程序装入内存中执行

  • 固定分区:

    • 固定大小的分区的难点
      • 程序可能太大而泵放到一个分区中,在这种情况下,程序员必须使用覆盖技术设计程序
      • 内存的利用率非常低
    • 可以使用大小不等的分区来缓解上面的两个问题,但是不能完全解决这两个问题
  • 动态分区

    • 对于动态分区,分区长度和数目是可变。当进程被装入内存中,系统会给它分配一块和它所需容量完全相等的内存空间
  • 放置算法:最佳匹配、首次适配和下次适配。三者差别在于:最佳适配选择与大小最接近的块;首次适配从开始扫描空闲块,选择大小足够的第一个可用快;下次适配从上一次放置的位置开始扫描内存,选择下一个大小足够的可用块。首次适配算法不仅是最简单的,而且通常也是最好和最快的

  • 伙伴系统

    • 伙伴系统是一个合理的折中方案,克服了固定分区和可变分区方案的缺陷。在伙伴系统中,可用内存块的大小为2^k个字
  • 重定位

    • 逻辑地址是指与当前数据在内存中的物理分配地址无关的访问地址,在执行对内存的访问必须把它转换成物理地址。相对地址是逻辑地址的一个特例,是相对于某些已知点的存储单元。物理地址或绝对地址是数据在内存中的实际位置。
    • 一个特殊的处理器寄存器,有时也称为基址寄存器,被载入程序在内存中的起始地址。还有一个界限寄存器指明程序的终止位置。当程序被装入内存或当该进程的映像被换入时,必须设置这两个寄存器
7.3 分页
  • 分页时一个简单的基址寄存器时不够的,操作系统需要为每个进程维护一个页表。页表给出了该进程的每一页对应的页框的位置。
  • 分页和固定分区的区别:采用分页技术的分区相当小,一个程序可以占据多个分区,并且这些分区不需要是连续的
7.5 分段
  • 分段是细分用户程序的另一种可选方案。
  • 采用分段技术,可以把程序和其相关的数据划分到几个段中
  • 分段类似于动态分区,与动态分区的区别在于:在分段中,一个程序可以占据多个分区,并且这些分区不要求是连续的
  • 分页对用户是透明的,分段对用户是可见的,并且作为组织程序和数据的一种方便手段提供给程序员
第8章 虚拟内存
8.1 硬件和控制结构
  • 分页和分段的两个特点:

    • 进程中所有内存访问都是逻辑地址,这些逻辑地址在运行时动态地被转换成物理地址。这意味着一个进程可以被换入或换出内存,使得进程可以在执行过程中的不同时刻占据内存中的不同区域。
    • 一个进程可以划分成许多块,在执行过程中,这些块不需要连续地位于内存中。动态运行时地址转换和页表和段表的使用使这一点成为可能。
  • 进程执行中的任何时候都在内存的部分称为进程的常驻集

  • 两种提高系统利用率的方法

    • 在内存中保留多个进程。由于对任何特定的进程都仅仅装入它的某些块,因此就有足够的空间来放置更多的进程。
    • 进程可以比内存的全部空间还大
  • 由于一个进程只能在内存中执行,因此这个存储器称为实存储器,简称实存。但是程序员用户感觉到的是一个更大的内存,通常它被分配在磁盘上,这就称为虚拟内存,简称虚存。

  • 局部性原理说明了虚拟内存方案是可行的

  • 为了使虚存比较实用并且有效,需要两方面的因素

    • 首先,必须有对所采用的分页或分段方案的硬件支持
    • 第二,操作系统必须有管理页或段在内存和辅存之间移动的软件
  • 分页

    • 每个进程都有唯一的一个页表,每个页表项需要一些控制位来表达该页是否在内存中,是否修改过等信息
    • 页表结构:多级页表、倒排页表
    • 转换检测缓冲区:原则上,每个虚存访问可能引起两次物理内存访问:一次取相爷的页表项,一次取需要的数据。因此,简单的虚拟内存方案会导致内存访问时间的加倍。为克服这一问题,大多数虚拟内存方案为页表项使用一个特殊的高速缓存,通常称为转换检测缓冲区(TLB)。
  • 分段:

    • 分段允许程序员把内存视为由多个地址空间或段组成,段的大小是不相等的,并且是动态的。内存访问以段号和偏移量的形式组成的地址。
    • 使用分段的优点
      • 简化不断增长的数据结构的处理
      • 允许程序独立地改变或重新编译,而不要求整个程序集合重新链接和重新加载
      • 有助于进程间的共享
      • 有助于保护
    • 每个进程有唯一的一个段表
  • 段页式

    • 分页对程序员是透明的,它消除了外部碎片,因而可以更有效地使用内存。分段对程序是可见的,它具有处理不断增长的数据结构的能力以及支持共享和保护的能力。
    • 在段页式的系统中,用户的地址空间被程序员分为许多段。每个段依次划分成许多固定大小的页,页的长度等于内存中页框的大小。
    • 每个进程使用一个段表和一些页表,每个进程段使用一个页表。
    • 对一个虚拟地址,处理器使用段号部分来检索进程段表以寻找该段的页表,然后虚拟地址的页号部分用于检索页表并查找响应的页框号
  • 保护和共享:分段有助于实现保护与共享机制

8.2 操作系统软件
  • 操作系统的内存管理设计取决于三个基本方面的选择:是否使用虚存技术;是使用分页还是使用分段,或者是两者的结合;为各种存储管理特征采用的算法。

  • 任何特定的策略的总性能取决于内存的大小、内存和外存的相对速度、竞争资源的进程大小和数目,以及单个程序的执行情况

  • 读取策略确定一个页何时取人内存,常用的两种方法是请求分页和预先分页

  • 放置策略决定一个进程块驻留在实存中的什么地方

  • 置换策略用于处理在必须读取一个新页时,应该置换内存中的哪一页。

    • 页框锁定:内存中的某些页框可能是被锁定的,如果一个页框被锁定时,当前保存在该页框中的页就不能被置换
    • 基本算法
      • 最佳:OPT
      • 最近最少使用:LRU
      • 先进先出:FIFO
      • 时钟:Clock
    • 页缓冲机制
  • 驻留集管理

    • 驻留集大小需要考虑的因素:
      • 分配给一个进程的内存越少,在任何时候驻留在内存中的进程数就越多
      • 如果一个进程在内存中的页数比较少,尽管有局部性原理,缺页率仍然相对较高
      • 在特定的进程分配的内存空间超过一定大小后,由于局部性原理,该进程的缺页率没有明显的变化
    • 采用两种策略:固定分配策略,可变分配策略
    • 置换范围:局部置换策略,全局置换策略
    • 可变分配、局部范围策略的关键要素,用于确定驻留集大小的原则和变化的时间安排。比较常见的策略是工作集策略,可变采样间隔的工作集
  • 清除策略用于确定何时将一个修改过的页写回辅存。通常有两种选择:请求式清除和预约式清除

  • 加载控制:加载控制会影响到驻留在内存中的进程数目,这称为系统并发度

  • 进程挂起的可能性

    • 最低优先级进程
    • 缺页中断进程
    • 最后一个被激活的进程
    • 驻留集最小的进程
    • 最大空间的进程
    • 具有最大剩余执行窗口的进程
第9章 单处理器调度
9.1 处理器调度的类型
  • 处理器调度的目标是以满足系统目标(如响应时间、吞吐率、处理器效率)的方式,把进程分配到一个或多个处理器执行。

  • 调度类型:长程调度(决定加入待执行的进程池中)、中程调度(决定加入部分或全部在内存中的进程集合)、短程调度(决定哪一个可运行的进程将被处理器运行)

  • 创建新进程时,执行长程调度,决定是否把进程添加到当前活跃的进程集合中。中程调度是交换功能的一部分,它决定是否把进程添加到那些至少部分在内存中并且可以被执行的进程集合中。短程调度真正决定下一次执行哪一个就绪进程

  • 从根本上说,调度属于队列管理方面的问题,用来再排队环境中减少延迟和优化性能

  • 长程调度控制着系统的并发度。在长程调度中,调度程序决定什么时候操作系统能够接纳一个进程或者多个进程;同时,调度程序必须决定接受哪个或哪些作业,并将其转变成进程。

  • 换入决策将考虑换出进程的存储需求

  • 短程调度程序页称为分派程序,执行得最频繁,并且精确地决定下一次执行哪一个进程

  • 当可能导致当前进程阻塞或可能抢占当前运行进程的事件发生时,调用短程调度程序。这类事件包括:时钟中断、操作系统调用、I/O中断、信号

9.2 调度算法
  • 短程调度准则:短程调度的的主要目标是按照优化系统一个或多个方面行为的方式来分配处理器时间
    • 面向用户的准则:面向用户的准则与单个用户或进程感知到的系统行为相关。例如交互式系统中的响应时间。周转时间、响应时间、最后期限、可预测性
    • 面向系统的准则重点是处理器的使用效果和效率。例如吞吐量,也就是进程完成的速度。吞吐量、处理器利用率、公平性、强制优先级、平和资源
  • 优先级的使用:一组就绪队列
  • 选择调度策略:FCFS、轮转、SPN、SRT、HRRN、反馈
    • FCFS:先来先服务。FCFS执行长进程比执行短进程更好;相对于I/O密集型的进程,它更有利于处理密集型的进程
    • 轮转:基于时钟的抢占策略。处理器密集型的进程不公平地使用了大部分处理器时间,从而导致I/O密集型的进程性能降低,使用I/O设备低效,响应时间变化大
    • 最短进程优先(SPN):如果不断提供更短的进程,长进程可能处于饥饿的状态。另一方面,尽管SPN减少了对长作业的偏向,但是由于缺少抢占机制,它在分时系统或事务处理环境下仍然不理想。
    • 最短剩余时间(SRT):相较于SPN增加了抢占机制
    • 最高相应比优先
    • 反馈法:简单方案的长进程的周转时间可能惊人的增加。如果频繁地有新作业进入系统,就有可能出现饥饿的情况。为补偿这一点,可以按照队列改变抢占次数决定进程运行时间。另一种补救方法是当一个进程在它的当前队列中等待服务的时间超过一定的时间量后,把它提升到一个优先级较高的队列
第11章 I/O管理和磁盘调度
11.1 I/O设备
  • 计算机系统中参与I/O的外部设备大体上可以分成以下三个类别:人可读、机器可读、通信。其主要差别在于:数据速率、应用、控制的复杂性、传送单位、数据表示、错误条件
11.2 I/O功能的组织
  • 三种技术:程序控制I/O,中断驱动I/O,直接存储器访问(DMA)
  • I/O功能的发展;
    • 处理器直接控制外围设备
    • 增加了控制器或I/O模块
    • 采用了中断模式
    • I/O模块通过DMA直接控制存储器
    • I/O模块具有一个单独的处理器(I/O通道)
    • I/O模块有自己的局部存储器(I/O处理器)
11.3 操作系统设计问题
  • 设计I/O机制时,有两个最重要的目标:效率和通用性
  • I/O功能的逻辑结构:逻辑I/O、设备I/O、调度和控制
11.4 I/O缓冲
  • 为避免死锁,在发出I/O请求之前,参与I/O操作的用户存储空间必须被立即锁定在内存中,即使这个I/O操作正在排队,并且在一段时间内不会被执行。同样,在输出时,该进程也被锁定,不会被换出
  • 为避免这些开销和低效操作,有时为了方便起见,在输入请求发出前就开始执行输入传送,并且在输出请求发出一段时间之后才开始执行输出传送,这项技术称为缓冲
  • 单缓冲
    • 当用户进程发出I/O请求时,操作系统给该操作分配一个位于内存中系统部分的缓冲区
    • 操作系统必须记录给用户进程分配系统缓冲区的情况
  • 双缓冲
    • 作为对单缓冲方案的改进,可以给操作分配两个系统缓冲区。在一个进程往一个缓冲区传送数据的同时,操作系统正在清空另一个缓冲区
  • 循环缓冲:使用两个以上的缓冲区
  • 缓冲的作用:缓冲是用来平滑I/O需求的峰值的一种技术,但是当进程的平均需求大于I/O设备的服务能力时,缓冲再多也不能让I/O设备与这个进程一直并驾齐驱。
11.5 磁盘调度
  • 磁盘性能参数:寻道时间、旋转延迟、存取时间(寻道时间+旋转延迟)、传输时间
  • 磁盘调度策略:
    • 操作系统为每个I/O设备维护一条请求队列
    • 随机调度、先进先出、优先级、最短服务时间有限、SCAN、LOOK、C-SCAN、N-step-SCAN、FSCAN
11.6 RAID
  • 如果使用一个组件对性能的影响有限,那么可以通过并行使用多个组件来获得额外的性能提高
  • 独立侧畔冗余阵列(RAID)
    • RAID是一组物理磁盘驱动器,操作系统把它视为一个单个的逻辑驱动器
    • 数据分布在物理驱动器阵列中
    • 使用冗余的磁盘容量保存奇偶检验信息,从而保证当一个磁盘失效时,数据具有可恢复性
  • I/O的性能是以数据传送能力或移动数据的能力,以及I/O请求率或I/O请求的完成能力
11.7 磁盘高速缓存
第12章 文件系统
12.1 概述
  • 整个文件管理系统都被当做是操作系统的一部分
  • 文件系统提供了与辅助存储相关的资源的抽象,文件系统允许用户去创建被称为文件的数据集合。
  • 文件的理想属性:长期存在、进程间可共享、结构
  • 操作系统队文件操作的提供的功能接口:创建、删除、打开、关闭、读、写
  • 文件结构:
    • 域:域是基本数据单元。一个域包含一个指。域可以通过其长度和数据类型来描述
    • 记录:记录是一组相关的域的集合
    • 文件:文件时一组相似记录的集合,它被用户和应用程序视为一个实体,并可以通过名字访问。文件有唯一的文件名,可以被创建或删除(有些文件系统中,文件是按照域而不是记录来组织的,这时可以说文件是一组域的集合)
    • 数据库:数据库是一组相关数据的集合,它的本质特征是数据元素间存在明确的关系,并且可供不同的应用程序使用。数据库本身是由一种或多种类型的文件组成的。通常,数据库管理系统是独立于操作系统的
  • 文件管理系统:文件管理系统是一组系统软件,为使用文件的用户和应用程序提供服务。典型情况下,文件管理系统是用户或应用程序访问文件的唯一方式,它使得用户或程序员不需要为每个应用程序开发专用软件,并且给系统提供了控制最重要资源的方法
  • 文件管理系统需要满足以下目标:
    • 满足数据管理的要求和用户的需求,包括存储数据和执行上述操作的能力
    • 最大限度地保证文件中的数据有效
    • 优化性能
    • 为各种类型的存储设备提供I/O支持
    • 减少或消除丢失或破坏数据的可能性
    • 向用户进程提供标准I/O接口例程集
    • 在多用户系统中为多个用户提供I/O支持
  • 文件系统架构:设备驱动(设备驱动程序通常是操作系统的一部分)、基本文件系统(物理I/O层,处理磁盘间或磁带系统间的交换的数据块)、基本I/O管理(负责所有文件I/O的初始和终止)、逻辑I/O(使用户和应用程序能够访问到记录)、访问方法(它在应用程序和文件系统及保存数据的设备之间提供了一个标准接口)
  • 文件管理功能
12.2 文件组织和访问
  • 文件组织是指文件中记录的逻辑结构,它由用户访问记录的方式确定。文件在辅存中物理组织取决于分块策略和文件分配策略。
  • 选择文件组织时,有以下重要原则:访问快速、易于修改、节约存储空间、维护简单、可靠性。这些原则的相对优先级取决于将要使用这些文件的应用程序。这些原则可能是矛盾的
  • 文件的基本组织:堆、顺序文件、索引顺序文件、索引文件、直接或散列文件
    • 堆是最简单的文件组织形式。数据按它们到达的顺序被收集,每条记录由一串数据组成。记录可以有不同的域,或者域相似但是顺序不同。堆的目的仅仅是积累大量的数据并保存数据。当保存的数据大小和结构不同时,这种类型的文件空间使用情况较好,能较好的用于穷举查找,且易于修改。
    • 顺序文件是最常用的文件组织形式。在这类文件中,每条记录都是用一种固定的格式。所有记录都具有相同的长度,并且由相同数目、长度固定的域按特定的顺序组成。有一个域是关键域。顺序文件组织是唯一可以很容易地存储在磁盘和磁带中文件组织。对于查询或更新记录的交互式应用,顺序文件表现出很差的性能。
    • 索引顺序文件保留了顺序文件的关键特征:记录按照关键域的顺序组织起来。同时它害增加了两个特征:用于支持随机访问的文件索引和溢出文件。索引文件中每条记录由两个域组成:关键域和指向主文件的指针。
      • 主文件中每条记录包含一个附加域。附加域对用户是不可见的,它是指向溢出文件的一个指针。当往文件中插入一条记录时,它被添加到溢出文件,然后修改主文件中逻辑顺序位于这条新记录之前的记录,使其包含执行溢出文件中新记录的指针。索引顺序文件有时候也会按批处理的方式合并溢出文件
    • 索引文件一般都摒弃了顺序性和关键字的概念,只能通过索引来访问记录。其结果是对记录的放置位置不再由限制,只要至少由一个索引的指针指向这条记录即可,还可以使用可变的记录
      • 完全索引包含主文件中每条记录的索引项,部分索引值包含哪些有感兴趣域的记录的索引项。
      • 当往主文件中增加一条新记录时,索引文件必须全部更新。
      • 索引文件自身被组织成一个顺序文件。
    • 直接文件或散列文件:直接文件和散列文件开发直接访问磁盘中任何一个地址已知的块的能力。每一套记录都需要一个关键域,到那时没有顺序排序的概念。直接文件使用基于关键字的散列
12.3 B树
12.4 文件目录
  • 与任何文件管理系统和文件集合相关联的时文件目录,目录包含关于文件的信息,这些信息包括属性、位置和所有权。目录本身是一个文件,并且可以被各种文件管理例程访问。目录在用户和应用所知道的文件名与文件自身之间提供了一种映射。
  • 文件目录的信息单元:文件名、文件类型、文件组织;卷、起始地址、使用大小、分配大小;所有者、访问信息、许可的行为;数据创建、创建者身份、最后一次读访问的日期、最后一次读用户的身份、最后一次修改的日期、最后一次修改者的身份、最后一次备份的日期、当前使用
  • 最简单的目录结构形式是一个目录项列表,每个文件一个目录项
  • 文件结构的需求:查找、创建文件、删除文件、显示目录、修改目录
  • 命名:路径名+文件名
12.5 文件共享
  • 访问权限:无、知道、执行、读、追加、更新、改变保护、删除
  • 不同类用户:特定用户、用户组、全部
  • 同时访问:锁机制(对文件或对记录,同之前的读者-写者问题)
12.6 记录组块
  • 记录时访问结构化文件的逻辑单元,而块时与辅助存储进程性I/O操作的基本单位。为执行I/O操作,记录必须组织成块。
  • 三种组块方法:固定组块、可变长度跨越式组块、可变长度非跨越式组块
    • 记录长度固定的顺序文件最常用方式固定组块
    • 如果采用记录组块技术,记录组块技术和虚存硬件会相互影响
12.7 辅助存储管理
  • 在辅助存储中,一个文件是由许多块组曾的。操作系统或文件管理系统负责给文件分配块

  • 文件分配:预分配、动态分配

  • 分区大小:

    • 邻近空间可以提高性能
    • 数目角度的小分区会增加用于管理分配信息的表的大小
    • 使用固定大小的分区可以简化空间的再分配
    • 使用可变大小的分区或固定大小的小分区,可以减少由于超额分配而产生的未使用存储空间的浪费
  • 可变大规模连续分区:可以提供较好的性能。大小可变避免了浪费,并且使文件分配表比较小,但是者又导致空间很难再次利用

  • 块:小的固定分区提供了更大的灵活性,但是为了分配,它们可能需要较大的表或更复杂的结构

  • 块选择策略:首次适配,最佳适配,最近适配

  • 文件的分配方法:连续、链接、索引

  • 空闲空间的管理

    • 当前还没有分配给任何文件的空间也必须管理起来
    • 除了文件分配表以外,还需要一个磁盘分配表
    • 磁盘分配表的技术:位表、链接空闲区、索引、空闲块列表
      而块时与辅助存储进程性I/O操作的基本单位。为执行I/O操作,记录必须组织成块。
  • 三种组块方法:固定组块、可变长度跨越式组块、可变长度非跨越式组块

    • 记录长度固定的顺序文件最常用方式固定组块
    • 如果采用记录组块技术,记录组块技术和虚存硬件会相互影响
12.7 辅助存储管理
  • 在辅助存储中,一个文件是由许多块组曾的。操作系统或文件管理系统负责给文件分配块

  • 文件分配:预分配、动态分配

  • 分区大小:

    • 邻近空间可以提高性能
    • 数目角度的小分区会增加用于管理分配信息的表的大小
    • 使用固定大小的分区可以简化空间的再分配
    • 使用可变大小的分区或固定大小的小分区,可以减少由于超额分配而产生的未使用存储空间的浪费
  • 可变大规模连续分区:可以提供较好的性能。大小可变避免了浪费,并且使文件分配表比较小,但是者又导致空间很难再次利用

  • 块:小的固定分区提供了更大的灵活性,但是为了分配,它们可能需要较大的表或更复杂的结构

  • 块选择策略:首次适配,最佳适配,最近适配

  • 文件的分配方法:连续、链接、索引

  • 空闲空间的管理

    • 当前还没有分配给任何文件的空间也必须管理起来
    • 除了文件分配表以外,还需要一个磁盘分配表
    • 磁盘分配表的技术:位表、链接空闲区、索引、空闲块列表
  • 卷:一组在辅助存储上可寻址的扇区的集合,操作系统或应用程序用卷来进行数据存储

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值