操作系统概念-第8章
本文最后更新于一年前或更久前,其中的信息可能已经有所发展或是发生改变。

Tips:此为⬛⬛⬛⬛⬛⬛大学⬛⬛⬛⬛⬛⬛⬛学院2019级《操作系统原理》课程中的部分课程作业题目解析和展示

8.1 说出逻辑地址和物理地址之间的两个区别。

逻辑和物理地址之间的基本差异是CPU在运行程序的角度下生成逻辑地址。 另一方面,物理地址是存储器单元中存在的位置,并且可以物理地访问。CPU为程序生成的所有逻辑地址集称为逻辑地址空间。 然而,映射到对应逻辑地址的所有物理地址的集合被称为物理地址空间。通过编译时间和加载时间地址绑定方法可以生成相同的逻辑地址和物理地址。而运行时地址绑定方法(内存管理单元)生成的逻辑和物理地址彼此不同。

8.4 假设逻辑地址空间为64页,每个页1024个字(字节),映射到32帧的物理内存上。

a.逻辑地址中有多少位?

b.物理地址中有多少位?

a.页码地址2^6=64 页偏移2^10=1024 所以是16

b.帧地址2^5=32 帧便宜2^10=1024 所以是15

8.5 允许页面表中的两个条目指向内存中相同的帧的效果是什么? 解释如何使用这种效果来减少将大量内存从一个地方复制到另一个地方所需的时间。 在另一页面上更新某些字节的效果是什么?

通过在页面表中允许两个条目指向内存中的相同页面帧,用户可以共享代码和数据。 如果代码是可重入的,则可以通过广泛的程序(如文本编辑器,编译器和数据库系统)的共享使用来保存许多内存空间。 ”复制“大量内存会受到不同页表指向同一内存位置的影响。

然而,共享不可重入的代码或数据意味着任何有权访问代码的用户都可以修改它,这些修改将反映在其他用户的“副本”中。所以应该使用“写时拷贝”。

8.6 描述一种机制,通过这种机制,一个段可以属于两个不同进程的地址空间。

由于段表是基址限制寄存器的集合,因此当两个不同进程的段表中的条目指向同一物理位置时,可以共享段。

两个段表必须具有相同的基指针,并且两个进程中的共享段号必须相同。

8.9 解释内部碎片和外部碎片的区别。

固定大小的内存块分配给进程时,会发生内部碎片。分配给进程的内存略大于进程请求的内存。它是进程占用的区域,但不能被进程使用。在进程释放空间之前,系统无法使用此空间。

动态地将可变大小的内存空间分配给进程时,会发生外部碎片。虽然这些外部碎片没有被任何程序占用,但是当总可用内存(洞)足以容纳新进程时,它不是连续的,若大小不能满足程序的请求,则不能被新程序所使用。

8.12 大多数系统允许程序在执行期间将更多内存分配给其地址空间。 程序中的堆段中的数据分配是此类分配内存的示例。 支持以下方案中的动态内存分配所需的是什么?

a.连续内存分配

b.纯分段

c.纯分页

a. 连续内存分配:

可能需要重新定位整个程序,因为没有足够的空间供程序增加分配的内存空间。

b.纯分段:

可能还需要重新定位需要扩展的段,因为没有足够的空间供该段增加其分配的内存空间。

c.纯分页:

在这个方案中,可以进行新页面的增量分配,而不需要重新定位程序的地址空间。

8.13 比较连续内存分配,纯分段和纯分页的内存组织方案,以及以下问题:

a.外部碎片

b.内部碎片

c.进程间共享代码的能力

  1. 连续内存分配下,连续内存分配方案会受到外部碎片的影响;当旧进程死亡和新进程启动时,会出现空洞。它也不允许进程共享代码,因为进程的虚拟内存段不会被分割成非连续的细粒度段。
  2. 纯粹的分段也会受到外部碎片的影响,因为一个进程的一个部分被连续地布置在物理内存中,而碎片会随着死亡进程的部分被新进程的部分所取代而产生。但是,分段使进程能够共享代码; 例如,两个不同的进程可以共享一个代码段,但具有不同的数据段。
  3. 纯分页不会受到外部碎片的影响,而是受到内部碎片的影响。进程是按页面粒度分配的,不过如果一个页面没有被完全利用,就会导致内部碎片和相应的空间浪费。分页还允许进程以页的粒度共享代码。

