1
0
mirror of https://github.com/Didnelpsun/CS408.git synced 2026-11-03 05:43:42 +08:00

将除号和乘号规范化

This commit is contained in:
Didnelpsun
2021-05-31 23:35:44 +08:00
parent cb6e0bd0dd
commit 220d5b726a
15 changed files with 81 additions and 86 deletions

View File

@@ -331,14 +331,14 @@
#### 算法评价指标
+ CPU利用率:CPU忙碌时间占总时间的比例。其中利用率=忙碌时间/总时间。
+ 系统吞吐量:单位时间内完成作业的数量。系统吞吐量=总共完成多少道作业/总时间。
+ CPU利用率:CPU忙碌时间占总时间的比例。其中利用率=忙碌时间÷总时间。
+ 系统吞吐量:单位时间内完成作业的数量。系统吞吐量=总共完成多少道作业÷总时间。
+ 周转时间:从作业被提交到系统开始到作业完成为止的时间间隔。
+ 它包括四个部分:作业在外存后备队列上等待作业调度(高级调度)的时间、进程在就绪队列上等待进程调度(低级调度)的时间、进程在CPU上执行的时间、进程等待I/O操作完成的时间。后三项在一个作业的整个处理过程中,可能发生多次。
+ (作业)周转时间=作业完成时间-作业提交时间。
+ 平均周转时间=各作业周转时间之和/作业数。
+ 带权周转时间=作业周转时间/作业实际运行的时间=(作业完成时间-作业提交时间)/作业实际运行的时间(≥1)。
+ 平均带权周转时间=各作业带权周转时间之和/作业数。
+ 平均周转时间=各作业周转时间之和÷作业数。
+ 带权周转时间=作业周转时间÷作业实际运行的时间=(作业完成时间-作业提交时间)÷作业实际运行的时间(≥1)。
+ 平均带权周转时间=各作业带权周转时间之和÷作业数。
+ 等待时间:指进程或作业处于等待处理机状态时间之和。
+ 对于进程来说,等待时间就是指进程建立后等待被服务的时间之和,在等待I/O完成的期间其实进程也是在被服务的,所以不计入等待时间。
+ 对于作业来说,不仅要考虑建立进程后的等待时间,还要加上作业在外存后备队列中等待的时间。
@@ -382,11 +382,11 @@ P4|5|4|7|12|16
因为周转时间=完成时间-到达时间。所以P1=7-0=7,P2=11-2=9,P3=12-4=8,P4=16-5=11。
带权周转时间=周转时间/运行时间。所以P1=7/7=1,P2=9/4=2.25,P3=8/1=8,PR=11/4=2.75。
带权周转时间=周转时间÷运行时间。所以P1=7÷7=1,P2=9÷4=2.25,P3=8÷1=8,PR=11÷4=2.75。
等待时间=周转时间-运行时间。根据表格可得。
所以平均周转时间=(7+9+8+11)/4=8.75。平均带权周转时间=(1+2.25+8+2.75)/4=3.5。平均等待时间=(0+5+7+7)/4=4.75。
所以平均周转时间=(7+9+8+11)÷4=8.75。平均带权周转时间=(1+2.25+8+2.75)÷4=3.5。平均等待时间=(0+5+7+7)÷4=4.75。
#### 短作业优先
@@ -449,7 +449,7 @@ P2|2|4
P3|4|1
P4|5|4
需要利用公式计算响应比,最重要的是等待时间和运行时间。当0时P1到达,P1运行。7时P1完成主动放弃处理机,此时P2P3P4全部到达了,而响应比分别为(5+4)/4=2.25、(3+1)/1=3、(2+4)/4=1.5,所以选择P3上处理机运行。8时,响应比分别为2.5、1.75,P2运行。12时P4运行。
需要利用公式计算响应比,最重要的是等待时间和运行时间。当0时P1到达,P1运行。7时P1完成主动放弃处理机,此时P2P3P4全部到达了,而响应比分别为(5+4)÷4=2.25、(3+1)÷1=3、(2+4)÷4=1.5,所以选择P3上处理机运行。8时,响应比分别为2.5、1.75,P2运行。12时P4运行。
#### 时间片轮转
@@ -1619,9 +1619,9 @@ P4|(4,3,3)|(0,0,2)|(4,3,1)
假设系统中有n个进程,m种资源。
每个进程在运行前先声明对各种资源的最大需求数,则可用一个n\*m的矩阵(可用二维数组实现)表示所有进程对各种资源的最大需求数。不妨称为最大需求矩阵Max,Max[i,j]=K表示进程Pi最多需要K个资源Rj。
每个进程在运行前先声明对各种资源的最大需求数,则可用一个n×m的矩阵(可用二维数组实现)表示所有进程对各种资源的最大需求数。不妨称为最大需求矩阵Max,Max[i,j]=K表示进程Pi最多需要K个资源Rj。
同理,系统可以用一个n*m的分配矩阵Allocation表示对所有进程的资源分配情况。Max-Allocation=Need矩阵,表示各进程最多还需要多少各类资源。
同理,系统可以用一个n×m的分配矩阵Allocation表示对所有进程的资源分配情况。Max-Allocation=Need矩阵,表示各进程最多还需要多少各类资源。
另外,还要用一个长度为m的一维数组 Available表示当前系统中还有多少可用资源。

