《操作系统导论》第15章 机制:地址转换 课后习题

本文介绍了内存虚拟化的核心机制——地址转换,它利用基址寄存器和界限寄存器实现程序地址重映射和访问限制。每个进程拥有独立的虚拟地址空间,物理地址由虚拟地址加上基址寄存器值计算得出。界限寄存器用于防止越界访问,然而内存碎片可能导致浪费。课后作业涉及计算虚拟地址是否在界限内及调整寄存器值以适应不同场景。
摘要由CSDN通过智能技术生成

本章介绍了内存虚拟化的机制:地址转换。
地址转换采用基址寄存器和界限寄存器来实现程序的地址重映射和访问区域限制。地址重映射对于程序是透明的,每一个程序或者进程在运行时会获得一块地址,即私有空间,这个私有空间的起始地址是0,而真实的物理地址=程序的虚拟地址+基址寄存器的值。
在这里插入图片描述
为了限制程序访问的空间,使用界限寄存器来实现访问保护。如果访问的地址超出界限寄存器或者问负值则操作系统会做出某些特定的响应。
所以,地址转换的高效率需要底层硬件的支持。
存在的问题:

  • 每个程序在分配完内存之后,栈和堆占用的内存通常很小,内部可能存在没有使用的内存,即存在内存碎片,造成内存浪费

下面的课后作业需要relocation.py

第一题

1.用种子1、2和3运行,并计算进程生成的每个虚拟地址是处于界限内还是界限外?如果在界限内,请计算地址转换。

在这里插入图片描述
显然只有VA 1在界限内,物理地址:Base + 0x00000105 = 0x00003741
另外四个虚拟地址都是 segmentation violation
另外两个种子就贴了。

第二题

2.使用以下标志运行:-s 0 -n 10。为了确保所有生成的虚拟地址都处于边界内,要将-l(界限寄存器)设置为什么值?

在这里插入图片描述
使用固定的种子生成的随机数是一样的,所以是生成的最大虚拟地址是929,所以limit至少应设置为929

第三题

3.使用以下标志运行:-s 1 -n 10 -l 100。可以设置基址寄存器的最大值是多少,以便地址空间仍然完全放在物理内存中?(原文翻译有误,建议对照英文pdf)

在这里插入图片描述
最大界限值 = phys - limit

第四题

4.运行和第3题相同的操作,但使用较大的地址空间(-a)和物理内存(-p)。

在这里插入图片描述

第五题

5.作为边界寄存器的值的函数,随机生成的虚拟地址的哪一部分是有效的?画一个图,使用不同随机种子运行,限制值从0到最大地址空间大小。

这个翻译,我真的会谢!:(
问题是随机生成的虚拟地址有多少是有效的?
当然必须满足虚拟地址小于界限寄存器的值。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值