39、解释内部碎片和外部碎片的区别。
外部碎片
外部碎片是指当有足够的总内存空间来满足请求,但可用空间不连续时出现的情况。在内存分配中,随着进程的加载和移除,空闲内存空间被分割成小块,存储被分割成大量小空洞,即使总内存足够,也可能因不连续而无法满足某些请求。例如,在首次适应和最佳适应内存分配策略中就会出现这种情况。
内部碎片
内部碎片是指分配给进程的内存可能比请求的内存稍大,两者之间的差异就是内部碎片,即分区内部未使用的内存。例如,在多分区分配方案中,若一个空洞为18,464字节,而进程请求18,462字节,分配后剩下2字节的空洞,跟踪该空洞的开销可能比空洞本身大。通常的解决办法是将物理内存分成固定大小的块,并按块大小分配内存。
40、考虑一个逻辑地址空间,有32页,每页1024字,映射到有16个帧的物理内存上。a. 逻辑地址需要多少位?b. 物理地址需要多少位?
a. 逻辑地址需要15位。因为页的数量是32 = 2^5,页内偏移是1024 = 2^10,所以逻辑地址位数为5 + 10 = 15位。
b. 物理地址需要14位。因为帧的数量是16 = 2^4,页内偏移是1024 = 2^10,所以物理地址位数为4 + 10 = 14位。
41、考虑一个具有32位逻辑地址和4KB页面大小的计算机系统。该系统支持高达512MB的物理内存。以下各项分别有多少个条目?a. 传统的单级页表 b. 反向页表
-
单级页表条目数 :
逻辑地址32位,页面大小4KB($2^{12}$ 字节),则页号位数为 $32 - 12 = 20$ 位,条目数为 $2^{20}$ 个。 -
反向页表条目数 :
物理内存512MB($2^{29}$ 字节),页面大小4KB($2^{12}$ 字节),则帧数为 $2^{29} / 2^{12} = 2^{17}$ 个,条目数为 $2^{17}$ 个。
42、考虑一个页表存于内存中的分页系统。a. 如果一次内存访问需要200纳秒,那么一次分页内存访问需要多长时间?b. 如果我们添加了TLB,且所有页表引用中有75%可以在TLB中找到,那么有效内存访问时间是多少?(假设如果页表项在TLB中,查找该页表项的时间为零。)
a. 一次分页内存访问需要400纳秒。因为需要两次内存访问,一次访问页表,一次访问数据,每次200纳秒,共400纳秒。
b. 有效内存访问时间为250纳秒。计算方式为:
$$
0.75 \times 200 + 0.25 \times 400 = 250 \text{纳秒}
$$
43、考虑一个段表,段表中包含段号、基地址和长度信息,具体段表内容如下:段号 基地址 长度 0 219 600 1 2300 14 2 90 100 3 1327 580 4 1952 96。对于以下逻辑地址,求其对应的物理地址:a. 0,430 b. 1,10 c. 2,500 d. 3,400 e. 4,112
- a. 219 + 430 = 649
- b. 2300 + 10 = 2310
- c. 偏移量500超出段2的长度100,产生陷阱
- d. 1327 + 400 = 1727
- e. 偏移量112超出段4的长度96,产生陷阱
44、对页表进行分页的目的是什么?
在具有大逻辑地址空间(如$2^{32}$到$2^{64}$)的系统中,页表本身会变得过大。例如,在32位逻辑地址空间且页大小为4KB的系统中,页表可能包含多达100万个条目,每个进程仅页表就可能需要多达4MB的物理地址空间。 分页页表 是为了避免在主存中连续分配页表,将页表分成更小的部分,从而解决页表过大带来的分配和管理问题。
45、假设一个系统有32位虚拟地址,页面大小为4KB。编写一个C程序,该程序通过命令行接收一个虚拟地址(十进制),并输出该地址对应的页号和偏移量。例如,程序运行如下:./a.out 19986,程序将输出:The address 19986 contains: page number = 4 offset = 3602。编写此程序需要使用适当的数据类型来存储32位数据,建议使用无符号数据类型。
以下是实现该功能的C程序:
#include <stdio.h>
#include <stdlib.h>
#define PAGE_SIZE 4096
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s <virtual_address>\n", argv[0]);
return 1;
}
unsigned int virtual_address = atoi(argv[1]);
unsigned int page_number = virtual_address / PAGE_SIZE;
unsigned int offset = virtual_address % PAGE_SIZE;
printf("The address %u contains: page number = %u offset = %u\n", virtual_address, page_number, offset);
return 0;
}
该程序首先检查命令行参数是否正确,然后将输入的虚拟地址转换为无符号整数。接着,通过除以页面大小计算页号,通过取模运算计算偏移量。最后,输出页号和偏移量。
46、解释虚拟文件系统(VFS)层如何使操作系统轻松支持多种类型的文件系统。
VFS层的作用
VFS层通过以下两种方式使操作系统轻松支持多种类型的文件系统:
-
定义清晰的VFS接口
将通用的文件系统操作与其实现分离。同一台机器上可以并存多个VFS接口的实现,从而允许透明访问本地挂载的不同类型的文件系统。 -
提供唯一表示文件的机制
VFS基于一种名为vnode的文件表示结构,该结构包含一个用于网络范围内唯一文件的

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



