我是靠谱客的博主 野性抽屉,最近开发中收集的这篇文章主要介绍408操作系统必考点2,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

三、内存管理

  1. 程序的链接

静态链接:运行前将目标模块和库函数链接后不再拆开
动态链接:

  • 装入时动态链接:将用户源程序编译后所得的目标模块,在装入内存时,采取边装入边链接的链接方式。
  • 运行时动态链接:在执行时需要该目标模块时,才对它进行链接,其优点是便于修改和更新,便于实现对目标模块的共享。
  • 装入方式:
    1.绝对装入:逻辑地址和物理内存地址相同,只适用于单道程序环境
    2.可重定位装入:
    静态重定位(一次分配足够空间,运行期间不能移动和申请内存)
    动态重定位(程序运行时,才进行地址转换,需要一个重定位寄存器的支持)
  1. 简述覆盖技术和交换技术

覆盖技术:根据程序运行的局部性,可将用户内存空间分为固定区和覆盖区,将同一个程序中经常使用的部分放入固定区,将即将访问的部分放入覆盖区,但是运行的代码量大于主存容量时,仍然不可运行

交换技术:换出cpu不运行的进程,换入cpu将要运行的进程,但是必须使进程执行时间比交换时间长(交换对象是进程)

  1. 简述动态分区分配及其分配策略

在进程装入内存时,根据进程的大小动态地建立分区,灵活度高,但是需要使用动态重定位寄存器解决运行产生的外部碎片问题

分配策略:

  1. 首次适应算法:空闲分区以地址递增的方式链接,分配内存时,顺序查找到第一个满足要求的空闲分区,性能最好
  2. 最佳适应算法:空闲分区按容量递增的方式链接,分配内存时,顺序查找到第一个满足要求的空闲分区,性能最差
  3. 最坏适应算法:空闲分区以容量递减的次序链接,找到第一个能满足要求的空闲分区,容易产生内部碎片
  4. 邻近适应算法:分配内存时,从上次查找位置开始查找
    首次适应算法不仅是最简单的,而且是最有效率的
    在这里插入图片描述
    在这里插入图片描述
  1. 简述非连续分配内存管理方式

非连续分配允许一个程序分散的装入不相邻的内存分区。
在这里插入图片描述

  1. 阐述分页思想
  • 把主存空间和进程划分成大小相等且固定的块
    其中进程中的块称为页,内存中的块称为页框或帧,外存中相同大小的空间称为块

  • 固定分区只会产生内部碎片,动态分区只会产生外部碎片

  • 逻辑地址位数/虚拟地址位数 = 页号位数 +页内偏移位数
  • 虚拟内存大小/逻辑地址空间 = 2逻辑地址位数
  • 页表项数 = 2页号位数 = 页大小 / 页表项大小
  • 页大小 = 2页内偏移位数
  • 页表大小 = 页表项数 * 页表项大小
  • 页面数 = 2页号位数= 逻辑地址空间大小 / 页面大小
  • 支持内存大小 = 2页表项位数*页大小
  1. 简述基本分页过程中逻辑地址到物理地址的变换过程
  1. 计算页号(逻辑地址 / 页面大小)和页内偏移(逻辑地址 % 页面大小)
  2. 若页号大于页表长度则产生越界中断,否则继续执行
  3. 页表中页号对应的页表项地址 = 页表始址 + 页号 * 页表项长度,取出的页表项内容就是物理物理块号
  4. 物理地址 = 物理块号 * 页面大小 + 偏移地址
    在这里插入图片描述在这里插入图片描述
  1. 简述基本分段过程中逻辑地址到物理地址的变换过程

最多分段数 = 2的段号位次方 最大段长 = 2的段内偏移次方

  1. 逻辑地址中前几位为段号,后几位为段内偏移量
  2. 若段号大于段表长度,则产生越界中断,否则继续执行
  3. 段号对应的段表项地址 = 段表始址 + 段号 * 段表项长度
  4. 取出该段表项的段始址,物理地址 = 段始址 + 段内偏移
    在这里插入图片描述在这里插入图片描述
  1. 简述段页式管理方式特点
  1. 系统为每个进程建立一个段表,每个分段有一个页表,即进程是一段,段内分页
  2. 系统中有段表寄存器和页表寄存器,进程寻址和判断越界
  3. 进行一个访问需要三次访问主存
//在页式、段式和段页式存储管理中,当访问一条指令或数据时,各需要进行几次访存?其过程如何?
1.页式存储管理一次存取需要访问2次主存
	第一次根据逻辑地址的页号,访问内存的页表找到页面的物理地址
	第二次根据这个物理地址存取数据
2.段式存储管理同理访存23.段页式存储管理一次存取需要访存3次
	首先访问内存的段表,然后访问内存的页表,最后访问数据所在的物理地址
4.多级页表中,若页表分为N级则需要访存N+15.在快表命中时,只需要访存1次 

问题:
//假设一个页式存储系统具有快表,多数活动页表项都可以存在其中,
//若页表存在内存中,内存的访问时间是1us,检索快表的时间是0.2us,
//若快表命中率是85%,则有效存取时间是多少?若快表的命中率为50%,则有效存取时间是多少?
分析:
    若快表命中则存取一次时间为(0.2+1)us,若快表未命中,则存取一次时间为(0.2+1+1)us
    系统经常先访问快表,未命中时,再访问内存
	所以有效存取时间 = (0.2+1)*85% + (0.2+1+1)*(1-85%)
    

已知系统为32位实地址,采用48位虚拟地址,页面大小为4KB,页表项大小为8B,每段最大为4GB
若采取纯页式存储,则要采用多少级页表?页内偏移式多少位?
系统采用段页式存储,则每个用户可以有多少段,段内采用几级页表?
在这里插入图片描述

  1. 简述局部性原理

局部性原理表现在两个方面:

  1. 时间局部性:用过不久可能还再用
  2. 空间局部性:访问的附近可能被访问
  1. 简述虚拟存储器的特征
  1. 多次性:作业可以分多次装入内存运行
  2. 对换性:作业运行过程中,可以进行换入和换出
  3. 虚拟性:逻辑上用外存进行内存空间的扩充
  1. 简述常见的页面置换算法(按性能排序)
  1. 最佳置换算法OPT:每次淘汰最长时间不再访问的页面,算法无法实现

  2. 最近最久未使用置换算法LRU:每次淘汰最近最长时间未使用的页面进行淘汰,性能好,但需要堆栈硬件支持

  3. 时钟置换算法CLOCK:首次装入和访问时,将使用位置为1,循环扫描时将1置0,全零时,将遇到的第一个替换

  4. 先进先出置换算法FIFO:每次淘汰最早进入内存的页面 ,可能出现可用物理块增加,但页故障率增加的Belady异常
    在这里插入图片描述在这里插入图片描述

  1. 简述页面调入的策略和抖动
  1. 静态预调入策略:利用空间局部性一次调入多个相邻页面
  2. 动态请求调页策略:将运行时需要的页面调入
  3. 抖动是指刚换出的页面马上又需要换入,原因是某个进程频繁访问的页面数高于可用的物理页数
  1. 简述缺页中断的处理流程
  1. 产生缺页中断
  2. 寻找空闲物理块 / 用页面置换算法决定淘汰页
  3. 页面调出
  4. 页面调入

交换技术交换的是进程,调入调出技术对象是页面或分段

最后

以上就是野性抽屉为你收集整理的408操作系统必考点2的全部内容,希望文章能够帮你解决408操作系统必考点2所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部