所有二进制转其他进制 都可以采用按权相加 的方法
十六进制转二进制:8421
八进制转二进制:421
十进制转二进制:除2取余 读数从下往上排列
逻辑地址与物理地址的转换
步骤:
1.将十六进制的逻辑地址转化为二进制的逻辑地址
2.计算二进制前多少位为页号(用分页系统的位数-页大小的位数)
3.物理块号:
将页号的二进制转化为十进制,得出对应的页号,进而得出对应的物理块号
将十进制的物理块号转化为二进制的物理块号
4.业内地址:二进制的逻辑地址除页号外的剩余地址
5.物理地址=物理块号+业内地址,最后将二进制的物理地址转化为十六进制的物理地址
统一解法
无论题目如何变化,页式地址映射的核心步骤是:
-
分离页号(P)和页内偏移(W):
-
若逻辑地址是十进制,用除法和取模。
-
若逻辑地址是十六进制/二进制,按页面大小对应的位数拆分。
-
-
查页表:根据页号找到物理块号(P')。
-
计算物理地址:
P' × 页面大小 + W
。
逻辑地址=页号+页内地址
物理地址=块号+页内地址
28. (单选题)在某分段存储管理系统中,某逻辑段的大小为4KB,给定该段内的逻辑地址0X10008,其对应的段号为6,则它的物理地址为___________。
- A. 0X60008
- B. OX00608
- C. 0X6008
- D. 0X10006
z
- 逻辑地址=页号+页内偏移量
- 物理地址=块号+页内偏移量
- 页内偏移量=逻辑地址➗每页大小
地址表示形式不同:逻辑地址可能是以二进制或十六进制给出,需要先转换为十进制再计算。
十进制解法更高效:当逻辑地址直接以十进制给出时,直接除法和取模更快捷。
何时用二进制?题目给出十六进制/二进制地址时(如第二题的 2A3C_H
)。
页内地址与页面大小的关系
24. (单选题)某页式管理系统中,地址寄存器的低11位表示页内地址,则页面大小为( )
- A. 2K字节
- B. 4K字节
- C. 512字节
- D. 1024字节
虚拟存储器的最大实际容
37. (单选题)页的逻辑地址形式:页号24位,页内地址10位。内存128M,辅存10G,那么虚拟存储器最大实际容量为_________。
- A. 1024K
- B. 10G
- C. 10G+128M
- D. 16G
信号量的值:可正(可用资源数)、可零(无可用资源,无等待)、可负(等待进程数)。
信号量 pv操作 p操作申请 v操作释放
46. (单选题)采用先进先出页面淘汰算法的系统中,一进程在内存占3块(开始为空),页面访问序列为1.2.3.4.1.2.5.1.2.3.4.5.6。运行时会产生( )次缺页中断。
- A. 8
- B. 7
- C. 10
- D. 9
先进先出(FIFO)淘汰最早进入内存的页面
先进先出页面淘汰算法是指当需要淘汰页面时,选择最先进入内存的页面进行淘汰。
具体分析过程
已知进程在内存中占3块,开始时内存为空,页面访问序列为1,2,3,4,1,2,5,1,2,3,4,5,6。
- 访问页面1: 内存为空,1装入内存,产生1次缺页中断,此时内存中的页面为[1,空,空]。
- 访问页面2: 内存中没有2,2装入内存,产生1次缺页中断,此时内存中的页面为[1,2,空]。
- 访问页面3: 内存中没有3,3装入内存,产生1次缺页中断,此时内存中的页面为[1,2,3]。
- 访问页面4: 内存中没有4,且内存已满,根据FIFO算法,淘汰最先进入的1,装入4,产生1次缺页中断,此时内存中的页面为[4,2,3]。
- 访问页面1: 内存中没有1,淘汰最先进入的2,装入1,产生1次缺页中断,此时内存中的页面为[4,1,3]。
- 访问页面2: 内存中没有2,淘汰最先进入的3,装入2,产生1次缺页中断,此时内存中的页面为[4,1,2]。
- 访问页面5: 内存中没有5,淘汰最先进入的4,装入5,产生1次缺页中断,此时内存中的页面为[5,1,2]。
- 访问页面1: 内存中有1,不产生缺页中断,此时内存中的页面为[5,1,2]。
- 访问页面2: 内存中有2,不产生缺页中断,此时内存中的页面为[5,1,2]。
- 访问页面3: 内存中没有3,淘汰最先进入的5,装入3,产生1次缺页中断,此时内存中的页面为[3,1,2]。
- 访问页面4: 内存中没有4,淘汰最先进入的1,装入4,产生1次缺页中断,此时内存中的页面为[3,4,2]。
- 访问页面5: 内存中没有5,淘汰最先进入的2,装入5,产生1次缺页中断,此时内存中的页面为[3,4,5]。
- 访问页面6: 内存中没有6,淘汰最先进入的3,装入6,产生1次缺页中断,此时内存中的页面为[6,4,5]。
缺页中断次数统计
将每次产生缺页中断的次数相加,1+1+1+1+1+1+1+0+0+1+1+1+1=10(次)。
所以运行时会产生10次缺页中断,答案选C。
缺页率=缺页次数/访问页面总次数 命中率=1-缺页率
最佳置换算法(OPT) 向后看 淘汰最后一个出现的页面
- 定义:最佳置换算法是一种理想的页面置换算法,它选择在将来最远才会被使用的页面进行替换。如果一个页面在未来永远不会被使用,则它会被立即替换;如果有多个页面都不会再被使用,则可以随机选择一个替换。
- 特点:
- 这种算法无法在实际系统中实现,因为它需要未来的知识(即知道将来哪些页面会被访问),但在理论分析中非常有用,作为衡量其他算法性能的一个标准。
- 它保证最低的缺页率。
最近最久未使用(LRU) 向前看 淘汰最近未使用的
- 定义:LRU算法基于程序局部性原理,认为最近一段时间内没有被访问的页面,在未来也可能长时间不会被访问。因此,当需要置换页面时,会选择最近最久未被使用的页面进行替换。
- 特点:
- LRU可以通过硬件支持(如使用特殊的计数器或栈)来近似实现,但其实现成本较高。
- 在实际应用中,LRU通常比其他非理想化的页面置换算法(如FIFO)表现更好,因为它更符合程序访问模式的特点。
- 实际实现中常使用近似LRU的方法,因为完全准确地追踪每个页面最后访问时间的成本很高。
作业调度算法(先来先服务调度sua、短作业调度算法、高相应比优先调度算法)
周转时间:结束时间-提交时间
等待时间+服务时间
等待时间=开始执行时间-提交时间
带权周转时间:周转时间%运行时间
平均的话,再除以4
作业 | 提交时间 | 运行时间 | 开始时间 | 结束/完成时间 | 周转时间 | 带权周转时间 |
补充后四个
5. (单选题) 设有四个作业同时到达,每个作业的执行时间均为2小时,它们在一台处理机上按单道批处理方式运行,则平均周转时间为________。
- A. 1小时
- B. 5小时
- C. 2.5小时
- D. 8小时
A. 先来先服务(FCFS):公平但不利于短作业,容易造成“长作业阻塞短作业”。
B. 轮转(RR):用于分时系统,强调公平性和响应性,不特别偏向长短作业。
C. 最高响应比优先(HRRN):结合了等待时间和作业长度,对短作业有利,也避免长作业长期得不到调度。
D. 均衡调度:这不是一个标准的调度算法名称,可能只是干扰项。
短作业优先调度算法
SJF 可能导致某些作业永远不被调度
在上一个结束/完成时间,已经到达(提交时间) 的作业中选择运行时间最短的
在1结束的时间,只有2和3到达,但3的运行时间更短,所以我们选择3
- 在没有中断、抢占的情况下,运行时间 = 服务时间。
- 如果作业被中断多次(如在抢占式调度中),则运行时间会被分成多个片段,但总和仍等于服务时间。
高响应比优先调度算法 ,权高优先,优先权=(等待时间+执行时间)/执行时间
等待时间=上个任务结束时间 - 当前任务提交时间
开始时间-当前任务提交时间
注意:一定是上一个完成时间内已经到达的作业,比较他们的优先比
计算优先比的时候,用的都是上个任务的结束时间
- 等待时间:这是作业从到达系统到开始执行之间的时间差。如果作业一到达就能立即执行,那么它的等待时间为0;否则,等待时间就是所有在其之前执行的作业的总服务时间减去其到达后的等待时间。
- 周转时间:这是作业从到达系统到完成所需的时间,即完成时间减去到达时间。
3. (单选题)假定某系统有同类互斥资源m个,可并发执行且共享该类资源的进程有n个,而每个进程申请资源的最大量为x(n<=x<=m),当不等式( )成立时,系统一定不会发生死锁。
- A. nx<=m
- B. m(x-1)+1<=n
- C. nx+1<=m
- D. m-nx+n-1>=0
正确答案:D:m-nx+n-1>=0;
银行家算法
核心原则
-
Need ≤ Available:
第一个进程的Need
必须完全 ≤ 当前Available
资源,否则无法分配。 -
优先选择需求最小的进程:
选择Need
最小的进程(尤其是资源需求总量最小的),可最大化后续灵活性。
第一问:是否安全
work +allocation>=need,>则安全
一般情况都是安全的,但要把表格列出来
进程 | work(等于上一个的work+allocation) | need(max-allocation) | allocation | work+allocation | finish(√/×) |
第二问
某个进程是否能实时资源分配?
步骤一 :检查两条件(request是否小于need和available
-
合法性检查:
- 请求的资源数不能超过该进程的剩余需求(即
Request <= Need
)。 - 请求的资源数不能超过当前系统可用资源数(即
Request <= Available
)。
- 请求的资源数不能超过该进程的剩余需求(即
步骤二: 更新三数据 (available、need 、allocation)
available=available-request
need=need-request
allocation=allocation+request
步骤三:检查是否处于安全状态 (跟第一问一样列表格)
第一个work=available=available-request 第二个work等于上一个的work+allocation
第一个need=need-request 第二个need等于max-allocation
第一个allocation=allocation+request 第二个按表格
项目 | 第一问:判断系统是否安全 | 第二问:能否分配资源 |
---|---|---|
目的 | 判断系统整体是否处于安全状态 | 判断某个资源请求是否能安全处理 |
核心条件 | 是否能找到一个安全序列让所有进程完成 | 请求是否合法 + 分配后是否仍安全 |
是否修改数据 | 不修改任何资源数据 | 需要临时修改资源数据进行模拟 |
结果影响 | 决定系统是否稳定 | 决定是否允许一次资源分配 |
安全性检查
当一个进程请求资源时,系统会进行一系列的安全性检查以决定是否满足此请求。具体步骤如下:
- 首先,检查请求的资源量是否超过了该进程还需的最大需求(即Request <= Need)。
- 然后,检查请求的资源量是否超过当前系统中可用的资源量(即Request <= Available)。
- 如果以上两个条件都满足,则尝试假设分配这些资源给请求的进程,并更新相应的数据结构(Available, Allocation, 和 Need)。
- 接着,系统将模拟运行所有进程,检查是否存在一个安全序列——即一个进程顺序列表,使得在该顺序下每个进程都能完成其执行而不导致死锁。
对《操作系统》这门课的收获
通过本学期对《操作系统》课程的学习,我对计算机系统的整体运行机制有了更深入的理解,也掌握了操作系统在资源管理、任务调度等方面的核心原理。这门课程不仅提升了我的系统级编程能力,也让我从更高的视角去思考程序与硬件之间的交互关系。
首先,在知识层面,我学会了操作系统的基本功能和结构,包括进程管理、内存管理、文件系统和设备管理四大核心模块。其中,进程管理部分让我理解了多任务并发执行的机制,掌握了进程与线程的区别、调度算法以及同步互斥问题的解决方法;内存管理则让我明白了虚拟内存的工作原理、分页与分段机制以及页面置换策略,这些知识对于理解程序在内存中的运行方式非常有帮助;在文件系统方面,我了解了文件的逻辑结构、目录管理方式及磁盘分配策略;而设备管理部分则介绍了I/O系统的构成、中断处理和缓冲技术等关键内容。
其次,在实践能力方面,课程中穿插了一些实验操作,例如使用Linux系统调用进行简单的系统编程。这些动手环节不仅加深了我对理论知识的理解,也提高了我分析和解决实际问题的能力。比如在编写多进程或多线程程序时,我更加清楚地认识到并发控制的重要性,也学会了如何利用信号量、互斥锁等机制来避免资源竞争和死锁问题。
此外,这门课还锻炼了我的思维方式。操作系统作为一个复杂的系统,其设计强调效率、安全和稳定性。在学习过程中,我逐渐养成了从系统角度思考问题的习惯,学会权衡不同设计方案的优劣,并尝试从底层机制出发优化程序性能。
最后,我也意识到,《操作系统》不仅是计算机专业的重要基础课程,更是许多后续课程(如计算机网络、数据库系统、嵌入式系统等)的理论支撑。它为我今后从事软件开发、系统架构、云计算等相关领域打下了坚实的基础。
总的来说,学习操作系统让我真正理解了“程序是如何运行的”,也让我更加接近计算机的本质。虽然部分内容抽象且复杂,但正是这种挑战性让我在学习过程中不断成长。未来,我希望能将所学知识应用到更多实际项目中,进一步提升自己的系统思维和技术能力。