View File

@@ -155,13 +155,13 @@
4GB = $2^{32}$B,4KB = $2^{12}$B。
因此4GB的内存总共会被分为$2^{32}/2^{12}= 2^{20}$个内存块,因此内存块号的范围应该是$0\cdots2^{20}-1$,因此至少要20个二进制位才能表示这么多的内存块号,因此至少要3个字节才够,因为每个字节8位,$3\times8=24$。
因此4GB的内存总共会被分为$2^{32}\div2^{12}= 2^{20}$个内存块,因此内存块号的范围应该是$0\cdots2^{20}-1$,因此至少要20个二进制位才能表示这么多的内存块号,因此至少要3个字节才够,因为每个字节8位,$3\times8=24$。
所以最少为三个字节。
深入来看,因为每页表项会顺序连续存储在内存中,若该页表在内存中存放的起始地址是X,则M号页对应的页表项存放在内存地址X+3*M。
深入来看,因为每页表项会顺序连续存储在内存中,若该页表在内存中存放的起始地址是X,则M号页对应的页表项存放在内存地址X+3×M。
同时因为页面大小为4KB,所以每个页框(即可用存放的最大值)大小为4*1024/3=1365个页表项,但是此时会余下4\*1024/3=1B页内碎片,所以一定会在中间空出1B内存,所以1365号页在页框约束下会在新的下一个页框存储,表项会存放在X+3\*1365+1处。这时候地址公式就不管用了。
同时因为页面大小为4KB,所以每个页框(即可用存放的最大值)大小为4*1024÷3=1365个页表项,但是此时会余下4×1024÷3=1B页内碎片,所以一定会在中间空出1B内存,所以1365号页在页框约束下会在新的下一个页框存储,表项会存放在X+3×1365+1处。这时候地址公式就不管用了。
而如果每个页表项占4字节,则每个页框刚好能放下1024个页表项,从而没有余数,能减少查找的麻烦。
@@ -175,13 +175,13 @@
基本地址变换机构需要先查询页表,再查询内存两次操作:
1. 要算出逻辑地址A对应的页号P与页内偏移量W。页号P=逻辑地址A/页面长度L(取除法的整数部分)。页内偏移量W=A逻辑地址%页面长度L(取除法的余数部分)。
1. 要算出逻辑地址A对应的页号P与页内偏移量W。页号P=逻辑地址A÷页面长度L(取除法的整数部分)。页内偏移量W=A逻辑地址%页面长度L(取除法的余数部分)。
2. 检测页号P是否越界。如果页号P大于等于页表长度M,则内中断(因为页号从0开始,页表长度至少为1,从而P=M页会越界)。
3. 根据页表寄存器中的页表项地址PA=页表起始地址F+页号P*页表项长度PL,得到页表中对应的页表项,从而确定页面存放的内存块号B。
3. 根据页表寄存器中的页表项地址PA=页表起始地址F+页号P×页表项长度PL,得到页表中对应的页表项,从而确定页面存放的内存块号B。
+ 页表长度指的是这个页表中总共有几个页表项,即总共有几个页。
+ 页表项长度指的是每个页表顶占多大的存储空间。
+ 页面大小指的是一个页面占多大的存储空间。
4. 最后物理地址E=内存块号B*页面大小L+页内偏移量W(如果内存块号和业内偏移量用二进制表示,则直接拼接起来就是最终物理地址了)。
4. 最后物理地址E=内存块号B×页面大小L+页内偏移量W(如果内存块号和业内偏移量用二进制表示,则直接拼接起来就是最终物理地址了)。
**例题** 若页面大小L为1K字节,页号2对应的内存块号B=8,将逻辑地址A=2500转换为物理地址E。
@@ -189,11 +189,11 @@
按照等价描述,若一个页面的页内偏移量占10位,所以页面大小需要10位来表示,即页面大小为$2^{10}B=1KB$。
第一步,计算页号和页内偏移量。页号P=A/L=2500/1024=2,页内偏移量W=A%L=2500%1024=452。
第一步,计算页号和页内偏移量。页号P=A÷L=2500÷1024=2,页内偏移量W=A%L=2500%1024=452。
第二步,没有越界,其存放的内存块号为8。
第三步,物理地址E=B\*L+W=8\*1024+452=8848。
第三步,物理地址E=B×L+W=8×1024+452=8848。
#### 具有快表的地址变换机构
@@ -211,9 +211,9 @@
若快表命中,则只用查找一次快表和一次内存,若快表不命中,则要查找一次快表和两次内存。
所以(1+100)\*0.9+(1+100+100)*0.1=111μs。
所以(1+100)×0.9+(1+100+100)×0.1=111μs。
若该系统支持快表慢表同时查找,则为(1+100)\*0.9+(100+100)*0.1=110.9μs。
若该系统支持快表慢表同时查找,则为(1+100)×0.9+(100+100)×0.1=110.9μs。
#### 两级页表
@@ -245,7 +245,7 @@
页号则=40-12=28位。
页面大小$2^{12}$B,页表项大小4B,则每个页面可用存放$2^{12}/4=2^{10}$个页表项。
页面大小$2^{12}$B,页表项大小4B,则每个页面可用存放$2^{12}\div4=2^{10}$个页表项。
所以各级页表最多包含$2^{10}$个页表项,需要10位二进制位才能映射到$2^{10}$个页表项,因此每一级的页表对应页号应该为10位,28位的页号至少分为三级。
@@ -263,7 +263,7 @@
1. 根据逻辑地址得到段号S和段内地址W。
2. 根据段号S是否大于等于段表寄存器的段表长度M,判断上是否越界,若是则越界中断。(段表长度至少为1)。
3. 查询段表寄存器中的段表,找到对应的段表项,段表项分为段长C和段基址B,段表项的存放地址SA=段表始值F+段号S*段表项长度SL。
3. 查询段表寄存器中的段表,找到对应的段表项,段表项分为段长C和段基址B,段表项的存放地址SA=段表始值F+段号S×段表项长度SL。
4. 检测段内地址W是否大于等于段长C(这也是段式存储与页式存储的最大不同,段式存储不定长),若是则越界中断。
5. 计算得到物理地址E=段基址B+段内地址W。
@@ -306,7 +306,7 @@
1. 根据逻辑地址得到段号S、页号P和页内偏移量W。
2. 根据段号S是否大于等于段表寄存器的段表长度M,判断上是否越界,若是则越界中断。(段表长度至少为1)。
3. 查询段表寄存器中的段表,找到对应的段表项。段表项分为段号S和页表长度L段基址和页表存放块号D。段表项的存放地址SA=段表始值F+段号S*段表项长度SL。
3. 查询段表寄存器中的段表,找到对应的段表项。段表项分为段号S和页表长度L段基址和页表存放块号D。段表项的存放地址SA=段表始值F+段号S×段表项长度SL。
4. 检测页号P是否大于等于页表项长度PL,若是则越界中断。
5. 根据页表存放块号D和页号P查询页表,找到对应页表项。页表项分为页号P和内存块号B。
6. 计算得到物理地址E=内存块号B+页内偏移量W。
@@ -338,7 +338,7 @@
交换技术在不同进程或作业之间进行的。
+ 交换(对换)技术的设计思想:内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)。
+ 交换的位置:具有对换功能的操作系统中,通常把磁盘空间分为文件区和对换区两部分。文件区主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式;对换区空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区。由于对换的速度直接影响到系统的整体速度,因此对换区空间的管理主要追求换入换出速度,因此通常对换区采用连续分配方式(学过文件管理章节后即可理解)。总之,对换区的I/o速度比文件区的更快。
+ 交换的位置:具有对换功能的操作系统中,通常把磁盘空间分为文件区和对换区两部分。文件区主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式;对换区空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区。由于对换的速度直接影响到系统的整体速度,因此对换区空间的管理主要追求换入换出速度,因此通常对换区采用连续分配方式(学过文件管理章节后即可理解)。总之,对换区的I/O速度比文件区的更快。
+ 交换的时机:交换通常在许多进程运行且内存吃紧时进行,而系统负荷降低就暂停。例如在发现许多进程运行时经常发生缺页,就说明内存紧张,此时可以换出一些进程;如果缺页率明显下降、就可以暂停换出。
+ 交换进程的选择:
+ 可优先换出阻塞进程。
@@ -415,14 +415,14 @@
与普通页表的地址变换机构不同的是,增加了请求调页、页面置换和请求修改内容三个部分。
1. 要算出逻辑地址A对应的页号P与页内偏移量W。页号P=逻辑地址A/页面长度L(取除法的整数部分)。页内偏移量W=A逻辑地址%页面长度L(取除法的余数部分)。
1. 要算出逻辑地址A对应的页号P与页内偏移量W。页号P=逻辑地址A÷页面长度L(取除法的整数部分)。页内偏移量W=A逻辑地址%页面长度L(取除法的余数部分)。
2. 检测页号P是否越界。如果页号P大于等于页表长度M,则内中断(因为页号从0开始,页表长度至少为1,从而P=M页会越界)。
3. 在快表中查找对应页号,如果找到匹配的页号(即命中),说明要访问的页表项在快表中有副本,则直接从中取出该页对应的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元。因此,若快表命中,则访问某个逻辑地址仅需一次访存即可。
4. 快表中有的页面一定是在内存中的。若某个页面被换出外存,则快表中的相应表项也要删除,否则可能访问错误的页面。
5. 如果没有找到匹配的页号,则需要访问内存中的页表。
6. 找到对应页表项后,若对应页面未调入内存,则产生缺页中断,之后由操作系统的缺页中断处理程序进行处理,包括调页与页面置换。
7. 根据页表寄存器中的页表项地址PA=页表起始地址F+页号P*页表项长度PL,得到页表中对应的页表项,从而确定页面存放的内存块号B。
8. 最后物理地址E=内存块号B*页面大小L+页内偏移量W(如果内存块号和业内偏移量用二进制表示,则直接拼接起来就是最终物理地址了)。
7. 根据页表寄存器中的页表项地址PA=页表起始地址F+页号P×页表项长度PL,得到页表中对应的页表项,从而确定页面存放的内存块号B。
8. 最后物理地址E=内存块号B×页面大小L+页内偏移量W(如果内存块号和业内偏移量用二进制表示,则直接拼接起来就是最终物理地址了)。
简单而言,在具有快表机构的请求分页系统中,访问一个逻辑地址时,若发生缺页,则地址变换步骤是:查快表(未命中)――查慢表(发现未调入内存)—―调页(调入的页面对应的表项会直接加入快表)―—查快表(命中)――访问目标内存单元。
@@ -445,7 +445,7 @@
内存块3| | |1|1| |3| |3| | |3| | |1| | | |1| |
是否缺页|√|√|√|√| |√| |√| | |√| | |√| | | |√| |
所以缺页中断发生了9次,页面置换发生了6次,缺页率=9/20=45%。
所以缺页中断发生了9次,页面置换发生了6次,缺页率=9÷20=45%。
#### 先进先出置换算法
@@ -497,7 +497,7 @@
#### 改进型时钟置换算法
简单的时钟置换算法仅考虑到一个页面最近是否被访问过。事实上,如果被淘汰的页面没有被修改过,就不需要执行I/o操作写回外存。只有被淘汰的页面被修改过时,才需要写回外存。
简单的时钟置换算法仅考虑到一个页面最近是否被访问过。事实上,如果被淘汰的页面没有被修改过,就不需要执行I/O操作写回外存。只有被淘汰的页面被修改过时,才需要写回外存。
因此,除了考虑一个页面最近有没有被访问过之外,操作系统还应考虑页面有没有被修改过。在其他条件都相同时,应优先淘汰没有修改过的页面,避免I/O操作。这就是改进型的时钟置换算法的思想。

