(自我回顾用,若有错误,欢迎大家指正以及补充说明~
ps: 目录并不是全部内容的缩写,只是老师标的考点hhh)
操作系统定义:一组程序合集(有效、合理、方便)
处理器:执行单元(运算器)控制单元(控制器)
中断是==提高处理器效率==的一种技术:
允许处理器与I/O操作并发执行,以提高处理器使用率
中断是指CPU对系统中发生的异步事件的响应,发生中断时正在执行的程序的暂停点叫做中断断点,处理器暂停当前程序转而处理中断的过程称为中断响应,中断处理结束之后恢复原来程序的执行被称为中断返回。
一个计算机系统提供的中断源的有序集合一般被称为中断字,这是一个逻辑结构,在不同的处理器有着很不相同的实现方式。
中断分类:
程序中断:因指令的执行结果而产生,如算术溢出、被零除等。
时钟中断:由处理器内部的计时器而产生。通常在分时系统中每个进程分配了一个时间片,当进程用完时间片后就会发生一个时钟中断,系统将处理器分配给另一个进程使用。
I/O中断:由I/O控制器产生,通常在I/O操作正常完成或错误时发出信号提示处理器响应中断,是最常见的中断类型。
硬件失效中断:因硬件故障而产生。
中断系统:硬件和软件结合
多个中断:
三个特性:价格、容量、访问速度
提高处理器的执行效率:利用局部性原理,在处理器和主存储器之间提供一个容量小而速度快的存储器: cache
单个高速缓存:
高速缓存的读操作:处理器访问数据时,先检查是否在cache中,否则将包含所需数据(字节)的一个数据块读入Cache,再传递给处理器。
Cache 设计:
cache越小冲突频率越高、反之则读取速度减慢
块block:cache和主存进行数据交换的单元
因局部性原理,块越小命中率越高(读进无用的数据大于局部性原理的影响,命中率反而降低)
映射函数(Mapping function )
替换算法(Replacement algorithm )
写策略( Write policy)
前两者缺陷:
DMA模块解决上述问题
操作系统定义:
是控制应用程序执行的程序,在应用程序和计算机硬件之间提供接口
目标
方便(Convenience):使计算机易于使用
有效 (Efficiency):资源最大化利用
扩展的能力 (Ability to evolve):开发、测试和引进新系统功能
功能
从计算机系统组成观点――操作系统是系统软件
从资源管理程序观点――操作系统是系统资源管理者:实际上,操作系统就是一组程序,在处理器上同样以指令的方式执行
从软件分层、扩充机器的观点――操作系统是扩充裸机的第一层系统软件
从服务用户的观点――操作系统是用户与裸机之间接口
串行处理:人工输入
简单批处理:脱机输入输出技术(磁带、作业自动转换)、监控程序、用户程序、处理器控制权在两程序间切换(处理器取指和执行指令都在同一程序内)
-依赖于处理器可以从内存不同地方取指令的能力
多道程序设计:同时容纳两个或多个用户程序,宏观上并行执行,而在微观上多道程序在某个部件上(如CPU、I/O)是串行的,即多道程序轮流地使用部件,交替执行。监督程序(操作系统)是控制中心
分时系统:(单主机多终端)把计算机的系统资源(尤其是CPU时间)进行时间上分割,即将整个工作时间分成一个个的时间片,每个时间片分给一个用户使用,这样将CPU工作时间分别提供给多个用户使用,每个用户依次地轮流使用一个时间片
- 采用调进/调出的单道分时系统:单个程序的从外存调入内存中及内存中调出至外存
- 基于多道程序设计的多道分时系统:具有较好的系统性能,因为切换作业就在内存,不要花费大量时间用于调进调出
通用系统概念:系统本身没有要完成的作业,只是起着管理调度系统资源,向用户提供服务的作用(批处理、分时都是)
响应时间是重要指标:用户发出终端命令到系统开始作出响应的时间间隔。1
T = n × q
q = S + W
实时系统
特征:快速响应时间、有限的交互能力(专用系统)、高可靠性
微机操作系统:
多任务操作系统MS Windows
多用户多任务操作系统SCO UNIX
Linux
网络操作系统(Network Operating System, NOS)
分布式操作系统( Distributed Operating Systems )
嵌入式操作系统 ( Embedded OS )
多道程序设计的问题:
- 不正确的同步(Improper synchronization )
信号机制设计出错会导致两个进程之间没法保证同步性
- 失败的互斥(Failed mutual exclusion )
- 不确定的程序操作(Nondeterminate program operation )
程序的结果可能取决于多个程序的执行先后顺序
- 死锁(Deadlocks )
由三部分组成:
内存管理的五个职责:进程隔离、自动分配和管理、支持模块化程序设计、保护和访问控制、长期存储
使用虚地址访问内存,通过地址映射机制(通常由硬件实现)将虚地址动态映射为主存中的实地址。进程执行时,只需要一部分块在内存中即可。当访问的块不在内存中时,产生缺页中断,将所要访问的块从磁盘调入内存
虚存寻址:
信息保护和安全
进程(Process)定义:“可并发执行的程序在一个数据集合上的运行过程”。
进程特征:动态性(基本特征)、独立性、并行性、异步性
结构特征:从结构上,进程实体由**程序段、数据段和进程控制块(PCB)**三部分组成。
运行(Running):占有CPU
就绪(Ready ):除了CPU,其它所需资源都已占有,一旦得到处理机即可运行,则称此进程处于就绪状态
阻塞(Blocked ):等待某些事件
新建(New ): 已经创建了PCB并保存在主存中,但程序代码和相关数据还没有读入主存
退出(Exit )
就绪态――>运行态:当处理机空闲时,进程调度程序必将处理机分配给一个处于就绪态的进程 ,该进程便由就绪态转换为运行态。
运行态――>阻塞态:处于运行态的进程在运行过程中需要等待某一事件发生后,才能继续运行,则该进程放弃处理机,从运行态转换为阻塞态。
阻塞态――>就绪态:若其等待的事件已经发生,进程由阻塞态转换为就绪态。
运行态――>就绪态:分给它的处理器时间片用完,被抢占而让出处理机。
阻塞态――>运行态和就绪态――>阻塞态这二种状态转换不可能发生
挂起进程原因:处理器运行的速度远远地快于I/O设备,运行一段时间后会出现所有进程都处于阻塞态,就绪态进程数为0,处理器等待的情况。
挂起(Suspended):
堵塞/挂起态――>就绪/挂起态在进程等待的事件出现后
存储表、I/O设备表、文件表和进程表 (控制记录进程和资源的当前状态信息)
进程存在的唯一实体
执行模式:
4. 用户模式(目态)
5. 系统模式、控制模式或内核模式(管态)
三个问题:
6. 为什么需要两种执行模式?
保护操作系统和重要数据不受用户干扰。
处理器如何知道当前系统处于哪个执行模式下?
程序状态字(PSW)中管理程序/用户模式位记录了当前系统所处的模式信息
模式如何切换?
用户调用操作系统服务(系统调用)或发生中断时,执行模式从用户模式切换到内核模式
当系统服务返回或中断返回到用户进程时,执行模式从内核模式切换到用户模式
何时发生切换?
在操作系统从当前正在运行的进程中获得控制权的任何时刻发生:中断、陷阱、系统调用
发生进程切换,操作系统需要做什么?
进程切换和模式切换的区别?
(考试范围外)OS是无进程的内核,运行发生中断或系统调用则控制权交给内核,在用户进程的上下文中执行所有操作系统程序。
资源拥有单元称为进程(或任务)
调度的单位称为线程、又称轻便进程
线程只拥有一点在运行中必不可省的资源(程序计数器、一组寄存器和栈),但它可与同属一个进程的其它线程共享进程拥有的全部资源
1.每个线程有独立的栈和控制信息
2.所有线程共享进程的状态和资源
(题外:引入线程的好处)创建、终止、切换时间比进程更短;因为同一进程内所有线程共享资源则修改资源后大家都能访问,因此线程通信无需内核。
线程定义为进程内一个执行单元或一个可调度实体,是进程的组成部分
主要状态有:运行Running, 就绪Ready 和阻塞Blocked
(挂起一个进程则该进程内的所有线程都将挂起)
一个线程的阻塞不会引进整个进程的阻塞
应用程序管理线程
当一个线程因系统调用而被阻塞时,该进程内的所有线程都被阻塞(为什么?)
系统调用使得模式从用户模式切换到内核模式,操作系统只知道进程,故操作系统将进程置为阻塞状态,从而使得该进程内的所有线程都被阻塞
一次进程中只有一个线程可以执行,使多线程技术不能得到应用
多个线程调度到多个处理器中,从而更好地利用多道程序设计技术
如果一个进程内的线程阻塞,内核可以调度同一进程内的其他线程运行,不会导致整个进程被阻塞
内核例程自身也可以使用多线程
同一进程两线程的切换需要内核模式的切换
多个进程共享临界资源(一次只允许一个进程使用)时必须互斥使用,将程序中使用临界资源的那一段代码称为临界区
指多个进程互不相让,都得不到足够的资源
指多个进程不能同时使用同一个资源
指一个进程一直得不到资源(其他进程可能轮流占用资源)
多个进程或线程在读写一个共享数据时,结果依赖于它们执行的相对时间,这种情形叫竞争
多个相关进程在执行次序上的协调称为进程同步。用于保证多个进程在执行次序上的协调关系的相应机制称为进程同步机制,遵循下述四条准则:
单标志法(Dekker’s 算法):可实现互斥,但仅可顺序执行,只有当前允许进入临界区的进程在访问了临界区之后,才会修改turn的值,违背了“空闲让进”原则
双标志先检查法:都可进入临界区,违背了“忙则等待”原则
双标志后检查法:都不能可进入临界区,可能会死锁,违背了“空闲让进、有限等待”原则
Peterson算法:“让梨”思想,turn变量表示让谁先进入临界区,违背“让权等待”原则
中断禁用 (Interrupt Disabling)
特殊的机器指令
信号量初始值n含义:表示一次允许最多有n个进程进入临界区
semSignal(s)/V(s) 发送信号 S+1
semWait(s) /P(s) 接收信号 S-1 (若值为负数则阻塞执行P操作的进程)
生产者/消费者
读者/写者
哲学家就餐问题(包含死锁和饥饿)
wait( P ) / signal(V)操作必须成对出现,有一个wait( P )操作就一定有一个signal(V)操作
当为互斥操作时,它们同处于同一进程
当为同步操作时,则不在同一进程中出现
如果wait(S1)和wait(S2)两个操作在一起,那么wait操作的顺序至关重要,一个同步wait操作与一个互斥wait操作在一起时,同步wait操作在互斥wait操作前;而两个signal操作无关紧要
(前面也有提到)所谓死锁是指计算机系统和进程所处的一种状态。在系统中,两个或多个进程无限期地等待永远不会发生的条件,此时称系统处于死锁状态。
原因:
条件:
方法:破坏四个产生死锁的必要条件之一
定义:允许进程动态地申请资源,系统在进行资源分配之前,先计算资源分配的安全性。进程的请求被拒后由运行态变为阻塞态。
算法结构:
前提:一个具有n个进程和 m 种不同类型资源系统
每个资源的总量:Resource=R=(R1,R2,…,Rm)
可用的资源数:Available=V=(V1,V2,…,Vm)
需求矩阵:Claim=C:矩阵,Cij表示进程i对资源 j的最大需求
已分配到的资源数:Allocation=A:矩阵,Aij表示当前进程i已分配到的资源j的数量
当前需求资源数:Need=N:矩阵,表示每个进程尚需的各类资源数, Need[i,j]=k 表示进程i还需要j类资源k个。Need[i,j]=Claim[i,j]-Allocation[i,j]
限制
定义:不限制资源访问或约束进程的行为,只要系统资源能满足进程的请求就立即满足,定期用算法检测,若发生死锁则进行恢复
算法主要思想:标记没有发生死锁的进程(包括未占用任何资源的进程)
算法步骤如下:
(题外)恢复策略:
存储管理的主要对象是内存,核心是进一步细分用户可访问的内存部分,以满足多个进程的要求。
进程对内存访问的逻辑地址在运行时动态地被转换为物理地址,从而保证进程可以占据内存的不同区域
关键词:名字空间、地址空间(相对/逻辑地址)和存储空间(绝对地址)、逻辑地址、相对地址(逻辑地址的特例)、物理地址
分类:
静态重定位:装配模块装入内存前修改有关修改地址的指令
动态重定位:依靠硬件——重定位寄存器(基址寄存器)
保护:确保每道程序都在自己的内存空间运行,互不干扰
共享:提高主存储器的利用率,减少不可用的存储空间(称为“碎片”、“零头”),允许多道程序动态共享主存
程序员访问的地址,与当前数据在内存中的实际位置无关,在进行内存访问时,必须将其转换成物理地址
也称为绝对地址,是数据在主存中的实际位置
事先进行内存划分,分区的个数不可变,分区的大小不可变(大小相等或不等)
分区说明表:每个表目说明一个分区的大小、起始地址和是否已分配
两个问题:1、程序过大只能放一部分进主存2、主存利用率不高,易产生内部碎片( fragmentation):进程被分配到的分区中多余的部分
不足:1、分区的数目事先生成,因此限制了系统中活动进程的数目2、小作业不能有效地利用分区空间3、存在内部碎片问题
内存被划分成两块,一块用于常驻的操作系统,另一块则是完整的空闲区(用户区)
空闲分区表/链记录空闲分区:包括分区的序号、大小、始址和状态
动态分区分配算法
最佳适应算法BF(Best Fit)、首次适应算法FF(First Fit)、循环首次适应算法/邻近算法NF(Next Fit)、最坏适应法
可变分区回收算法 :回收分区时合并相邻空闲区
分区的存储保护:
用户程序只能访问自己的用户分区,不能访问系统分区和其它程序的分区。分区存储保护常用方法是界地址法或界限寄存器(不在界限范围内产生中断)
伙伴系统:如果请求分配的空间大小s满足2U-1 < s <= 2U, 则分配整个空间块(2U);否则,将2U 一分为二,分为两个大小相等的伙伴,大小均为2U-1 。(可用二叉树表示)
将一个进程的地址空间划分成若干个大小相等的片,称为页面或页,相应地,将内存空间划分成与页相同大小的若干个块,称为(物理)帧(块)或页帧。在为进程分配内存时,将进程中的若干页离散地装入不相邻接的物理帧中,解决了“碎片”问题,提高了存储器的利用率。
操作系统如何知道进程中的某一页具体被分配到哪个物理帧中?
答:在内存为每个进程建立了一张页表(page table)(有多少个进程就有多少个页表)
即,页表作用:实现从页号到物理块号的地址映射。
分页系统的地址结构有两部分:页号P与页内位移量W(即页内地址)
地址变换计算:
1、虚地址分成页号P+页内地址d
页号P=(逻辑地址/页大小)取整
页内地址d=逻辑地址 mod 页大小
2、根据页号查页表,由页表项读出块号(页号默认从0开始)
3、块号和页内地址构成物理地址:
物理地址=块号×页大小+页内地址
作业的地址空间按逻辑信息完整性被划分为若干个段,每个段都有自己的名字,编译后都是从零开始编址的一段连续的地址空间,段的长度由相应逻辑信息组的长度决定,因而各段长度是不等的
段表:类似页表
逻辑地址中的段号和段内地址位数如何确定?
A:取最大段的长度为段内地址位数
一个进程在执行的过程中,不需要所有的块都在内存中,当处理器需要访问一个不在主存中的块时,系统将产生一个内存访问故障中断(缺页中断)。
优点:
内存中可以容纳更多的进程
进程可以比主存的全部空间还大
局部性原理
即在一段时间内,程序的执行仅局限于某个部分;相应地,它所访问的存储空间也局限于某个区域内。(时间、空间)
局部性原理确保了虚拟存储机制的可行性。但利用局部性原理的同时,要避免系统出现抖动现象(thrashing),即处理器大部分时间都用于交换块,而不是执行指令。
请求分页:页式虚拟存储系统
虚地址求物理地址:
快表(Translation Lookaside Buffer,TLB):提高了地址变换的速度
处理器先查询TLB,若命中则直接访问内存变换得到物理地址,否则查找页表看是否在页表内:或发生缺页中断访问外存。
请求分段:段式虚拟存储
内含段表机制、缺段中断机构以及地址变换机构(置换时对内存的管理采用动态分区管理)
段表项如下:
段页式
将内存空间划分成大小相同的若干个块,将用户程序先按逻辑完整性分为若干个段,再把每个段划分成若干个与块大小相同的页,将这些页离散装入不相邻接的块中。
以分页的方式管理内存,具有分页系统能有效地提高内存利用率的优点;又以分段的方式管理用户的逻辑地址空间,具有分段系统能很好地满足用户需要的长处.
系统中必需同时配置段表和页表。由于将段中的页进行离散地分配,段表中的内容不再是段的内存始址和段长,而是页表始址和页表长度。
缺页率( page fault rate )=“缺页次数 / 内存访问次数” (比率)
常用的替换策略 (OPT\LRU\FIFO\CLOCK)
最佳(OPT)置换算法
选择那些永不使用的,或者是在最长时间内不再被访问的页面置换出去
最近最久未使用置换算法(Least Recently Used,LRU)
选择最近最久未使用的页面予以淘汰
先进先出(FIFO)置换算法
选择在内存中驻留时间最久的页面予以淘汰
Clock置换算法/最近未用算法NRU(Not Recently Used)
当页第一次读入内存时,其访问位为1;当某页被访问时,其访问位置1。在选择一页淘汰时,沿循环替换指针检查页面,如其访问位是“0”,就选择该页换出;若为“1”,则重新置为“0”,暂不换出该页,在循环队列中检查下一个页面,直到访问位为“0”的页面为止。置换时是将未使用过的页面换出去
提高设备的利用率。为此,应尽量提高CPU与I/O设备之间的并行操作程度,主要利用的技术有:中断技术、DMA技术、通道技术、缓冲技术、磁盘cache。
为用户提供方便、统一的界面。所谓方便,是指用户能独立于具体设备的复杂物理特性之外而方便地使用设备。所谓统一,是指对不同的设备尽量使用统一的操作方式,例如各种字符设备用一种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软件)
每当一个用户进程发出一个I/O请求时,操作系统便在主存的系统区中为之分配一个缓冲区
CPU从磁盘上读一块数据分三步:磁盘->缓冲区->用户区->CPU计算
在设备输入时,先将数据输入到缓冲区A,装满后便转向缓冲区B。此时操作系统可以从缓冲区A中提取数据传送到用户区,最后由CPU对数据进行计算。
可增加缓冲区的个数来改善CPU与I/O设备间速度不匹配的矛盾。
将多个缓冲区组织成循环队列的形式,其中一些队列专门用于输入,另一些队列专门用于输出
根据进程请求访问磁盘的先后次序进行调度
优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。
缺点是算法未对寻道进行优化,致使平均寻道时间可能较长(平均响应时间长)。
总是满足那些与当前磁头所在的磁道距离最近的请求,也就是执行寻道时间最短的那个I/O请求(饥饿现象)
这种调度算法有较好的平均寻道时间。对中间磁道访问服务比内、外两侧磁道服务好,造成响应时间变化幅度大,在服务请求多时,内外边缘请求被无限期延迟,不可预期。
当磁头正在自里向外运动时,SCAN算法要选择的下一个访问对象是其欲访问的磁道在当前磁道之外,又是距离最近的。直至再无更外的磁道需要访问时,才将磁臂换向,自外向里运动。
克服SSTF服务集中中间磁道和响应时间变化较大缺点,两侧磁道的访问的频率低于中间磁道。
规定磁头只能单向运动(自里向外或自外向里),当磁头运动到最外面的被访问磁道时,磁头立即返回到最里面的欲访的磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。
在主存中设置的一个缓冲区,包含磁盘某些扇区的副本
如何将磁盘cache中的数据传送给请求的用户进程?
使用共享存储空间,将指向该共享空间的指针传递给进程即可,避免了数据直接传送的耗时
如何替换cache中的数据块?
LRU和LFU算法
最不常用算法LFU:替换访问次数最少的块。
最近使用算法LRU:往头部加入新的数据,如果该数据存在则将其放到头部,如果加入时已满,则从底部淘汰掉数据
文件是存储在某种介质上的(如磁盘、磁带等)并具有文件名的一组有序信息的集合.
文件系统是操作系统中以文件方式管理计算机软件资源的软件和被管理的文件和数据结构(如目录和索引表等)的集合。
目标:方便的文件访问和控制、并发文件访问和控制、统一的用户接口、多种文件访问权限、优化性能、差错恢复
功能:
数据按先来后到的次序组织,每个记录由一串数据组成,是串结构的顺序文件
在堆文件中访问所需要的记录需穷举搜索。
目的是积累大量数据并保存,不适合大多数应用。
能较好地用于穷举查找且易于修改。
顺序文件常用于批处理应用,适用于对所有记录的处理,对于查询或更新某个记录的请求的处理性能不佳(需要遍历)。
是唯一可以很容易地存储在磁盘和磁带中的文件组织
索引顺序文件极大地减少了访问单条记录的时间,同时保留了顺序文件的关键特征
系统必须为每个文件设置用于描述和控制文件的数据结构,它至少要包括文件名和存放文件的盘物理地址,这个数据结构称为文件控制块FCB
文件控制块的有序集合称为文件目录,即一个文件控制块FCB就是一个文件目录项
两个问题
三种方式比较
固定组块是记录长度固定的顺序文件最常用的格式
可变长度跨越式组块存储效率高,但难于实现
可变长度非跨越式组块会导致空间的浪费,并且记录大小受块大小限制
文件分配表(FAT表):跟踪文件分配的情况
磁盘分配表(Disk allocation table,DAT)用来记录磁盘上哪些块是可用的
位表(Bit tables)
使用一个向量,向量的每一位对应磁盘中一个块的使用情况
其值为0 时表示对应盘块空闲;值为1时盘块已分配。
链式空闲区(Chained free portions)
空闲区通过指针链接,链表中每个结点都包含空闲区的长度及指向下一个空闲区的指针
使用一段时间后,磁盘会出现很多碎片,许多区都变成了只有一个块大小
创建文件和删除文件可能非常耗时
索引(Indexing)
将空闲空间看作一个文件
采用文件分配的索引分配方式来管理空闲空间
索引应基于可变大小的分区,而不是块
磁盘中每个空闲分区都有一个表项
(用户数为n,每个用户的运行时间片为q,则系统的响应时间为T=n×q。每个用户分到的时间片q由二部分组成,用于进程切换时间W和用于真正处理时间S。 ↩︎