本文是结合操作系统专业课本,以及王道考研课程资料所总结的复习笔记,希望对大家有所帮助!
另外操作系统这门课程内容本来就比较杂而多,本文笔记相对更精简概括。
第一章 操作系统概论
操作系统(Operating System,简称OS)是管理系统资源、控制程序执行、改善人机界面、提供各种服务、合理组织计算机工作流程和为用户有效使用计算机提供良好运行环境的一种系统软件。
操作系统管理技术
- 资源复用
是指多个进程共享物理资源,包括分割资源为较多更小单位的空分复用和分时轮流使用资源的时分复用。
进程是有资格获得系统资源的独立主体。 - 资源虚化
利用一类事物模拟另外一类事物,造成另外一类事物数量更多或容量更大的假象。 - 资源抽象
是利用软件封装复杂的硬件或软件设施,简化资源应用接口的一种资源管理技术。
操作系统特征
- 并发性
是指计算机系统中同时存在若干个运行着的程序,这些程序交替、穿插地执行。 - 共享
是指操作系统中的资源可被多个并发执行的进程共同使用,而不是被其中某一个程序所独占。 - 异步性
也称随机性,在多道程序环境中,程序的执行不是一贯到底,而是“走走停停”,何时“走”,何时“停”是不可预知的。 - 虚拟性
将物理上的一个实体变成逻辑上的多个对应物,或把物理上的多个实体变成逻辑上的一个对应物。
操作系统分类
- 批处理操作系统
用户把要计算的应用问题编成程序,连同数据和作业说明书一起交给操作员,操作员集中一批作业,输入到计算机中。然后,由操作系统来调度和控制作业的执行。这种批量化处理作业的操作系统称为批处理操作系统。 - 分时操作系统
允许多个联机用户同时使用一台计算机系统进行计算的操作系统称为分时操作系统。 - 实时操作系统
当外界事件或数据产生时,能接收并以足够快的速度予以处理,处理的结果又能在规定时间内来控制监控的生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。 - 通用操作系统
如果一个操作系统兼有批处理、分时和实时处理的全部或两种功能,则该操作系统称为通用操作系统。
用户接口
- 程序接口
程序接口又称为应用编程接口API(Application Programming Interface),供程序员在编制程序时以程序语句或指令的形式调用操作系统的服务和功能。程序接口由一组系统调用(System Call)组成, 系统调用是操作系统的组成部分,用于管理和控制系统中软硬件资源的共享使用。 - 系统调用
扩充机器功能、增强系统能力、方便用户使用而在内核中建立的函数,它是用户程序或其它系统程序获得操作系统服务的唯一途径,系统调用也称为广义指令。 - 操作接口
操作接口又称作业级接口,是操作系统为用户提供的操作控制计算机工作和提供服务手段的集合。
操作接口是非编译即可使用的;
程序接口需要经过编译方可使用;
操作系统构件
- 内核
操作系统内核是对硬件进行首次抽象的一层软件,也称为硬件抽象层,用于隐藏硬件复杂性,为上层软件提供简洁、统一的硬件无关的接口。 - 进程
进程是一个可并发执行的具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统进行资源分配和保护的基本单位。 - 线程
线程是进程内可并发执行的一个独立的程序模块。是操作系统进行处理器调度和分派的基本单位。 - 管程
管程是用来管理共享资源的一种对象。管程封装了对共享资源进行同步、互斥操作的数据结构和一组过程。
操作系统的结构
- 单体式结构
操作系统由过程集合构成,链接成一个大型可执行二进制程序。 - 层次式结构
层次式结构是把操作系统划分为内核和若干模块(或进程),这些模块(或进程)按功能的调用次序排列成若干层次,各层之间只能是单向依赖或单向调用关系,即低层为高层服务,高层可以调用低层的功能。 - 客户机/服务器与微内核结构
客户机/服务器与微内核结构将操作系统分成两大部分,一部分是运行在用户态并以客户机/服务器方式活动的进程;另一部分是运行在核心态的内核。除内核部分外,操作系统的其他部分被分成若干个相对独立的进程。
操作系统运行模式
- 非进程模式(内核模块调用模式)
以非进程模式运行的操作系统,其功能组织成一组例行程序,操作系统服务例程以系统调用的形式与用户进程代码结合在一起执行,构成形式上的单一进程。这种模式也称为内核模块调用模式或系统调用模式。 - 进程模式
进程模式将操作系统组织成一组系统进程,即操作系统功能是这些系统进程集合运行的结果,这些系统进程也称为服务器或服务器进程,它们与用户进程或其他服务器进程之间构成了客户机/服务器关系。
疑难问题
1.进程轮流使用处理器与多个打印任务共享打印机的区别。
(1)知识点:操作系统的共享性特征。资源共享分为同时共享与互斥共享。
(2)应用知识点:进程轮流使用处理器属于同时共享、资源分时复用,也叫并发共享,并发进程释放处理器时,其任务通常并未结束。多个进程可以同时使用处理器。
多个打印任务共享打印机属于资源的互斥共享,也叫顺序共享,在一个打印任务结束之前,另一个打印任务不能开始。即多个打印任务不能同时使用打印机。
2.资源虚化与资源抽象的区别
(1)资源虚化强调从逻辑上扩充资源数量。
(2)资源抽象强调封装、隐藏软硬件内部细节,简化资源应用接口。
3.并发性、并行性与顺序性的区别
(1)并发性是指多个事件或活动在同一时间段内(一个时间段)开始或者说发生,注意不是完成或者结束。
(2)并行性是指多个事件或活动在同一时刻(一个时间点)开始或者说发生,注意不是完成或者结束。
(3)顺序性是指一个事件或活动结束前,另一个事件或活动不可以开始。在任何一个时刻或者时间段内,只会有一个事件或活动在进行。其它事件或活动要么已经结束,要么尚未开始。区分三者的前提是要准确定义事件或活动或任务的边界,然后选取怡当的时间点或时间间隔。
第二章 处理器管理
处理器的指令系统
1.指令分类
(1)数据传输类指令:完成处理器与存储器之间、处理器与I/O设备之间的数据传送操作。
(2)数据处理类指令:完成运算器对数据的算术操作、逻辑操作等计算功能。
(3)控制类指令:这类指令可以改变指令执行顺序及控制资源的使用权限。
2.特权指令与非特权指令
-
特权指令是仅提供给操作系统核心程序使用的指令,执行特权指令时,操作系统可以对整个系统进行控制。特权指令与共享资源的使用有关。
-
用户程序只能执行非特权指令,如果试图执行特权指令,会产生保护性中断,转交给操作系统特殊处理程序处理。
-
只有操作系统能执行全部指令。
-
内核程序–>特权指令–>内核态/核心态/管态
-
应用程序–>非特权指令–>用户态/目态
-
内核态转为用户态需要一条修改PSW的特权指令
-
用户态转为核心态需要中断
中断
中断是指程序执行过程中,当发生某个事件时,中止CPU上现行程序的运行,引出处理该事件的程序执行的过程。
中断源分类
- 强迫性中断事件
强迫性中断事件不是正在运行的程序所期待的,而是由于随机发生的某种事故或外部请求信号所引起的。
正在运行的程序不可预知强迫性中断事件发生的时机。 - 自愿性中断事件
自愿性中断事件是正在运行的程序所期待的事件。
这种事件由程序执行访管指令而引发,表示用户进程请求操作系统服务。 - 外中断
外中断是指来自处理器和主存之外的中断 - 内中断
内中断是指来自处理器和主存内部的中断 - 软件中断处理程序
①保护硬件未保护的处理器状态
②识别各个中断源,分析中断原因
③处理发生的中断事件
④中断返回
中断处理
有两个:硬件中断装置(不重要)和软件中断处理程序
软件中断处理程序
-
主要任务:处理中断事件和恢复正常操作
-
硬件中断激活后会引起软件中断处理程序
-
工作内容
- (1)保护未被硬件保护的必需的处理器状态,如保存通用寄存器的内容到主存储器中。
- (2)识别各个中断源,分析产生中断的原因。
- (3)处理发生的中断事件。
- (4)中断返回。恢复中断前的程序,使其从断点执行或者重新启动一个新程序。
进程
-
进程的概念
进程是一个可并发执行的具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统进行资源分配和保护的基本单位。 -
三态模型
-
五态模型
-
七态模型
-
进程实体
-
进程控制块(PCB)
每一个进程都捆绑一个进程控制块 -
进程程序块
即被执行的程序,规定了进程一次运行应完成的功能。
程序块通常是纯代码,可被多个进程共享。 -
进程数据块
进程数据块是进程的私有地址空间,是程序运行时加工处理的对象。 -
进程核心栈
每一个进程都将捆绑一个核心栈,进程在核心态工作时使用。
-
-
进程映像
进程实体的内容随着进程的执行不断发生变化,某时刻进程实体的内容及其状态集合称为进程映像。 -
进程上下文
进程物理实体和支持进程运行的环境合称为进程上下文。
进程物理实体:进程控制块、程序块、数据块。
进程运行环境:核心栈、用户栈、寄存器。 -
进程切换
进程切换即中断一个进程的执行转而执行另一个进程。被转换进程会保存在进程控制块中。 -
模式切换
CPU模式切换即处理器管态(核心态)与目态(用户态)之间的切换。-
切换时机
中断;执行程序状态字加载指令(PSW)。
-
进程控制与管理
控制和管理功能需要用原语实现
原语
- 原语采用屏蔽中断的系统调用实现
- 不可中断
1.进程创建
1.创建事件来源
- 提交批处理作业
- 交互式作业登录
- 创建服务进程
- 已存在进程创建新进程
2.创建过程
- 主进程表增加一项,从PCB池取出空白PCB,为新进程分配唯一进程标识符
- 为新进程映像分配地址空间
- 为新进程分配内存空间外的其他资源
- 初始化进程控制块
- 置为就绪态,加入就绪队列
- 通知操作系统某些模块
2.进程阻塞和唤醒
进程阻塞指一个进程让出处理器,去等待一个事件。阻塞和唤醒是进程切换完成的。
1.进程阻塞步骤
- 停止进程执行,保存信息到PCB
- 修改PCB内容,如进程状态,修改后加入等待队列
- 转入进程调度程序,调度其他进程并运行
2.进程唤醒步骤
- 从等待队列移出进程
- 修改PCB,如进程状态等,加入就绪队列
- 若进程优先级高于当前运行进程优先级,则重新设置调度标志
3.进程挂起和激活
-
挂起原语执行过程
检查被挂起进程的状态,若是就绪态,则修改为挂起就绪态;若是阻塞态,修改为挂起阻塞态。
-
激活原语执行过程
把PCB非常驻部分调入内存,将挂起等待态改为等待态,挂起就绪态改为就绪态。
挂起原语可以由自己或者其他进程调用,激活原语必须由其他进程调用。
线程
-
线程的概念
进程中的每个执行流称为一个线程,线程是进程内可并发执行的一个独立的程序模块。是操作系统进行处理器调度和分派的基本单位。 -
传统进程的特征
传统进程中只有一个执行流,属于单线程进程,进程所代表的任务仅由一个执行流承担。
在单线程进程中,进程既是系统进行资源分配的基本单位,也是处理器调度的基本单位,两者合二为一。 -
多线程环境中的进程
在多线程环境中,进程被定义为资源分配和保护的单位,线程是处理器调度和分派的单位。 -
线程实体包括:
线程控制块(TCB)、私有存储区(包含局部变量,用户栈等)、核心栈 -
线程的关键状态有:
运行、就绪、阻塞
挂起是进程级状态。 -
线程的控制
创建:进程创建时系统会缺省创建并启动一个线程,已经启动的线程可以再创建和启动同一进程中的其它线程。
阻塞:暂停线程执行恢复:阻塞线程等待的事件发生时,线程变成就绪态或相应状态
结束:线程终止,撤销线程
-
线程的实现方法
- 用户级线程(从用户视角看到的线程)
用户级线程是在一个进程内部实现了类似进程调度、进程切换功能的进程内多任务应用功能。
用户级线程不是由操作系统提供的,因而,操作系统不参与用户级线程的调度。 - 内核级线程(从操作系统视角看到的线程)
内核级线程在操作系统内核层,对进程实现多线程功能,操作系统以线程作为处理器调度和分派的基本单位。 - 混合式线程
操作系统提供了同时支持用户级线程与内核级线程的混合式线程设施,线程的创建、调度和同步在用户空间进行。
一个应用程序中的多个用户级线程被映射到内核级线程上。
- 用户级线程(从用户视角看到的线程)
处理器调度系统
-
三级调度
从系统接收到运行结束退出系统为止,作业可能要经历三级调度过程,即:高级调度、中级调度、低级调度。
高级调度从磁盘后备作业队列中挑选若干作业进入内存,为其分配资源,创建进程;作业完成后还要做善后处理工作。
中级调度起到平滑和调整系统负荷的作用,提高主存利用率和系统吐吞率。
低级调度的主要功能是按照某种原则决定就绪队列中的哪个进程或内核级线程获得处理器,并将处理器出让给它进行工作。中断是执行低级调度的时机
低级调度是各类操作系统必须具有的功能;
在纯粹的分时或实时操作系统中,通常不需要配备高级调度,而仅配置低级调度;
一般的操作系统都配置高级调度和低级调度; -
-
低级调度的基本类型
剥夺方式:高优先级剥夺原则和时间片剥夺原则
非剥夺方式:一旦某个进程或线程开始执行便不再出让处理器,除非该进程或线程运行结束或发生了某个事件不能继续执行。 -
剥夺调度与非剥夺调度和中断的关系
(1)剥夺调度:在进程自身未出现等待事件的情况下,由于时间片用完或者出现了优先级更高的进程而被迫让出处理器。
(2)非剥夺调度:一旦获得处理器,只有进程自身出现等待事件时才会让出处理器。
(3)无论剥夺调度还是非剥夺调度,进程都有可能出现等待事件而中断,让出处理器。 -
5个原则,7个算法
疑难问题
1、说明特权指令、处理器状态、程序状态字寄存器之间的关系
(1)处理器指令系统分为特权指令和非特权指令,处理器状态分为用户态和核心态。程序状态字寄存器记录有处理器状态信息。
(2)特杈指令在核心态下执行,中断是处理器由用户态切换到核心态的唯一途径。特权指令与系统共享资源的分配和使用相关。当多个进程竞争公共资源时,其仲裁权在于操作系统。
因此,特权指令的执行权在于操作系统。操作系统向用户提供了大量为其使用公共资源服务的系统调用处理程序。用户程序通过执行访管中断可以委托操作系统为其提供公共资源服务。在用户态下执行特权指令是非法的,引起中断后,系统会捕捉到这种非法操作并中止其执行。
2、进程概念与线程概念的区别
(1)进程概念:进程是一个可并发执行的具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统进行资源分配和保护的基本单位。
(2)线程概念:线程是进程内可并发执行的一个独立的程序模块。是操作系统进行处理器调度和分派的基本单位。
(3)进程概念与线程概念区别:进程是资源分配和保护的基本单位,不一定是处理器调度和分派的基本单位。只有单线程进程可以作为处理器调度和分派的基本单位。多线程进程不是处理器调度和分派的基本单位。线程只是处理器调度和分派的基本单位,不是资源分配和保护的基本单位。
进程概念对单线程进程和多线程进程均可适用。因为概念中仅提到进程是资源分配和保护的基本单位。
第三章 并发进程的同步、互斥与死锁
-
并发进程之间的竞争关系
并发进程之间的竞争关系是由于并发进程共用一套计算机系统资源引起的,一个进程的执行可能影响与其竞争资源的其它进程。
资源竞争产生两个问题:
(1)、死锁问题:进程直接或间接互相等待对方的资源
(2)、饥饿问题:一些进程总是优先于另一些进程 -
临界区与临界资源
并发进程中与共享变量有关的程序段叫做临界区,共享变量代表的资源叫做临界资源。临界区调度原则
-
实现临界区管理(实现互斥)的硬件设施
-
关中断
- 使用"开/关中断"指令实现
- 优点:简单高效
- 缺点:只适用于单处理机;只适用于操作系统内核进程
-
测试并建立指令(TS/TSL指令)
-
对换指令
- 逻辑同测试并建立指令
-
-
信号量与PV操作
- 信号量是一个变量,可以用来表示系统中某种资源的数量
- 一对原语:P和V原语称为PV操作。原语只能一气呵成,不能中断,是由关中断/开中断指令实现的。
- 信号量分类
- 公用信号量
- 私有信号量
- 二元信号量
- 一般信号量
- 应用(各种问题,哲学家进餐等)
-
管程
管程是用来管理共享资源的一种对象。管程封装了对共享资源进行同步、互斥操作的数据结构和一组过程。具有封装性 -
管程结构
- 共享数据结构
- 对数据结构初始化的语句
- 一组用来访问数据结构的过程(函数)
-
管程的实现和应用(霍尔方法,解决两种问题P106)
-
进程通信
-
管道通信机制
-
管道
管道是连接读写进程的一个共享文件,允许进程以先进先出方式写入和读出数据,并对读写操作进行同步。发送进程以字符流形式把大量数据送入管道尾部,接收进程从管道头部接收数据。无名管道通信和有名管道通信。
多个写进程多个读进程就行,按照标准。
1.写进程往管道写数据,即便管道没被写满,只要管道没空,读进程就可以从管道读数据。
2.读进程从管道读数据,即便管道没被读空,只要管道没满,写进程就可以往管道写数据。
-
-
共享内存通信
- 共享内存:允许两个或多个进程共同访问的物理内存区域,是实现进程通信的一种手段。
- 实现原理:一个进程创建共享内存区,其余进程对这块内存区进行读写。
-
消息传递通信机制
消息是格式化的数据,在计算机网络中称报文。
消息由消息头和消息体组成。进程间的数据交换以格式化的消息(Message)为单位。进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。
-
直接通信,进程1创建发送原语,进程2创建接受原语,进程2的PCB包含了消息队列。信箱所有者可以为操作系统或者进程。
-
间接通信,进程1申请多个邮箱A,B创建发送A邮箱的发送原语;进程2可以直接创建A邮箱的接收原语
-
-
套接字通信机制(标黄)
套接字通信允许互联的位于不同计算机上的进程之间实现通信功能。
套接字用于标识和定位特定计算机上特定进程的地址,以便数据准确传输给目标进程。 -
信号通信机制
-
信号
是一种软中断信号,是对硬件中断机制的软件模拟
-
产生源
用户,内核,进程
-
通信处理过程
-
-
-
死锁
各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。 -
产生死锁的必要条件
(1)互斥
进程互斥使用资源,一旦某个资源被占用,欲使用该资源的进程必须等待
(2)占有和等待
进程申请新资源得不到满足而等待时,不释放已占有资源
(3)不剥夺
一个进程不能抢夺其它进程占有的资源
(4)循环等待
存在一组进程循环等待资源的现象,循环等待未必死锁,死锁一定有循环等待 -
解决死锁方法
-
预防死锁
- 1.破坏互斥条件
- 将临界资源改造为可共享使用的资源
- 缺点:可行性不高,很多时候无法破坏互斥条件
- 2.破坏不剥夺条件
- 方案一,申请资源得不到满足时,立即释放所有资源
- 方案二,申请资源被占用时,操作系统协助剥夺(考虑优先级)
- 缺点:实现复杂;剥夺资源会使工作失效;反复申请和释放导致系统开销大;会导致饥饿
- 3.破坏占有和等待条件
- 运行前分配好所有需要的资源,之后一直保持
- 缺点:资源利用率低,会导致饥饿
- 4.破坏循环等待条件
- 给资源编号,必须按编号从小到大顺序申请资源
- 缺点:不方便增加新设备,会导致资源浪费;用户编程麻烦
- 1.破坏互斥条件
-
避免死锁
- 银行家算法,系统的安全状态
- 系统处于不安全状态未必死锁,但死锁时一定处于不安全状态。会考算法
- 银行家算法,系统的安全状态
-
死锁的检测和解除
1、说明死锁与阻塞之间的关系
死锁是一个进程集合中的进程之间发生了循环等待关系,所以死锁发生说明有进程处于阻塞等待状态。但阻塞并不必然导致死锁。
-
第四章 存储管理
1.逻辑地址&物理地址&相对地址
- 地址重定位或地址变换
在执行程序时,将其中的逻辑地址转变为物理地址的过程。 - 逻辑地址
逻辑地址是与程序在内存中的物理位置无关的访问地址。 - 物理地址(或绝对地址)
物理地址是程序运行时中央处理器实际访问的内存单元地址。 - 相对地址
相对地址是逻辑地址的一个特例,是相对于已知点(通常是程序的开始处)的存储单元的地址。
逻辑地址或相对地址也称为虚拟内存地址。 - 逻辑地址空间
一个用户作业的目标程序的逻辑地址集合称为该作业的逻辑地址空间。 - 物理地址空间
主存中实际存储单元的物理地址的总体构成用户程序实际运行的物理地址空间。
2.静态重定位和动态重定位(装入内存的方式)
地址重定位也称为地址变换,涉及逻辑地址和物理地址的转换
- 静态重定位
在逻辑地址转换为物理地址的过程中,地址变换是在进程装入时一次完成的,以后不再改变。无需硬件支持。 - 动态重定位
地址转换工作穿插在指令执行的过程中,每执行一条指令,CPU对指令中涉及的逻辑地址进行转换。需要硬件地址转换机构。
3.存储管理功能
内存分配和回收
内存抽象和映射
存储隔离和共享
存储扩充
4.存储管理方案
都是分配内存中的空间
1.连续存储分配管理(标黄)
固定分区分配
支持多道程序,内存用户空间分为若干个固定大小的分区,每个分区只能装一道作业
两种:分区大小相等;分区大小不等
无外部碎片,有内部碎片
可变分区分配
支持多道程序,在进程装入内存时,根据进程的大小动态地建立分区
无内部碎片,有外部碎片,外部碎片可以用压缩技术解决
书上有5种算法,书上的下次适应分配算法即邻近适应算法。
2.离散存储分配管理
实存
-
分页存储管理
-
页框和页的概念
- 物理页或页框:分页存储管理将全部内存划分为长度相等的若干份,每一份称为一个物理块或页框。
- 页或页面
作业自动被分页系统划分为与每个物理块相等的若干等份,每一份称为一页或一个页面。
-
地址结构
- 逻辑地址由页号和页内位移组成
- 物理地址由物理块号和块内位移组成
-
地址变换
-
页表
页表用于实现地址变换,页表记载了逻辑地址到物理地址的对应关系,操作系统需为每个作业建立一张页表,系统通过页表可以准确访问内存中属于一个作业的所有页面。 -
页表包含页号和块号两个部分
实际上只存块号就行,页号从0到n,则存储整个页表需要3*(n+1)B
物理地址=页面起始地址+页内偏移量
-
-
-
硬件支持
-
快表
-
为了减少分页存储管理系统中的内存访问速度下降问题,在存储管理部件中增设一个专用的高速缓冲存储器,用来存放最近访问过的部分页表项,这种高速缓冲存储器称为快表或联想存储器。
-
-
存储分配和释放
分页系统会记录每个物理块的忙闲情况和可用空闲块总数。
-
页面共享与保护
-
1.存储共享
分页存储管理在实现存储共享时,必须区分数据共享和程序共享。
-
2.信息保护
方法是在页表中增加一些标志位
-
-
反置页表
-
原理
反置页表是从物理地址到虚拟地址的映射,系统为每个物理块设置一个页表项并按物理块号排序。
-
地址结构
进程标识符+页号+页内位移
-
地址转换
首先将逻辑地址分解为进程标识符、页号和页内位移;然后利用进程标识符和页号检索反置页表,获得该页所在物理块号。
-
-
分段存储管理
-
原理
将地址空间按照程序自身的逻辑关系划分为若干个段,每段从0开始编址
每个段在内存中占据连续空间,但各段之间可以不相邻
-
地址结构
逻辑地址结构:(包含段号,段内地址)
-
地址转换
-
-
分段分页对比
-
段页(标黄)
虚存(虚拟存储器)
-
请求分页
-
虚拟存储器概念
在具有层次结构存储器的计算机系统中,采用自动实现部分装入和部分对换功能,为用户提供一个比物理主存容量大得多的,可寻址的一种“主存储器”称为虚拟存储器。
-
基本原理
1.访问信息不存在,在进程开始运行之前,装入全部页面集合中的一个或几个页面,进程运行过程中,访问的页面不在内存时,再装入所需页面;
2.若内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面。 -
页表结构/请求分页管理方式
-
请求分页的地址变换过程
进程开始执行并要访问某个虚拟地址时,内存管理部件MMU(内存管理部件)的工作如下
①MMU接受CPU传送过来的虚地址并分解为两部分:页号和页内地址
②以页号为索引搜索快表
③如果命中快表,则立即送出物理块号(页框号),并与页内地址拼接形成物理地址,然后访问相应内存单元
④如果不命中快表,则以页号为索引搜索内存页表
⑤在页表中查找相应表项,如果其状态位指示该页已在内存,则送出物理块号与页内地址拼接形成物理地址访问相应内存单元,同时要将该表项装入快表
⑥如果在页表中找到的相应表项,其状态位指示该页不在内存,则发出缺页中断,请求操作系统处理
⑦存储管理软件将所缺页面调入内存,修改页表 -
缺页中断处理过程
①挂起请求缺页的进程,根据页号查外页表,找到该页存放的磁盘物理地址
②查看内存是否有空闲物理块,如有则装入页面到空闲物理块,同时修改页表相应项以及内存分配表
③如果内存中没有空闲物理块,则按替换算法选择一个页面淘汰,若该页面被写过或修改过,则写回外存;
否则只简单淘汰该页面。淘汰页面之后要修改页表相应项,然后调入页面到淘汰页面释放的物理块中 -
页面分配和替换策略
-
分配策略
决定系统为每个进程分配多少个页框用于装载页面
页框分配策略主要有两种:
固定分配:固定分配使进程在生命周期中保持固定数目的页框(即物理块)。
可变分配:进程分得的页框数可变 -
替换策略
为装入待访问的外存页面而选择某一内存页面用以置换的策略
主要有两种
局部替换:进程发生缺页时仅从该进程的页框中淘汰页面,以调入所缺页面
全局替换:进程发生缺页时从系统中任一进程的页框中淘汰页面
-
-
缺页中断率影响因素
①进程分得的主存页框数
②页面大小
③页面替换算法的优劣决定缺页率
④程序特性 -
固定分配局部页面替换算法
- 最佳页面淘汰算法(OPT)
- 先进先出页面淘汰算法(FIFO)
- 最近最久未使用页面淘汰算法(LRU)
-
-
请求分段(标黄)
-
请求段页(标黄)
5.疑难问题
1、程序逻辑地址的多种形式与地址变换的两种形式。
知识点:程序逻辑地址与物理地址概念与地址变换概念。程序逻辑地址是与内存物理地址无关的地址,程序逻辑地址与程序的编写、理解、生成等有关,与机器执行无关。物理地址是内存单元的地址,程序运行时访问物理地址。
因为编写、生成程序时使用的逻辑地址与机器执行程序时使用的物理地址不同,所以程序运行时就需要将逻辑地址转变为物理地址,这就是地址变换。
地址变换有两种方式:静态和动态。静态地址变换(静态重定位)在程序装入内存运行前,一次性将程序中的逻辑地址替换为物理地址。
动态地址变换(动态重定位)在程序装入内存后程序运行前,暂不计算程序中逻辑地址对应的物理地址,因此也不存在物理地址替换程序中逻辑地址的问题,仅将程序在内存的起始地址装入重定位寄存器。
程序运行时,根据重定位寄存器中的内存起始地址和当前访问指令及数据的逻辑地址由硬件动态计算生成物理地址,该地址并不替换程序中的逻辑地址。地址变换随着指令的执行逐个进行。
2、内存资源管理技术分析。
(1)知识点:内存管理功能和资源管理技术。内存管理功能包括:内存分配和回收;内存抽象和映射;存储隔离和共享;存储扩充。
资源管理技术有:资源复用;资源虚化;资源抽象。
(2)应用知识点:内存分区、分页、分段分配属于资源空分复用;程序员及编译链接程序使用与内存物理地址无关的逻辑地址,减少对物理内存的了解,体现了资源抽象的技术思想;存储隔离和共享是对信息访问权限的一种硬件实现,可以看做资源复用的一种保护措施;
存储扩充利用外存模拟内存,扩充内存容量,体现了资源虚化的技术思想。
###3、程序逻辑结构与存储管理系统的关系分析。
(1)程序逻辑结构有不同的形式,面向过程的(结构化的、非结构化的)、面向对象的是两种比较常见的程序组成结构。它们都是模块化的,逻辑地址一般也是二维的。而物理内存空间有分页的一维线性结构、分段的二维结构。
(2)如果存储管理系统是分页的,则程序逻辑结构的二维性对系统是不可见的,程序将被看做由单一的程序段组成,该程序段被划分为若干个与物理内存块相等的页面。如果存储管理系统是分段的,则程序逻辑结构的二维性对系统是可见的,程序将被看做由若干个程序段组成,系统将为每个程序段分配一个内存区。
###4、虚拟存储器大小有什么限制?
虚拟存储器是利用外存的一部分(对换区),通过在内外存之间对换进程,从逻辑上扩充内存容量。外存容量远大于内存容量,但能够用来扩充内存容量的外存仅是其中的一小部分,因为虚拟存储器的容量受地址总线宽度的制约。
地址总线宽度决定了程序可访问的最大地址空间,超过该空间的存储区或者说地址是无法访问的。
第五章 设备管理
1.I/O硬件系统
设备类别
- 块设备
块设备将信息存储在固定大小的块中,并且每个块都有地址,因此可独立寻址。
所有传输以一个或多个完整的块为单位。
硬盘、CD-ROM和USB盘是最常见的块设备。 - 字符设备
字符设备以字节为单位发送或接收一个字符流,且不可寻址。
键盘、打印机、鼠标、网络接口,以及大多数与磁盘不同的设备都可以看做字符设备。 - 顺序设备
顺序设备上数据的逻辑顺序与物理存储顺序保持一致。 - 随机设备
随机设备上数据的逻辑顺序与物理存储顺序可以不一致。
磁盘调度算法(属于设备类别中的块设备)
-
先来先服务算法(FCFS)
先来先服务算法根据磁道访问请求到来的先后顺序完成请求。
假如系统先后到来对柱面12,80,5,60,95,20,86,35,72,55的访问请求,按照FCFS调度算法处理该请求序列。 -
最短寻道时间优先算法(SSTF)
最短寻道时间优先算法总是优先满足距离磁头当前位置最近的访问请求。
柱面访问请求到来顺序为:12,80,5,60,95,20,86,35,72,55,假定磁头位置当前在60号柱面。按照SSTF调度算法处理该请求序列。
-
电梯调度算法
对于先后到达的磁盘访问请求,电梯调度算法首先选择移臂方向,磁臂在该方向上移动的过程中依次处理途经的各个访问请求,直到该方向上再无请求时,改变移臂方向,依次处理相反方向上遇到的各个请求。
如果同一柱面上有多个请求,还需进行旋转优化。
柱面访问请求到来顺序为:12,80,5,60,95,20,86,35,72,55,假定磁头正从60号磁道开始,向磁道号增加方向移动。按照电梯调度算法处理该请求序列。
Linux磁盘调度算法
- 电梯调度算法
①如果新请求与队列中等待请求的数据处于同一磁盘扇区或者相邻扇区,则两者合并成一个请求;
②如果队列中的请求已经存在很长时间,则新请求将被插入到队列尾部;
③如果存在合适的位置,则新请求将按顺序插入到队列中;如果没有合适的位置,则新的请求将被插入到队列尾部。 - 时限调度算法
在电梯调度的基础上考虑请求为读还是写,异步还是同步,请求等待的时间长短,根据这些因素修正I/O请求的调度次序,避免饥饿。 - 预期调度算法
对时限调度算法的补充,它预测已经发出读请求的进程很可能会在将来不久再次发出访问上次所读磁道附近的请求,于是不急于执行下一个请求,而是延迟若干毫秒,在延期内若有符合预测的新请求则满足之,没有再执行下一个请求。
I/O控制方式
主机通过控制器对设备输入、输出进行控制的方式有四种
- 轮询
轮询也称为忙等待,CPU向设备下达操作命令后,不断查询设备操作完成状态。 - 中断控制
在中断控制方式下,CPU向设备发出读写命令后,不再查询设备执行状态,转而执行其它计算任务。设备控制器完成读写操作后以中断的方式主动向CPU报告完成情况。CPU响应中断执行一个中断处理程序,将设备从外界获得的数据取走放到内存或者相反。 - 直接存储器访问(DMA)
DMA(直接存储器访问)方式允许I/O设备与内存之间直接交换一个连续的信息块,在传输期间无需CPU的干预,而是由专用处理器 DMA控制器完成具体传输控制操作。 - 通道方式
通道也叫输入输出处理器,是独立于CPU专门负责数据输入/输出传输工作的处理机,能执行自己的指令程序,代替CPU完成复杂的输入/输出操作,完成主存和外围设备间的信息传送,与CPU并行操作。
在通道方式下,当进程需要执行I/O操作时,CPU只需启动通道,即可返回执行其它进程,通道则执行通道程序,对I/O操作进行控制。
2.I/O软件系统
I/O软件总体设计目标
- 高效率:确保I/O设备和CPU并行执行,提高资源利用率
- 通用性:提供简单抽象、清晰统一的接口,采用统一标准的方法管理所有的设备和I/O操作
I/O软件总体设计要考虑的问题
- 设备无关性
- 出错处理
- 同步(阻塞)/异步(中断驱动)传输
- 缓冲技术
I/O软件的四个层次
(1)I/O中断处理程序:用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完毕再恢复被中断进程的现场后,返回到被中断的进程。
(2)设备驱动程序:与硬件直接相关,用于具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序。
(3)独立于设备的I/O软件:设备无关I/O软件的基本功能是执行所有设备公共的I/O功能,并向用户层软件提供统一的接口。
(4)用户空间的I/O软件:实现与用户交互的接口,用户可直接调用该层所提供的、与IO操作有关的库函数对设备进行操作。
用户空间的I/O软件
-
I/O库函数
-
I/O程序
-
虚拟设备
-
原理
为了提高设备利用率,尤其是提高独占设备的利用率,减少作业周转时间,系统利用共享设备模拟独占设备的功能,使得独占设备成为能够共享的设备,这就是设备虚拟。
-
SPOOLing系统结构
-
信息存储数据结构
- 输入井和输出井
- 输入缓冲区和输出缓冲区
-
作业控制管理数据结构
- 作业表
- 预输入表
- 缓输出表
-
程序
- 预输入程序
- 缓输出程序
- 井管理程序
-
工作原理
SPOOLing系统即假脱机系统。将原来以联机方式使用的独占设备改造成为脱机使用的虚拟共享设备。在联机方式下,每个需要设备I/O的进程排队等待向设备提交输入输出作业。
-
-
-
3.疑难问题
1、块设备与字符设备有什么区别?
块设备将设备存储介质划分为若干存储块,每个存储块可以存放多个字节组成的数据块。每个存储块有一个访问地址。因此,块设备是可寻址的,可以随机访问,在访问数据时需要给出数据的地址。在设备输入输出时,块设备是以数据块为单位传输信息。
访问存储块中的单个字节或者部分字节意味着传输整个存储块,然后从中分拣出所需信息。
字符设备以字符为单位传输数据,且不可寻址,因此字符设备只能顺序访问,不能随机访问。
2、DMA与中断的区别
DMA传送方式与程序中断对CPU的干扰程度不同。程序中断请求不但使CPU停下来,而且还要CPU执行中断服务程序,需要完成断点和处理器现场保护和CPU与外设之间的数据传送工作,消耗CPU较多时间。
DMA请求仅仅使CPU暂停一下,该暂停不属于中断,不需要执行中断处理程序,不需保存断点和处理器现场信息。DMA挪用CPU指令周期控制外设与主存之间的数据传送,无需CPU的干预。DMA与CPU交替控制总线,交替执行指令和数据传输工作。在整个数据块传输结束时,DMA才向CPU发中断信号,CPU执行中断处理程序。
3、设备I/O软件四个层次工作判定问题。
|/O软件分为四个层次:用户空间的I/O软件、设备无关|/O软件、设备驱动程序、中断处理程序,下面各项工作是在哪个软件层次上完成的?
(1)用户进程请求打印一个输出文件。
(2)将一维磁盘块号转换为三维物理地址(柱面、磁道和扇区)
(3)获得设备驱动程序的入口地址。
(4)将终端输入的字符转换为ASCI码。
(5)设备驱动进程被唤醒。
(6)向设备寄存器写命令。
(7)检查用户是否有权使用设备。
(8)将二进制整数转化成ASCII码以便打印(用户层)
(9)维护一个最近使用块的缓存。
(1)用户进程请求打印一个输出文件。用户空间的I/O软件。用户进程请求打印时,使用I/O库函数。I/O库函数属于用户空间的I/O软件。用户与设备I/O软件最上层软件打交道,因此,该请求由用户空间的1/O软件完成。
(2)将一维磁盘块号转换为三维物理地址(柱面、磁道和扇区)设备驱动程序。设备驱动程序了解磁盘物理地址结构,因此可以将逻辑盘块号转换为物理地址。
(3)获得设备驱动程序的入口地址。谁获得设备驱动程序的入口地址?不应该是设备驱动程序自己。而是它的上层软件设备无关|/O软件。
(4)将终端输入的字符转换为ASCII码。“将终端输入的字符转换为ASCII码”并需要借助于操作系统内核服务程序,不属于用户控件的1/O软件。它也不是设备驱动程序的功能。只能属于设备无关|/O软件。这种转换工作与设备无关,不需要中断处理程序、设备驱动程序介入,属于设备无关|/O软件的工作。
(5)设备驱动进程被唤醒。中断处理程序。设备驱动进程启动设备后就阻塞等待设备操作完成,设备操作完成后,设备控制器向CPU发中断信号,CPU执行中断处理程序,唤醒设备驱动进程。
(6)向设备寄存器写命令。设备驱动程序。设备驱动程序负责与控制器通信。
(7)检查用户是否有权使用设备。
设备无关|/O软件。用户控件的I/O库函数主要用于提出I/O请求,用户是否有权使用设备的检查工作应交下一层软件设备无关|/O软件来完成。
(8)将二进制整数转化成ASCII码以便打印(用户层)。
设备无关|/O软件。数据编码转换无需设备参与,也不是1/O请求命令,不属于用户空间的I/O库函数。
(9)维护一个最近使用块的缓存。设备无关|/O软件。管理缓冲区是设备无关I/O软件的职能之一。
第六章 文件管理
1.文件访问方式/存取方法
(1)顺序访问
顺序访问从文件开头顺序读取文件的全部字节或记录,不能跳过某一些内容,文件后面的内容不能先于文件前面部分的内容读取出来。写入与此类似。
后面的访问起点依赖于前面访问后确定的文件指针位置。
(2)随机访问(直接访问)
能够以任意次序读取其中字节或记录的文件称为随机存取文件或直接访问文件。直接访问文件可以立即访问需要的那部分信息,而不必涉及不需要的信息部分。
(3)索引访问
索引访问建立在直接访问方式上。
索引访问需要为文件创建索引,这样的文件称为索引文件。
2.文件操作
1、创建文件(create)
创建不包含任何数据的文件。
在目录中为新文件创建目录条目,设置文件属性信息,如文件名等。
2、打开文件(open)
在使用文件之前,必须先打开文件。
open调用将文件属性和磁盘地址表装入内存,便于后续操作访问。
3、写文件(write)
write调用针对已经打开的文件执行写操作。
一般从当前位置开始写入信息。
如果当前位置是文件末尾,则文件长度增加。
如果当前位置在文件中间,则现有数据被覆盖。
4、读文件(read)
read调用针对已经打开的文件执行读操作。
读出的数据一般来自文件当前位置。
调用者需要指定读取的数据量和数据存放的缓冲区。
5、调整读写指针(seek)
seek调用调整读写指针的位置。
6、关闭文件(close)
文件访问结束时,关闭文件以释放文件属性及磁盘地址等不再需要的管理数据所占内存空间,同时写入文件的最后一块。
7、删除文件(delete)
删除不需要的文件,释放其所占外存空间。
- 内存映射文件
3.文件结构
逻辑结构
-
分类
-
流式文件
流式文件(无结构文件)将文件内容看作字节流,即整个文件由一个字节流组成。
-
记录式文件
记录式文件(有结构文件)是一种有结构的文件,包含若干逻辑记录,逻辑记录是文件中按信息在逻辑上的独立划分的信息单位。
-
物理结构
-
分类
-
顺序文件
顺序文件(连续文件)是逻辑记录顺序和物理记录顺序一致的文件,记录会按照出现的次序被读出或修改。循序文件存取记录速度快,但是容易造成空闲块的浪费。不便增删
-
连接文件
采用连接字(即指针)表示文件中各个逻辑记录之间的顺序关系,形成链表结构的文件即连接文件。便于顺序存取,便于增删,不便随机存取。
-
直接文件
直接文件(哈希文件)是通过记录关键字换算其存储地址,实现内容存取的文件。
-
索引文件
是实现非连续存储的另一种方法,适用于数据记录保存在随机存取存储设备上的文件。
-
4.文件共享
分类
-
静态共享
允许一个文件同时属于多个目录,但实际上文件仅有一处物理储存。
实现方法:将不同目录的索引节点号只当为同一文件的索引节点。
-
动态共享
文件动态共享指系统不同进程并发访问同一文件。进程消亡,动态共享关系自动消失。
-
符号链接共享
又称软链接,是只包含文件路径名而不指向节点的文件。删去符号链接,文件实体内容依旧存在。
5.文件目录
目录项信息
目录提供了访问文件的入口,每个文件在访问目录表中都有一个目录项,目录项称为文件控制块(FCB)
FCB内容:
- 文件标识和控制信息
- 文件逻辑结构信息
- 文件物理结构信息
- 文件使用信息
- 文件管理信息
目录项结构与索引节点
-
索引节点型目录项结构
结构包含文件名和索引节点号。
-
系统内存活动索引节点表
目录层次
-
层次目录系统
层次目录系统婿用户创建多级目录,各级目录形成树形结构,也成为目录树。
由各级目录名称组成的路径串称为目录路径名,根目录到文件的路径串称为绝对路径名,否则为相对路径名。
目录操作(标黄)
- 创建目录
- 删除目录
- 打开目录
- 关闭目录
- 链接目录
- 删除链接目录
6.文件空间管理
文件存储结构
-
连续分配存储
将文件放在外存连续存储区中,为磁盘文件分配一组连续的快,文件内容的逻辑顺序与物理存储循序一致。
优点:高效存取,寻道时间少。
缺点:建立文件前需要用户给出文件长度,用户难以知道文件大小,对用户不友好,对修改、插入和增加文件记录有困难。
-
链接分配存储
-
磁盘块链接存储
非连续分配方案,文件允许存放在位置不来连续的磁盘中,各磁盘文件内容的逻辑顺序次啊用磁盘块指针来指示。
优点:便于文件内容增删改,创建文件不需要说明文件大小,无需合并磁盘空间。
缺点:随机访问(直接访问)不方便,必须从头开始访问。由于指针占据字节,物理块有效容量减小,读取文件内容需要拼接物理块,增加I/O操作复杂性和开销。同时物理块分散,寻道操作频繁,增加了I/O寻道时间。
-
磁盘簇链接存储
以簇为文件空间分配单位,建立簇之间的指针链接关系。
优点:一个簇由多个连续磁盘块组成,指针在簇中占用磁盘空间百分比降低,磁头移动频率降低,空闲簇管理所需空间减少,改善磁盘访问时间。
缺点:产生较大的内部碎片,造成可靠性问题。
-
文件分配表(FAT)
是链接分配方法的变种。
-
-
索引分配存储
索引分配为每一个文件建立一个索引表。
-
索引表
-
无键索引
只能根据索引顺序号访问文件内容块。
-
有键索引
可以根据键值访问文件内容块。
-
-
索引项
-
稠密索引
对每个数据记录都在索引表中建立索引项。
-
稀疏索引
对每一组数据记录建立一个索引项。
-
-
空闲盘块组织结构/文件外存空间管理
文件系统不仅需要记录分配给文件的存储块,也需要记录空闲块的数量和位置。
-
位示图
系统的每个盘块次啊用一个二进制位来表示该盘块是否空闲。可以同时对空闲块和已分配块综合管理。
-
空闲块链
将所有空闲块链接在一起,形成一个链表。
-
空闲区表
空闲区表为外存上的所有空闲区建立一张空闲表,每个空闲区占一个表项。大大减少链表中的节点数。
-
成组空闲块链
无需完整驻留内存空间,将空闲块管理结构分为若干个可分组调入的形式。
7.虚拟文件系统(VFS)
原理
VFS定义了一个代表不特定文件系统通用特征和行为的文件模型。关键思想是抽象出所有文件系统的公共部分,形成一个简单、统一的抽象文件系统接口提供给用户。
结构
-
超级块对象
代表一个特定的已挂载的文件系统
-
索引节点对象
代表一个特定的文件
-
目录项对象
代表一个特定的目录项
-
文件对象
打死表一个与进程相关的打开的文件
8.疑难问题
1、文件访问方法与文件物理结构的关系。
文件访问方法与文件物理结构密切相关。文件访问方法主要有:顺序访问、随机访问、索引访问。文件物理结构主要有:顺序文件、连接文件、直接文件、索引文件。
顺序文件逻辑记录顺序和物理记录顺序一致,连接文件采用指针表示文件中各个逻辑记录之间的顺序关系,形成链表结构的文件。两种文件适合顺序访问。
直接文件是以记录关键字换算其存储地址,实现内容存取的文件。适合随机访问。
索引文件在存储逻辑记录的同时,将记录关键字与其存储地址的对应关系表即索引表一并存储。适合索引访问。
2、索引节点。
解析:索引节点是一种目录结构组织方法。该方法将查找文件所需的文件名与找到文件后需要访问的文件属性信息分开存放,查找期间仅需加载由文件名和表示文件属性信息存放位置的索引节点号组成的基本目录项。找到目标目录项后,才根据索引节点号加载所需文件属性信息项。这样可以减少与目标文件无关的设备I/O数据量,节约查找时间。
3、说明成组空闲块链的特征。
成组空闲块链是UNIX/Linux的空闲块管理方法。该方法将空闲块组织为链栈结构,每100个空闲块是一组,组内以栈式组织空闲块,组间形成栈式链表。系统只在内存保留一个空闲块组。分配时,待该组分配完毕后,才从磁盘加载下一个空闲块组;回收时,待内存空闲块组填满时,再挂接到外存空闲块组链中。这样可以节约内存空间和访问空闲块链时的设备|/O信息量,提高访问效率。
4、虚拟文件系统的原理是什么,体现了什么资源管理技术思想?
(1)虚拟文件系统(VFS)定义了一个代表不特定文件系统通用特征和行为的文件模型。
VFS抽象出所有文件系统的公共部分,形成一个简单、统一的抽象文件系统接口提供给用户。
用户仅通过抽象文件系统接口层表达文件操作意图,文件操作的具体执行则由底层的实际文件系统来完成。
从抽象文件系统到某一具体文件系统的转换工作由映射模块完成。
(2)虚拟文件系统体现了资源抽象的资源管理技术思想。不同文件系统有着不同的实现方法和细节,虚拟文件系统则封装、隐藏了各种具体文件系统的细节差异,使得用户仅需面对一种统一的、抽象的文件系统,即虚拟文件系统,简化了用户对文件系统的学习和使用。