在采用分页存储管理系统中,地址结构长度为18位,其中11至17位表示页号,0 至10位表示页内位移量。若有一作业的各页依次放入2,3,7号物理块中,试问: (1) 主存容量最大可为多少K?分为多少块?每块有多大? (2) 逻辑地址1500应在几号页内?对应的物理地址是多少?
时间: 2024-01-16 21:05:28 浏览: 145
(1) 首先要确定每个物理块的大小。因为地址结构长度为18位,其中低10位表示页内偏移量,所以一个物理块大小为 $2^{10}=1024$ 字节。然后可以计算出主存最多能容纳多少个物理块:
$$\text{主存容量} = 2^{18} \text{位} = 2^{15} \text{字节} = 2^{5} \times 2^{10} \text{字节} = 32 \text{KB}$$
因此,主存最多可以容纳 $32\text{KB}/1024\text{B}=32$ 个物理块。每个物理块包含 $1024$ 字节数据。
(2) 逻辑地址1500的二进制表示为 $0000010\ 01011100$,其中 11 至 17 位表示页号,即第 $18-7=11$ 至第 $18-1=17$ 位,为 $0000111=7$。因此逻辑地址1500应在第7页内。页内偏移量为低10位,即 $01011100=92$,所以逻辑地址1500对应的物理地址为第7个物理块的偏移量为92的位置:
$$\text{物理地址} = 7 \times 1024\text{B} + 92\text{B} = 7164\text{B}$$
注意,在计算物理地址时,页号从0开始计数,因此第7个物理块的页号为6。
相关问题
在请求分页存储管理系统中,逻辑地址长度为16位,每页的大小为2kB,部分页表如下:页号 物理地址 0 4 1 10 2 6 3 2 则逻辑地址位0EC5H所对应的物理地址为( )H。
首先,将16位的逻辑地址拆分为页号和页内偏移量。其中,2kB 的页大小可以存储 $2^{11}$ 个字节,也就是说偏移量需要 11 位二进制数来表示。因此,可以将逻辑地址的前 5 位作为页号,后 11 位作为页内偏移量。
将逻辑地址 0xEC5H 转换为二进制数为:1110 1100 0101。其中,前 5 位为页号,后 11 位为页内偏移量。页号为 11101B,转换为十进制为 29,即在页表中查找页号为 29 的物理地址。根据部分页表可以得知,页号为 29 的物理地址为 4,因此该逻辑地址对应的物理地址为 $4 \times 2^{11} + 0xEC5 \text{(十六进制)} = 0x9015$。因此,答案为 9015H。
)请求分页存储管理系统中,逻辑地址长度为16位,每页的大小为2KB,部分页表如下: 页号 块号 0 4 1 10 2 6 3 2 则逻辑地址位0EC5H所对应的物理地址为?编程实现逻辑地址转换Linux实现
在请求分页存储管理系统中,逻辑地址转换为物理地址的步骤如下:
1. **确定页号和页内偏移量**:
- 逻辑地址长度为16位,每页大小为2KB(即2048字节)。
- 页号 = 逻辑地址 / 每页大小
- 页内偏移量 = 逻辑地址 % 每页大小
2. **查找页表**:
- 根据页号查找页表,找到对应的块号。
3. **计算物理地址**:
- 物理地址 = 块号 * 每页大小 + 页内偏移量
根据题目给出的部分页表和逻辑地址0EC5H,我们进行如下计算:
1. **计算页号和页内偏移量**:
- 逻辑地址0EC5H转换为十进制为3781。
- 页号 = 3781 / 2048 = 1(取整)
- 页内偏移量 = 3781 % 2048 = 1733
2. **查找页表**:
- 根据页号1,查找页表找到对应的块号为10。
3. **计算物理地址**:
- 物理地址 = 10 * 2048 + 1733 = 20560 + 1733 = 22293
- 22293转换为十六进制为5725H
因此,逻辑地址0EC5H所对应的物理地址为5725H。
接下来,我们使用C语言在Linux环境下实现逻辑地址转换:
```c
#include <stdio.h>
int main() {
unsigned short logical_address = 0x0EC5; // 十六进制逻辑地址
unsigned short page_size = 2048; // 每页大小为2KB
unsigned short page_table[] = {4, 10, 6, 2}; // 页表
int page_number, offset, physical_address;
// 计算页号和页内偏移量
page_number = logical_address / page_size;
offset = logical_address % page_size;
// 查找块号
if (page_number >= 0 && page_number < 4) {
unsigned short block_number = page_table[page_number];
// 计算物理地址
physical_address = block_number * page_size + offset;
printf("逻辑地址0EC5H对应的物理地址为: %XH\n", physical_address);
} else {
printf("页号超出范围\n");
}
return 0;
}
```
运行上述代码,输出结果为:
```
逻辑地址0EC5H对应的物理地址为: 5725H
```
阅读全文