个人总结,仅供参考,欢迎加好友一起讨论
计算机系统概述(★)
计算机硬件(★★)
操作系统(★★★★)
进程管理
进程的状态(★)
前趋图(★★★★)
信号量与PV操作(★★★★★)
死锁及银行家算法(★★★)
存储管理
段页式存储(★★★)
页面置换算法(★)
文件管理
绝对路径与相对路径(★)
索引文件(★)
位示图(★★★)
系统性能
性能指标(★)
性能设计(★)
性能评估(★)
有关计算机硬件部分,在第二版新教材改版后在2.2增加了这块内容,但是内容很少很少,只有基础的硬件组成介绍,按照惯例还是把先前的硬件部分统一整理了一下,仅供参考。
有关操作系统部分,在第二版新教材改版后在2.3.2,改版后的描述较少,只有基本概念,个人认为还是掌握原有全部内容,所以在原有的基础上增加了新教材的内容,仅供参考。
计算机系统可划分为硬件(子系统)和软件(子系统)两部分。硬件由机械、电子元器件、磁介质和光介质等物理实体构成,例如处理器(含运算单元和控制单元)、存储器、输入设备和输出设备等。软件是一系列按照特定顺序组织的数据和指令,并控制硬件完成指定的功能。可将计算机软件进一步分为系统软件和应用软件,系统软件是指支持应用软件的运行,为用户开发应用软件提供平台支撑的软件,而应用软件是指计算机用户利用计算机的软、硬件资源为某一专门的应用目的而开发的软件。
CPU组成如下:
运算器 | 1 算术逻辑单元ALU:数据的算术运算和逻辑运算 2 累加寄存器AC:通用寄存器,为ALU提供一个工作区,用于暂存数据 3 数据缓冲寄存器DR:写内存时,暂存指令或数据 4 状态条件寄存器PSW:存状态标志与控制标志(争议:也有将其归为控制器的) |
控制器 | 1 程序计数器PC:存储下一条要执行指令的地址 2 指令寄存器IR:存储即将执行的指令 3 指令译码器ID:对指令中的操作码字段进行分析解释 4 时序部件:提供时序控制信号 |
冯·诺依曼结构
冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。
特点:
哈佛结构
哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。
特点:
表示:
N = 基数E * F
E:指数,阶码(阶码 == 指数) F:尾数
例如:83可以写成101*8.3 101写成21*10.1
运算过程:
对阶 >>> 尾数计算 >>> 结果格式化
特点:
1) 一般尾数用补码,阶码用移码
2) 阶码的位数决定数的表示范围,位数越多范围越大
3) 尾数的位数决定数的有效精度,位数越多精度越高
4) 对阶时,小数向大数看齐
5) 对阶是通过较小数的尾数右移实现的
总结:
浮点数的精度由尾数部分来确定,范围则取决于阶码的长度
阶码越大,所表示的浮点数范围越大
尾数的位数越大,所表示的浮点数精度越高
体系结构类型 | 控制部分 | 处理器 | 主存模块 | 关键特性 | 代表 |
---|---|---|---|---|---|
单指令流单数据流SISD | 1个 | 1个 | 1个 | 适用于单片机 | 单处理器系统 |
单指令流多数据流SIMD | 1个 | 多个 | 多个 | 各处理器以异步的方式执行同一条指令 | 并行处理器,阵列处理器,超级向量处理器,GPU |
多指令流单数据流MISD | 多个 | 1个 | 多个 | 被证明是不可能,至少不实际 | 目前没有,文献中说流水线计算机为此类 |
多指令流多数据流MIMD | 多个 | 多个 | 多个 | 能够实现作业,任务,指令等各级全面并行 | 多核处理器(SMP、BMP、MP),多处理机系统(MPP),多计算机 |
单指令流单数据流已经基本看不到了,除了在嵌入式单片机中还在使用外。
多指令单数据流这个分类,目前只有理论价值。
总结:
凡是带有多关键字(多指令、多数据流),主存模块就是多个,否则为单个 。
数据流,代表处理器个数。单数据流,代表处理器为1个;多数据流,处理器为多个。
指令流,代表控制部分个数。单指令,代表控制部分为单个;多指令,控制部分为多个。
指令系统类型 | 指令特点 | 寻址方式 | 实现方式 | 其它 |
---|---|---|---|---|
CISC(复杂) | 数量多,使用频率差别大,可变长格式 | 支持多种 | 微程序控制技术(微码) | 研制周期长 |
RISC(精简) | 数量少,使用频率接近,定长格式,大部分为单周期指令,操作寄存器,只有Load/Store操作内存 | 支持方式少 | 增加了通用寄存器,硬布线逻辑控制为主,适合采用流水线 | 优化编译,有效支持高级语言 |
精简指令集计算机(RISC,Reduced Instruction Set Computers)
流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理是针对不同指令而言的,它们可同时为多条指令的不同部分进行工作,以提高各部件的利用率和指令的平均执行速度。
流水线执行时间:多个指令完成各个阶段流水线步骤的时间。
流水线周期:为执行时间最长的一段,通常用 △t 代表
计算公式:1条指令执行时间 +(指令条数 - 1)* 流水线周期
理论公式:( t1 + t2 + … + tk ) + ( n - 1 ) * △t
实践公式:k * △t + ( n - 1) * △t
注:解题中,先用理论公式,未得到解再用实践公式。
流水线吞吐率:ThroughPut rare,指在单位时间内流水线所完成的任务数量或输出的结果数量。
计算流水线吞吐率的公式:TP = 指令条数 / 流水线执行时间
流水线的最大吞吐率:TPmax = 1 / △t
流水线加速比:完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比称为流水线的加速比。
计算流水线加速比的公式:不使用流水线执行时间 / 使用流水线执行时间
一条指令的执行过程可以分解为取指、分析和执行三步
在取指时间t取指=3△t、分析时间t分析=2△t、执行时间t执行=4△t的情况下
若按流水线的方式执行,流水线周期为( )△t,则10条指令全部执行完需要( ) △t。
解析:
流水线周期为:为执行时间最长的一段指令,故为 4 △t。
10条指令全部执行完需要多少 △t?
按照流水线计算公式,(3 + 2 + 4) + (10 - 1) * 4 = 45,故为 45 △t。
度为2的超标量流水线,执行时间为( )△t ?
解析:
10条指令,度为2,所以 10 / 2 = 5
按照流水线计算公式,(3 + 2 + 4) + (5 - 1) * 4 = 25,故为 25 △t。
度为3的超标量流水线,执行时间为( )△t ?
解析:
10条指令,度为3,所以 10 / 3 = 4(取天花板数)
按照流水线计算公式,(3 + 2 + 4) + (4 - 1) * 4 = 21,故为 21 △t。
主存储器 | ||
---|---|---|
英文 | 名称 | 定义说明 |
RAM | 随机存取存储器 | 它可以分为动态RAM和静态RAM两种。DRAM中的信息会逐渐消失。SDAM是信息不会消失只要不断电。 |
ROM | 只读存储器 | 用于系统BIOS或者是微程序控制。 |
PROM | 可编程存储器 | 只能进行一次写入操作的ROM |
EPROM | 可擦除的PROM | 既可读又可写,可以多次写入。写入前用紫外线照射15分钟来擦去数据。 |
E2PROM | 电可擦除EPROM | 与EPROM相比,其他都一样,只是在写入数据前,不需要将数据都擦去后再写入 |
FlashMem | 闪速存储器 | 其性能在EPROM和E2PROM之间,删除速度远快于EPROM,但还不能进行字节级的删除操作。 |
CAM | 相联存储器 | 是一种基于数据内容进行访问的数据设备。其他都是基于地址的访问。因为是基于数据,所以速度比其他的主存储器方式来说要快很多。 |
主存分为两类:随机存取存储器和只读存储器。 随机存取存储器有DRAM和SRAM两种,而ROM,PROM,EPROM,E2PROM这些都是属于只读存储器。ROM哪怕是掉电了,依然是可以存储相应的信息的。 |
||
辅助存储器 | ||
Tape | 磁带存储器 | 顺序存储的设备,存储的容量大,存取时间长,价格便宜 |
HardDisk | 磁盘存储器 | 磁盘的存取时间包括:寻道时间和查找时间 |
RAID | 廉价磁盘冗余阵列 | 用多个较小的磁盘存储器替换单一大容量的磁盘存储器,RAID一共分八个等级 |
CD-ROM | 光盘存储器 | 利用激光束在记录表面存储信息 |
Cache存储器 | ||
Cache特点 | 提高CPU数据输入输出的速率,突破冯诺依曼瓶颈,即CPU与存储系统间数据传送带宽限制。 | |
Cache概念 | 使用Cache改善系统性能的依据是程序的局部性原理,因为Cache是计算机体系中访问速度最快的层次。 | |
寄存器 | ||
定义 | CPU内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,寄存器有累加器(ACC)。 |
Cache == 高速缓冲存储器
Cache的功能:提高CPU数据输入输出的速率,突破冯·诺依曼瓶颈,即CPU与存储系统间数据传送带宽限制。
在计算机的存储系统体系中,Cache是访问速度最快的层次。
Cache是为了解决高速运行的CPU与主存储器之间速度不匹配的问题。
Cache对程序员来说是透明的。
透明的理解,可以理解为“透明人”,意味着看不到,所以“CPU对Cache寻址由硬件自动完成的”。
使用Cache改善系统性能的依据是程序的局部性原理。(时间局部性,空间局部性)
时间局部性 | 一条指令执行后不久可能再次执行,例for循环 |
空间局部性 | 访问了一个元素,不久它旁边的元素可能被执行,例数组 |
工作集原理 | 频繁访问的页面集合打包起来,一起调用短时间不会替换,提高效率 |
Cache访问时间 = 命中率 * 访问Cache时间 + (1 - 命中率) * 访问主存时间
**典型例题:**某计算机主存的读/写时间为100ns,有一个指令和数据合一的Cache,已知该 Cache的读/写时间为10ns,取指令的命中率为98%,取数的命中率为95%。在执行某类程序时,约有1/5指令需要额外存/取一个操作数。假设指令流水线在任何时候都不阻塞,则设置Cache后,每条指令的平均读取时间约为ns。
解:(10 * 98% + 100 * 2%) + (10 * 95% + 100 * 5%) * 20%
Cache和CPU的映像(映射)方法 | |
---|---|
直接相联映像 | 优点是地址变换很简单,速度快 缺点是不灵活,块冲突率高 |
全相联映像 | Cache和内存全部映射 优点位置不受限制,十分灵活,冲突率低 缺点是无法从主存块中直接获得Cache的块号,变换比较复杂,速度慢 只适用于小容量的Cache |
组相联映像 | 折中上面两种方式 距离CPU较近位置可以采用直接映像或者组相联印象 距离CPU较远可以采用全相联映像 冲突率居中 |
Cache页面淘汰算法 | |
随机算法 | 最简单的替换算法。随机法完全不管Cache块过去、现在及将来的使用情况,简单地根据一个随机数,选择一块替换掉。 |
先进先出FIFO | 按调入Cache的先后决定淘汰的顺序,即在需要更新时,将最先进入Cache的块作为被替换的块。 这种方法要求为每块做一记录,记下它们进入Cache的先后次序。 这种方法容易实现,而且系统开销小。其缺点是可能会把一些需要经常使用的程序块(如循环程序)替换掉。 |
近期最少使用LRU | LRU算法是把CPU近期最少使用的块作为被替换的块。 这种替换方法需要随时记录Cache中各块的使用情况,以便确定哪个块是近期最少使用的块。 LRU算法相对合理,但实现起来比较复杂,系统开销较大。通常需要对每一块设置一个称为“年龄计数器”的硬件或软件计数器,用以记录其被使用的情况。 |
最不经常使用页置换LFU | 要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。 LFU的复杂度以及计数器规模都比LRU大,LRU只关注近期访问情况,而LFU会统计累计访问次数作为淘汰的依据。该算法计数器位数多,实现困难。 |
Cache的读写过程(Cache如何与主存内容保持一致) | |
写回法 | 读与写都是高速,只写回Cache,在Cache淘汰时再写回内存 |
写直达 | Cache和主存同时发生写修改,效率慢 |
标记法 | 只写回内存,并将标志位清0,再次使用该数据时,再次读取调用,最灵活的 |
存储单元:
存储单元个数 = 最大地址 - 最小地址 + 1
编址内容:
按字编址:存储体的存储单元是字存储单元,即最小寻址单位是一个字。
按字节编址:存储体的存储单元是字节存储单元,即最小寻址单位是一个字节。
总容量 = 存储单元个数 * 编址内容
根据存储器所要求的容量和选定的存储芯片的容量,就可以计算出所需芯片的总数:
总片数 = 总容量 / 每片的容量
典型例题:内存按字节编址,利用8K×4bit的存储器芯片构成84000H到8FFFFH的内存,共需( )片?
解:按照存储单元个数 = 最大地址 - 最小地址 + 1,也就是存储单元个数 = 最大地址+ 1 - 最小地址
得,8FFFFH + 1 = 90000H ===>> 90000H - 84000H = C000H (H代表十六进制,故采用逢16进1)
C000H ===>> 12 * 163 * 8bit
按照总容量 = 存储单元个数 * 编址内容
得,单位芯片容量 8K * 4bit = 8 * 210 * 4bit
按照总片数 = 总容量 / 每片的容量
得, 12 * 163 * 8bit / 8K * 4bit = 8 * 210 * 4bit = 12(片)
类似这种题,16进制的换算较为麻烦或者不好理解,有以下快速解题技巧:
1 16机制从10开始到15都是用字母代替,A代表10,B代表11,C代表12,D代表13,E代表14,F代表15
2 去掉前面的16进制字母替代数字,会得到一个全是0的数
比如C000H,C是12(H只是代表它是16进制的数,十六进制数以0x开头或者以H结尾)
得到1000H(按照数学的提取倍数去理解)
3 速记规则
10H = 16B
100H = 256B
1000H = 4096B = 4K
10000H = 65536B = 64K
100000H = 1048576B = 1024k
192 = C0H
注:做类似这种计算题,包括各种计算题,请细观察题目中的单位是B还是b
B(byte/字节) b(bit/位) ===>> 1B = 8b,也就是1个字节等于8个位,8bit是正常的一个存储单元
存取时间 = 寻道时间 + 等待时间(寻扇区中位置时间,即平均定位时间+转动延迟)
寻道时间是指磁头移动到磁道所需的时间
等待时间为等待读写的扇区转到磁头下方所用的时间
先来先服务 FCFS |
最短寻道时间优先 SSTF |
扫描算法 SCAN |
循环扫描 CSCAN |
先来先服务 FCFS
白话解释:先来先服务,规定访问哪个磁道,就访问哪个磁道。
最短寻道时间优先 SSTF
白话解释:最短寻道,下一个被访问的距离上一个被访问的距离最短的最先被访问。
平均寻道长度 = 每次移动的距离相加之和 / 移动的磁道数
按总线相对于CPU或其他芯片的位置可分为内部总线和外部总线两种。
按总线功能来划分,可分为地址总线、数据总线、控制总线。
地址总线 | 用来指定在RAM之中储存的数据的地址 |
数据总线 | 在CPU与RAM之间来回传送需要处理或是需要储存的数据 |
控制总线 | 将微处理器控制单元的信号,传送到周边设备 |
按照总线中数据线的多少,可分为并行总线和串行总线。
名称 | 数据线 | 特点 | 应用 |
---|---|---|---|
并行总线 | 多条双向数据线 | 有传输延迟,适合近距离连接 | 系统总线 计算机各部件 |
串行总线 | 一条双向数据线 或 两条单向数据线 |
速率不高,但适合长距离连接 | 通信总线 计算机之间或计算机与其它系统间 |
单工与双工:
单工 | 指A只能发信号,而B只能接收信号,通信是单向的。 |
半双工 | 指A能发信号给B,B也能发信号给A,但这两个过程不能同时进行。 |
全双工 | 比半双工又进了一步,在A给B发信号的同时,B也可以给A发信号,这两个过程可以同时进行互不影响 |
一条总线,同一时刻,只允许一个设备发送,但允许多个设备接收数据 |
奇偶校验码:(不常考)
奇偶校验码的编码方法是:由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码。
奇校验:整个校验码(有效信息位和校验位)中“1”的个数为奇数。
偶校验:整个校验码(有效信息位和校验位)中“1”的个数为偶数。
奇偶校验,可检查1位的错误,不可纠错。
海明码:
位置必须是在2n位置(n从0开始,分别代表从右边数起分别是第1、2、4、8、16…),信息码也就是在非2n位置。
设数据位是n位,海明校验码是k位,则n和k的必须满足以下关系式:2k >= n+k+1
典型例题:求0101配置的海明码?
解:0101的数据位n = 4,根据 2k >= n+k+1,得 k = 3
CRC循环冗余校验码:
CRC的编码方法是:在k位信息码之后拼接r位校验码。应用CRC码的关键是如何从k位信息位简便地得到r位校验位(编码),以及如何从k+r位信息码判断是否出错。
知识要点:
多项式为G(X)=Xn+X+1,信息码是xxxxx,计算CRC校验码,n代表从右边数起的第几位(就是2的几次方)。
解题步骤:
多项式化解成二进制数
信息码末尾加n个0,做模二除法运算(不进位加法)
得到的余数即为CRC校验码(可能问:信息码+校验码)
典型例题:G(X)=X4+X+1,信息码10111
解:G(X)=X4+X+1 >>> X4+X+1 >>> X4+03+02+X1+X0
得到二进数:10011
信息码10111 + 0000得101110000,因多项式最高位为4所以追加4个0
进行模二除法运算,如下:
取余数,得到校验码为1100(可能需要组合信息码+校验码,如100111100)
RAID1 | 磁盘镜像阵列 |
RAID1称为镜像,它将数据完全一致地分别写到工作磁盘和镜像磁盘 磁盘空间利用率为50% |
|
RAID2 | 采用纠错海明码的磁盘阵列 |
RAID2采用了海明码的纠错技术,用户需增加校验盘来提供单纠错和双验错功能。对数据的访问涉及阵列中的每一个盘,大量数据传输时I/O性能较高,但是不利于小批量数据传输 实际应用中很少使用 |
|
RAID3和RAID4 | 采用奇偶校验码的磁盘阵列 |
把奇偶校验码存放在一个独立的校验盘上。如果有一个盘失效,其上的数据可以通过对其他盘上的数据进行异或运算得到。读数据很快,但是因为写入数据时要计算校验位,速度较慢 RAID3采用位交叉奇偶校验码,RAID4采用块交叉奇偶校验码。RAID3适用于大型文件且I/O需求不频繁的应用,RAID4适用于大型文件的读取 |
|
RAID5 | 无独立校验盘的奇偶校验码的磁盘阵列 |
RAID5无独立校验盘,校验信息分布在组内所有盘上,对于大批量和小批量数据的读写性能都很好,适用于I/O需求频繁的应用 当有n块阵列盘时,用户空间为n-1块盘容量 |
|
RAID6 | 独立的数据硬盘与两个独立的分布式校验方案 |
RAID6技术是在RAID5基础上为了进一步加强数据保护而设计的,实际上是一种扩展RAID5 当有n块阵列盘时,用户空间为n-2快盘容量 |
|
RAID7 | 最优化的异步高I/O速率和高数据传输率 |
RAID7完全可以理解为一个独立存储计算机,它自身带有操作系统和管理工具 完全可以独立运行 |
|
RAID10 | 最可靠与高性能 |
RAID1+0也被称为RAID10标准,实际是将RAID1和RAID0标准结合的产物 RAID1是一个冗余的备份阵列,RAIDO负责数据读取的阵列 由于利用了RAID0极高的读写效率和RAID1较高的数据保护和恢复能力,使RAID10成为了一种性价比较高的等级 |
计算机系统中硬件层之上的软件通常按照三层来划分,如下图所示:
操作系统具有的五大功能:处理器管理,存储管理,设备管理,文件管理和作业管理。不管任何类型的操作系统都有这样的分配。
现代的操作系统大多拥有两种工作状态:核心态和用户态。我们一般的应用程序工作在用户态,而内核模块和最基本的操作系统核心工作在核心态。
操作系统的结构可以分为无序结构,层次结构,面向对象结构,对称多处理结构和微内核结构。
特殊的操作系统:
特殊的操作系统 | |
---|---|
分类 | 特点 |
批处理操作系统 | 单道批:一次一个作业入内存,作业由程序、数据、作业说明书组成。 多道批:一次多个作业入内存。特点:多道、宏观上并行微观上串行。 |
分时操作系统 | 采用时间片轮转的方式为多个用户提供服务,每个用户感觉独占系统。 特点:多路性、独立性、交互性和及时性。 |
实时操作系统 | 实时控制系统和实时信息系统。 交互能力要求不高,可靠性要求高(规定时间内响应并处理)。 |
网络操作系统 | 方便有效共享网络资源,提供服务软件和有关协议的集合。 主要的网络操作系统有:Unix、Linux和Windows Server系统。 |
分布式操作系统 | 任意两台计算机可以通过通信交换信息。 是网络操作系统的更高级形式,具有透明性、可靠性和高性能等特性。 |
微机操作系统 | Windows:Microsoft开发的图形用户界面、多任务、多线程操作系统。 Linux:免费使用和自由传播的类Unix操作系统,多用户、多任务、多线程和多CPU的操作系统。 |
嵌入式操作系统 | 运行在智能芯片环境中。 特点:微型化、可定制(针对硬件变化配置)、实时性、可靠性、易移植性(HAL和BSP支持) |
进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。它由程序块、进程控制块(PCB)和数据块三部分组成。
PCB,PCB是进程存在的唯一标志,是进程的一个组成部分,是一种记录型数据结构。内容包含进程标识符、状态、位置信息、控制信息、队列指针(链接同一状态的进程)、优先级、现场保护区等。
进程与程序
进程与程序的区别:进程是程序的一次执行过程,没有程序就没有进程。
程序是一个静态的概念,而进程是一个动态的概念,它由创建而产生,完成任务后因撤销而消亡;进程是系统进行资源分配和调度的独立单位,而程序不是。
进程与线程
进程的2个基本属性:可拥有资源的独立单位,可独立调度和分配资源的基本单位。
一般情况下,一个进程会包含多个线程。
PCB的组织形态 | 描述 |
---|---|
线性表形式 | 把所有的PCB组织在一张线性表中,每次查找需要扫描全表 这种方式适用于系统中进程数目不多的情况 |
索引表形式 | 是线性表形式的改变,将同一状态的进程归入一个索引表 多个状态对应多个不同的索引表 |
链接表形式 | 把具有同一状态的PCB用其中的链接字链接成一个队列 PCB存储在一个连续的区域 |
三态图:就绪,运行,阻塞三种状态。就绪的时候等待时间片从而运行,而阻塞是说明进程没有被喂饱资源,有了资源就到就绪态
五态图:运行状态,活跃就绪状态,静止就绪状态,活跃阻塞状态和静止阻塞状态。除了运行态以外,阻塞态分为了静止阻塞和活跃阻塞,而就绪态也被分为了静止就绪和活跃就绪,这样就一共有了五个状态。
如何区分同步与互斥?
互斥,千军万马过独木桥,同类资源的竞争关系
同步,速度有差异,在一定情况停下等待,进程之间的协作关系
互斥,主要讲的是同类资源的竞争关系
一个进程在执行过程中,可能要停下来等等其他的进程,这就是同步(会有类似选择题)
多个进程共享一台打印机,典型互斥
消费者消费商品后生产者生产商品才可以投入市场,属于同步关系
典型例题:
注:P是荷兰语的Passeren,V是荷兰语的Verhoogo。
PV操作是实现进程同步与互斥的常用方法。
P操作表示申请一个资源,负责获得资源并阻塞,V操作表示释放一个资源。
P操作和V操作是低级通信原语,在执行期间不可分割。
PV操作由P操作原语和V操作原语组成(原语是不可中断的过程)。
PV操作的意义:我们用信号量及PV操作来实现进程的同步和互斥。
信号量:是一种特殊的变量(全局的),习惯用大写S表示。
大部分情况下(没有事先说明),信号量S的初始值会被认为是1,1代表初始情况下有资源进行分配调用。
对信号量进行操作,具体定义如下:
P操作(请求分配一个资源):
V操作(释放一个资源):
典型例题:
前趋图是一个有向无循环图,由节点和有向边组成,节点代表各程序段的操作,而节点间的有向边表示两个程序段操作之间存在的前趋关系。用这种图可以描述多个程序或进程之间的执行顺序关系。
前趋图标记规则:从小到大,节点流出的都是V操作,流入的都是P操作,箭线代表一个信号量S。
进程管理是操作系统的核心,但如果设计不当,就会出现死锁的问题。如果一个进程在等待一件不可能发生的事,则进程就死锁了。而如果一个或多个进程产生死锁,就会造成系统死锁。
如何预防死锁:顺序资源分配(有序资源分配法),银行家算法。
死锁资源数计算公式:
有m个共享资源,n个进程,每个进程所需的最大资源数为w, 那么仅是m > n * (w - 1)时,才会不死锁。
也就是m至少 = n * (w - 1) + 1
典型例题:系统有3个进程A、B、C,这3个进程都需要5个系统资源。如果系统至少有多少个资源,则不可能发生死锁?
解:按照死锁计算公式,3 * (5 - 1) = 12,系统至少需要12 + 1 = 13个资源。
银行家算法分配资源的原则:
典型例题:假设系统中有三类互斥资源R1、R2、R3,可用资源分别是9、8、5。在T0时刻系统中有P1、P2、P3、P4和P5五个进程,这些进程对资源的最大需求量和已分配资源数如下所示,如果进程按___序列执行,那么系统状态是安全的。
解:首先求剩下的资源数:
R1 = 9 - (1 + 2 + 2 + 1 + 1) = 2
R2 = 8 - (2 + 1 + 1 + 2 + 1) = 1
R3 = 5 - (1 + 1 + 3) = 0
从上面中获得,由于R1剩余2,R2剩余1,R3剩余0,只能满足P2和P4的再需求资源数
所以排除掉选项A,验证B选项:P2→P4→P5→P1→P3。
(R1剩 2R2剩1 R3剩0)分配给P2还需(0 1 0) >>> (R1剩2 R2剩0 R3余0),P2进程结束返还(R1剩4 R2剩2 R3余1)
(R1剩4 R2剩2 R3余1)分配给P4还需(0 0 1) >>> (R1剩4 R2剩2 R3余0),P4进程结束返还(R1剩5 R2剩4 R3余1)
(R1剩5 R2剩4 R3余1)分配给P5还需(2 3 1) >>> (R1剩3 R2剩1 R3余0),P5进程结束返还(R1剩6 R2剩5 R3余4)
(R1剩6 R2剩5 R3余4)分配给P1还需(5 3 1) >>> (R1剩1 R2剩2 R3余3),P1进程结束返还(R1剩7 R2剩7 R3余5)
(R1剩7 R2剩7 R3余5)分配给P3还需(6 0 1) >>> (R1剩1 R2剩7 R3余4),P1进程结束返还(R1剩9 R2剩8 R3余5)
根据以上步骤,确定B选项没有问题,每次分配剩余资源数都满足需求,其他选项也可以同样方式验证。
比如,我们验证C选项:P2→P1→P4→P5→P3,同上步骤:
(R1剩 2R2剩1 R3剩0)分配给P2还需(0 1 0) >>> (R1剩2 R2剩0 R3余0),P2进程结束返还(R1剩4 R2剩2 R3余1)
(R1剩4 R2剩2 R3余1)分配给P1还需(5 3 1) >>> R1资源和R2资源不够分配,故C选项为不安全序列
逻辑地址 | 相对地址,CPU所生成的地址,逻辑地址是内部和编程使用的、并地址不唯一 |
物理地址 | 绝对地址,加载到内存地址寄存器中的地址,内存单元的真正地址 |
地址重定位,将程序中的虚拟地址(逻辑地址)变换成内存的真实地址(物理地址)的过程 |
存储管理的主要目的是解决多个用户使用主存的问题,其存储管理方案主要包括分区存储管理、分页存储管理、分段存储管理、段页式存储管理以及虚拟存储管理。
分区存储管理 | |
分页存储管理 | 基本分页 |
分段存储管理 | 基本分段 |
段页式存储管理 | 基本段页式 |
虚拟存储管理 | 请求分页 请求分段 请求段页式 对应基本分页、分段、段页式 |
分区存储管理,把主存的用户区划分成若干个区域,每个区域分配给一个用户作业使用,并限定它们只能在自己的区域中运行。(历年考察中很少涉及)
页式存储 == 分页存储
将一个进程(程序)的地址空间划分成若干个大小相等的区域,称为页。
相应地,将主存(内存)空间划分成与页相同大小的若干个物理块,称为块或页框。
在为进程分配主存时,将进程中若干页分别装入多个不相邻接的块中。
优点:利用率高,碎片小,分配及管理简单。
缺点:增加了系统开销;可能产生抖动现象。
逻辑地址 = 页号 + 页内地址,物理地址 = 页帧号 + 页内地址
页式存储(细节问题):将程序与内存均划分为同样大小的块,以页为单位将程序调入内存 | |
计算步骤 | 1 逻辑地址拆分为:页号 + 页内地址 2 页号 = 逻辑地址/页大小 页内地址 = 逻辑地址%页大小 3 使用页表进行页号和物理块号对应映射 4 物理地址 = 物理块号*页大小 + 页内地址 页大小/块大小的基本单位是B字节,注意题目单位转换 二进制、十进制和十六进制的区别,注意简便算法 |
页式存储主要考察,逻辑地址转换物理地址,注意各个进制的简便算法
典型例题:逻辑地址2100B(字节),页大小 = 块大小 = 1024B ?
解:页面 = 2100/1024 = 2,从逻辑页号列表中对应寻找2页号对应的物理块号(比如对应物理块号是8)
页内地址 = 2100 % 1024 = 52,则物理地址 = 8 * 1024 + 52 = 8244
典型例题:如下图
状态位:1代表页面在内存中,0代表页面不在内存中,不在内存中页面就无法被淘汰,不予考虑
访问位:记录页面最近有没有被访问,被访问标记为1,没访问标记为0,访问位会定时去清0(访问过的清0)
修改位:1代表页面最近被修改,0代表未被修改,不管时间长短,只要被修改,就会被标记为1
上图中,内存中分配了物理页(页帧号)2、3、5、6,现在页号0、1、2、5在内存中,页号3、4不在内存中
假设想用页号3,需要淘汰页号0、1、2、5的其中一个。
页面淘汰原则:
段式存储 == 分段存储
分段式存储管理系统中,为每个段分配一个连续的分区,而进程中的各个段可以离散地分配到主存的不同分区中。
在系统中为每个进程建立一张段映射表,简称为“段表”。每个段在表中占有一个表项,在其中记录了该段在主存中的起始地址(又称为“基址”)和段的长度。进程在执行时,通过査段表来找到每个段所对应的主存区。
段式存储:按用户作业中的自然段来划分逻辑空间,然后调入内存,段的长度可以不一样。
优点:多道程序共享内存,各段程序修改互不影响。
缺点:内存利用率低,内存碎片浪费大。
段式存储主要考察,主要判断逻辑地址是否合法(段号 + 偏移量),偏移量不能超过段长
“逻辑地址”到“物理地址”转换时会出现“地址越界”
段页式系统的基本原理是先将整个主存划分成大小相等的存储块(页框),将用户程序按程序的逻辑关系分为若干个段,并为每个段赋予一个段名,再将每个段划分成若干页,以页框为单位离散分配。在段页式系统中,其地址结构由段号、段内页号和页内地址三部分组成。
段页式存储:段式与页式的综合体。先分段,再分页。1个程序有若干个段,每个段中可以有若干页,每个页的大小相同,但每个段的大小不同。
优点:空间浪费小、存储共享容易、存储保护容易、能动态连接。
缺点:由于管理软件的增加,复杂性和开销也随之增加,需要的硬件以及占用的内容也有所增加,使得执行速度大大下降。
快表是一块小容量的相联存储器(Associative Memory),由高速缓存器组成,速度快,并且可以从硬件上保证按内容并行查找,一般用来存放当前访问最频繁的少数活动页面的页号。
快表:将页表存于Cache上;慢表:将页表存于内存上。
在前面介绍的存储管理方案中,必须为每个作业分配足够的空间,以便装入全部信息。当主存空间不能满足作业要求时,作业无法装入主存执行。如果一个作业只部分装入主存便可开始启动运行.其余部分暂时留在磁盘上,在需要时再装入主存,这样可以有效地利用主存空间。从用户角度看,该系统所具有的主存容量将比实际主存容量大得多,人们把这样的存储器称为虚拟存储器。
文件(File)是具有符号名的、在逻辑上具有完整意义的一组相关信息项的集合,例如,一个源程序、一个目标程序、编译程序、一批待加工的数据和各种文档等都可以各自组成一个文件。
一个文件包括文件体和文件说明:
文件的类型:
文件在逻辑上一定是连续的,在物理上可以是分散的。
文件的逻辑结构,方便用户使用;文件的物理结构,在物理设备的存放方式。
此部分经常考察逻辑号与物理号的计算转换,采取的具体什么类型索引,计算文件长度等等
直接索引范围:索引块数量 * 索引块大小
一级间接索引范围:(磁盘数据块(物理盘块)大小 / 地址项大小)* 索引块大小
二级间接索引范围:(磁盘数据块(物理盘块)大小 / 地址项大小)的2次方 * 索引块大小
三级间接索引范围:(磁盘数据块(物理盘块)大小 / 地址项大小)的3次方 * 索引块大小
典型例题:某文件系统文件存储采用文件索引节点法。假设文件索引节点中有8个地址项iaddr[0]~iaddr[7],每个地址项大小为4字节,其中地址项iaddr[0]~iaddr[5]为直接地址索引,iaddr[6]是一级间接地址索引,iaddr[7]是二级间接地址索引,磁盘索引块和磁盘数据块大小均为4KB。该文件系统可表示的单个文件最大长度是( )KB,若要访问iclsClient.dll文件的逻辑块号分别为6、520和1030,则系统应分别采用( )。
解:直接索引范围:6 * 4KB = 24KB
直接索引范围的逻辑块号:24KB / 4 == 6 >>> 0 ~ 5,对应存有5个物理块
一级索引范围:(4KB / 4字节) * 4KB = 4096KB
一级索引范围的逻辑块号:4096KB / 4 == 1024 >>> 6 ~ 1029,对应存有1024个物理块
二级索引范围:(4KB / 4字节) 2 * 4KB = 4194304KB,逻辑块号:1030以上,包括1030
文件长度:24KB + 4096KB + 4194304KB = 4198424KB
位示图法。该方法是在外存上建立一张位示图(Bitmap),记录文件存储器的使用情况。每一位仅对应文件存储器上的一个物理块,取值0和1分别表示空闲和占用。
位示图是利用二进制的一位来表示磁盘中的一个盘块的使用情况。当其值为“0”时,表示对应的盘块空闲;“1”时,表示已经分配。有的系统把"0"作为盘块已分配的标记,把“1”作为空闲标志。(它们的本质上是相同的,都是用一位的两种状态标志空闲和已分配两种情况。)磁盘上的所有盘块都有一个二进制位与之对应,这样,由所有盘块所对应的位构成一个集合,称为位示图。位示图是一种非常常用的结构,在索引,数据压缩等方面有广泛应用。
典型例题:某文件管理系统在磁盘上建立了位示图(Bitmap),记录磁盘的使用情况。假设计算机系统的字长为32位,磁盘的容量为300GB,物理块的大小为1MB,那么位示图的大小为( ? )个字。
解:1GB == 1024MB,300GB == (300 * 1024)MB,又因为物理块为1MB,所以有300 * 2的10次方个物理块
由于采用位示图记录,那么就有300 * 2的10次方个的bit位,因为字长是32位
所以用:300 * 2的10次方除以32,32是2的5次方,最终计算的,300 * 2的5次方 == 9600
文件属性:
文件名的组成
绝对路径:是从盘符开始的路径。
相对路径:是从当前目录开始的路径。
若当前目录为: D1,要求F2路径,则:绝对路径:/D1/W2/F2, 相对路径:W2/F2
设备输入/输出(I/O)管理的方式:
从上往下CPU的工作量越来越少,效率从上往下越来越高
分区存储管理 | |
---|---|
程序控制方式 CPU与I/O的串行工作 |
分为无条件传送和程序查询方式两种。方法简单,硬件开销小,但I/O能力不高,严重影响CPU的利用率。程序查询方式,CPU必须不停的测试I/O设备的状态端口。 |
程序中断方式 CPU与I/O的并行工作 |
与程序控制方式相比,中断方式因为CPU无需等待而提高了传输请求的响应速度。CPU通过调用中断控制设备获得设备状态,设备通过中断通知CPU状态改变、获得数据等。中断结束后CPU会继续执行之前的程序。 |
DMA(直接内存存取) CPU与I/O的并行工作 |
为了在主存和外设之间实现高速,批量数据交换而设置的。DMA方式比程序控制方式与中断方式都高效。DMA控制器与内存直接进行批量数据交换,CPU只控制开始和结束,传输过程无需CPU干预。 DMA硬件直接完成,无需CPU做任何干涉,适合快速I/O设备,且在CPU一个总线结束后相应DMA。 |
通道方式 CPU与I/O的并行工作 |
主机中有专门的通道处理器,CPU干预更少,有对应的通道程序和通道状态字保存在内存中,CPU向通道处理器发出启动指令即可不管,通道处理器执行通道程序控制设备传输完所有数据之后发起一个中断交给CPU处理,设备挂接在通道上。 |
输入输出处理机(IOP) CPU与I/O的并行工作 |
一个独立的系统,有自己的内存、指令熊、中断,专用于大型高效系统的输入输出设备控制,利用共享存储器等与主机交换信息。输入输出处理机中可能有多个通道连接设备。 |
典型例题:计算机系统中常用的输入/输出控制方式有无条件传送、中断、程序查询和DMA方式等。当采用( ? )方式时,不需要CPU执行程序指令来传送数据。
解:描述很明确,不需要CPU执行程序,DMA方式
系统性能相关可以参考:架构 - 系统配置与性能评价
SPOOLing是Simultaneous Peripheral Operation On-Line (即外部设备联机并行操作)的缩写,它是关于慢速字符设备如何与计算机主机交换信息的一种技术,通常称为"假脱机技术"。
SPOOLing技术(虚拟输入输出设备常用到的技术)先放入到磁盘缓冲区,再放入到设备区,它是在磁盘上开辟响应的区域,所以缓冲区是外存。
SPOOLing技术将一台独享打印机改造为可供多个用户共享的打印机。
SPOOLing技术特点:
将传统的操作系统代码放置到更高层,从操作系统中去掉尽可能多的东西,而只留下最小的核心,称之为微内核(C/S结构)。
实质 | 优点 | 缺点 | |
---|---|---|---|
单体内核 | 将图形、设备驱动及文件系统等功能全部在内核中实现,运行在内核状态和同一地址空间 | 减少进程间通信和状态切换的系统开销,获得较高的运行效率 | 内核庞大,占用资源较多且不易剪裁。系统的稳定性和安全性不好 |
微内核 | 只实现基本功能,将图形系统、文件系统、设备驱动及通信功能放在内核之外 | 内核精练,便于剪裁和移植。系统服务程序运行在用户地址空间,系统的可靠性、稳定性和安全性较高 可用于分布式系统 |
用户状态和内核状态需要频繁切换,从而导致系统效率不如单体内核 |