操作系统复习(七)

操作系统复习(七)

一些题目

记一些我忘记的题目。

重定位

1. 什么叫重定位?

将程序地址空间中的逻辑地址(虚拟地址) 转换为物理内存中的物理地址的过程。

2. 动态重定位的特点:

  • 转换时机 :在程序运行时(指令执行时)动态完成地址转换,而非加载时。
  • 硬件依赖 :需依赖MMU(内存管理单元)重定位寄存器(基址寄存器) 支持。
  • 灵活性高 :程序在内存中可移动 (换进换出),且允许程序非连续存放或仅部分装入。
  • 性能代价 :每次访存都需进行地址转换,增加了运行时开销(硬件会通过TLB加速优化)。
  • 支持共享:多个进程可动态映射到同一物理地址,便于代码共享和进程隔离。

动态链接

1. 什么是动态链接?

将程序中对库函数的链接推迟到**程序运行时(或加载时)**才完成,而非编译链接阶段。这使得多个进程可共享同一份动态库(如.dll.so)的物理代码副本。

2. 用何种内存分配方法实现?

采用分页式 (或段页式)虚拟内存分配方法。

  • 原因 :分页支持非连续分配按需调页,允许动态库作为独立模块映射到进程的虚拟地址空间,且仅在需要时才将对应页面调入物理内存,并通过内存映射机制实现进程间共享同一份物理页框。

页错误

主要是第二问,我之前没有思考过这个问题。

(1)为什么引入缺页中断?

由于请求分页存储管理采用按需调页 策略,程序运行时并不预先将所有页面装入内存 。当CPU访问的逻辑页面不在物理内存 (页表有效位为0)时,指令无法继续执行,必须由缺页中断 介入,将所需页面从磁盘调入内存,从而打破"程序必须完全装入才能运行"的限制,实现虚拟内存。

(2)缺页中断的实现由以下4部分组成及实现方法:

组成部分 实现方法
① 硬件陷阱与现场保护 CPU的MMU检测到缺页后,自动 触发中断,将程序计数器(PC)、CPU状态等压入内核栈,并切换至核心态,转入缺页中断处理程序。
② 地址合法性检查 中断程序检查 引发缺页的虚拟地址是否在进程的逻辑地址空间内。若非法(越界),则终止进程;若合法,继续下一步。
③ 页面调入(含置换) 分配 空闲物理页框;若无空闲,调用页面置换算法 (如LRU)换出牺牲页。同时发起磁盘I/O操作,将目标页从交换区或文件读入该物理页框。
④ 更新页表并恢复现场 磁盘I/O完成后,修改页表项 ,将有效位置为1,填入物理页框号。恢复 CPU上下文(寄存器),重新执行引发缺页的那条指令,此时访问命中。

程序分段

复制代码
5、假定有一个求n!程序被两个进程所共享,求n!程序如下:
  int fun(int n)
{    
        if (n==0||n==1) 			
             return 1;		
        else 			
             return fun(n-1)*n;	
}
若系统采用段式管理,应如何安排程序? 为什么?

在段式管理下,应将程序代码(fun函数的指令)单独作为一个纯代码段,且两个进程共享该代码段 ;同时为每个进程分别设立独立的私有堆栈段和数据段 (用于存放参数n、返回地址及临时变量)。

原因如下:

  1. 段式管理以段为共享单位:段式存储管理中,每个段是一个逻辑独立的实体,系统允许不同进程的段表项指向同一物理段。因此可将只读的代码指令放入一个段中,供两个进程映射到相同的物理内存区域。
  2. 代码具有可重入性(纯代码)fun函数在执行过程中不会修改自身指令,属于纯代码。共享同一份物理代码副本不会互相干扰,能节省大量内存空间。
  3. 执行上下文必须私有 :递归程序严重依赖堆栈 保存每层调用的返回地址和局部变量n。若共享堆栈段,两个进程的调用序列会互相覆盖,导致计算结果错乱。因此,堆栈段和数据段必须物理分开,每个进程各有一份。

FIFO和LRU

访问序列呈现"顺序循环" 的情况下,FIFO 和 LRU 两种置换算法发生缺页时被置换的页完全一样。

核心条件 :访问串中的页面按固定顺序循环出现,且在单个周期内每个页面最多只被访问一次 。这使得页面进入内存的顺序(FIFO依据)与其最近被访问的时间顺序(LRU依据)完全同步


举例说明

假设系统分配给进程的物理块数为 3,访问串为:

1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4...

我们模拟前几步,对比两种算法的置换行为(初始内存为空):

步骤 访问页 FIFO队列(尾进) FIFO置换页 LRU栈(顶新) LRU置换页
1 1 1 --- 1 ---
2 2 1,2 --- 2,1 ---
3 3 1,2,3 --- 3,2,1 ---
4 4 2,3,4 1 4,3,2 1
5 1 3,4,1 2 1,4,3 2
6 2 4,1,2 3 2,1,4 3

结果:从第4步开始,每一步发生缺页时,两种算法淘汰的页面完全相同(依次为 1, 2, 3, 4...)。

原因:在此类循环访问串中,页面被装入内存的"年龄"顺序与其被访问的"新旧"顺序始终保持一致,因此两种算法决策等同。

相关推荐
liang_jy2 小时前
内存管理(二)—— 覆盖与交换
面试·操作系统
liang_jy2 小时前
内存管理(一)—— 内存管理的概念
面试·操作系统
^yi14 小时前
【Linux系统编程】对操作系统的理解
linux·运维·服务器·操作系统·系统调用·os
小肝一下15 小时前
7. 库制作与原理
linux·c语言·操作系统·bash·shell·动静态库
2401_841495641 天前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
OpenAnolis小助手2 天前
Anolis OS 23.5 发布:全新平台支持、DDE 桌面升级,安全与多架构能力再度跃升
安全·操作系统·龙蜥社区·anolis os·anolis os 23.5
CS创新实验室3 天前
量子计算机的操作系统:原理、实践与经典架构之对比
架构·操作系统·量子计算
暴力求解4 天前
Linux ---线程控制(二)
linux·运维·服务器·操作系统
谙弆悕博士6 天前
系统集成项目管理工程师教程(第3版)笔记——第1章:信息化发展
网络·数据库·笔记·系统架构·操作系统·项目管理·信息化
Reart6 天前
操作系统实验哈工大lab2——系统调用
后端·操作系统