8.14 在具有分页的系统上,一个进程无法访问它不拥有的内存。 为什么? 操作系统如何允许访问其他内存? 为什么要或不应该?

寻址系统上的地址是一个逻辑页码和一个偏移量。通过基于逻辑页码搜索表以生成物理页码,可以找到物理页。因为操作系统控制页表的内容,所以它可以将进程限制为只访问分配给该进程的那些物理页。进程无法引用它不拥有的页,因为该页将不在页表中。

为了允许这样的访问,操作系统只需要允许将非进程内存的条目添加到进程的页表中。共享内存就是一个例子。当两个或多个进程需要交换数据时,这很有用,因为它们只需读写相同的物理地址(可能在不同的逻辑地址)。这使得进程间通信非常有效。

8.15 解释为什么iOS和Android等移动操作系统不支持交换。

原因:首先,这些移动设备通常使用容量有限的闪存,由于空间限制,可以避免交换。其次,在闪存变得不那么可靠之前,它可以支持有限数量的写操作。主要是因为Android不希望它的引导盘被用作交换空间,原因在前面的问题中概述。然而,Android确实支持交换,只是用户必须提供自己单独的SD卡来交换空间。

8.18 解释为什么使用地址空间标识符(ASID)。

ASID在TLB中提供地址空间保护,同时支持多个不同进程的TLB表项。如果TLB不支持单独的ASID,那么每次选择新的页表(上下文切换)时,必须刷新TLB,以确保下一个执行进程不会使用错误的转换信息。

8.19 在许多系统中,程序二进制文件的结构通常如下。代码从一个小的、固定的虚拟地址(例如0)开始存储。代码段后面是用于存储程序变量的数据段。当程序开始执行时,堆栈被分配到虚拟地址空间的另一端,并被允许向较低的虚拟地址增长。这个结构对以下方案有什么意义

a.连续内存分配

b.纯分段

c.纯分页

  1. 连续内存分配要求操作系统在程序开始执行时将整个虚拟地址空间范围分配给程序,这可能比进程的实际内存需求高得多。
  2. 纯分段使操作系统能够灵活地在程序启动时为每个分段分配一小段,并在需要时扩展分段。
  3. 纯分页并不要求操作系统在启动时为进程分配最大范围的虚拟地址空间,但是它仍然要求操作系统分配一个跨越程序所有虚拟地址空间的大页表。当程序需要扩展堆栈或堆时,它需要分配一个新页,但相应的页表项会重新分配。

8.20 假设页面大小为1 kb,下面的地址引用的页码和偏移量是多少(以小数形式提供)

a. 3085

b. 42095

c. 215201

d. 650000

e. 2000001

a. 3085 = 1024*3 + 13 Page=3,Offset=13

b. 42095=1024*41 + 111 Page=41,Offset=111

(后面同理,不再推了)

c. page=210 offset=161

d. page=634 offset=784

e. page=1953 offset=129

8.21 BTV操作系统有一个21位的虚拟地址,但在某些嵌入式设备上,它只有一个16位的物理地址。它还有一个2 kb的页面大小。下面每一项有多少项?

a.常规的单层页表

b.倒置页表

a. 2kb = 2^11, 21-11=10 so it’s 2^10

b.16-11=5, 由于倒置页表“每个物理内存的页只有一条相对应的条目”,所以为2^5

8.23 考虑一个256页的逻辑地址空间,页面大小为4 kb,映射到64帧的物理内存。

a.逻辑地址需要多少位?

b.物理地址需要多少位?

a.4kb=2^12,256=2^8,所以是20位

b.64=2^6,所以是18位

8.28 考虑下列段表:

Segment Base Length
0 219 600
1 2300 14
2 90 100
3 1327 580
4 1952 96

下列逻辑地址对应的物理地址是?

a. 0,430 => 219+430=649

b. 1,10 => 2300+10=2310

c. 2,500 => 90+500=590,但是500>100所以这是无效的地址

d. 3,400 => 1327+400=1727

e.4,112 => 112>96,无效地址

8.29 对页表再次进行分页的目的是什么?

由于大多数现代计算机系统支持大型逻辑地址空间(32/64位),因此页面表本身变得过大(空间成本)。 我们知道虚拟地址空间的整个部分经常未使用。 分页页表使得这些空间没有条目,从而大大减少了存储虚拟内存数据结构所需的内存量。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