View File

@@ -54,7 +54,7 @@
+ 顺序存储:
+ 可变长记录:无法实现随机存取。每次只能从第一个记录开始依次往后查找。因为需要显式地给出记录长度。
+ 定长记录:
+ 可实现随机存取。记录长度为L,则第i个记录存放的相对位置是i*L。
+ 可实现随机存取。记录长度为L,则第i个记录存放的相对位置是i×L。
+ 若采用串结构,只能从头开始查找,无法快速找到某关键字对应的记录。
+ 若采用顺序结构,可以快速找到某关键字对应的记录(如折半查找)。
@@ -199,9 +199,9 @@
**例题** 假设磁盘块大小为1KB,一个索引表项占4B,求文件最大长度。
若磁盘块大小为1KB,一个索引表项占4B,则一个磁盘块只能存放1*1024/4=256个索引项。
若磁盘块大小为1KB,一个索引表项占4B,则一个磁盘块只能存放1×1024÷4=256个索引项。
若某文件采用两层索引,则该文件的最大长度,就是所有索引都用来指向一个文件的数据,所以可以到256\*256*1KB= 65536KB= 64MB。
若某文件采用两层索引,则该文件的最大长度,就是所有索引都用来指向一个文件的数据,所以可以到256×256×1KB= 65536KB= 64MB。
### 文件存储空间管理
@@ -247,7 +247,7 @@
+ 每个二进制位对应一个盘块。如“0”代表盘块空闲,“1”代表盘块已分配。
+ 位示图一般用连续的“字”来表示,如一个字的字长是16位,则一共有16列,字中的每一位对应一个盘块。因此可以用(字号,位号)对应一个盘块号。当然有的题目中也描述为(行号,列号)。
+ 若盘块号、字号、位号从0开始,若n表示字长,则(字号,位号)=(i,j)的二进制位对应的盘块号b=ni+j。
+ b号盘块对应的字号i= b/n,位号j= b%n。
+ b号盘块对应的字号i= b÷n,位号j= b%n。
+ 如何分配:若文件需要K个块,
1. 顺序扫描位示图,找到K个相邻或不相邻的“0”。
2. 根据字号、位号算出对应的盘块号,将相应盘块分配给文件。
@@ -442,16 +442,16 @@ rw读写等)。
### 磁盘操作时间
+ 寻找时间(寻道时间)Ts=s+m*n:在读/写数据前,将磁头移动到指定磁道所花的时间:
+ 寻找时间(寻道时间)Ts=s+m×n:在读/写数据前,将磁头移动到指定磁道所花的时间:
+ 启动磁头臂是需要时间的。假设耗时为s。
+ 移动磁头也是需要时间的。假设磁头匀速移动,每跨越一个磁道耗时为m,总共需要跨越n条磁道。
+ 延迟时间Tr=(1/2)*(1/r)=1/2r:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。
+ 延迟时间Tr=(1/2)×(1/r)=1/2r:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。
+ 磁盘转速为r(单位:转/秒,或转/分)。
+ 1/r就是转一圈需要的时间。
+ 找到目标扇区平均需要转半圈,因此再乘以1/2。
+ 传输时间Tt=b/(r*N):从磁盘读出或向磁盘写入数据所经历的时间。
+ 传输时间Tt=b÷(r×N):从磁盘读出或向磁盘写入数据所经历的时间。
+ 假设磁盘转速为r,此次读/写的字节数为b,每个磁道上的字节数为N。
+ 每个磁道要可存N字节的数据,因此b字节的数据需要b/N个磁道才能存储。而读/写一个磁道所需的时间刚好又是转一圈所需要的时间1/r,T=(1/r)*(b/N)。
+ 每个磁道要可存N字节的数据,因此b字节的数据需要b/N个磁道才能存储。而读/写一个磁道所需的时间刚好又是转一圈所需要的时间1/r,T=(1/r)×(b/N)。
+ 操作时间=寻道时间Ts+延迟时间Tr+传输时间Tt。
+ 延迟时间和传输时间都与磁盘转速相关,且为线性相关。而转速是硬件的固有属性,因此操作系统也无法优化延迟时间和传输时间,操作系统只能通过磁盘调度算法优化寻道时间。