单选题
(2009联考)分区分配内存管理方式的主要保护措施是( )
- 界地址保护
- 程序代码保护
- 数据保护
- 栈保护
为了防止程序的访问地址越界,所以需要进行界地址保护,由硬件负责检查程序访问地址是否合法。
以ucore为例,在ucore lab1中的,x86保护模式中的分段机制在某种程度上可以看成是一种分区方式的物理内存分配。bootloader在启动后,就要完成分段(分区)工作,即建立两个段,内核代码段和内核数据段,一个段就是一个分区。在表述段属性的段描述符(mmu.h中的segdesc数据结构)中,有两个重要的域(字段,field),起始地址(sd_base_15_0,sd_base_23_16,sd_base_31_24)、段限长(sd_lim_15_0,sd_lim_19_16)。这个段大小就是分区的界地址。80386 CPU在每一次内存寻址过程中,都会比较EIP(即段内偏移)是否大于段限长,如果大于段限长,这会产生一个内存访问错误异常。
(2010联考)某基于动态分区存储管理的计算机,其主存容量为55MB(初始为空),采用最佳适配(Best Fit)算法,分配和释放的顺序为:分配15MB,分配30MB,释放15MB,分配8MB,分配6MB,则此时主存中最大空闲分区的大小是( )
- 7MB
- 9MB
- 10MB
- 15MB
空闲分区链变化:55(初始);40(分配15MB后);10(分配30MB后);10->15(释放15MB后);2->15(分配8MB后);2->9(分配6MB后)。
以ucore为例,能否在ucore中做个试验完成上述算法?
(2009联考)一个分段存储系统中,地址长度为32位,其中段号占8位,则最大段长为( )
- 2^8字节
- 2^16字节
- 2^24字节
- 2^32字节
在段访问机制中,如果采用的是单地址方案,则段号的位数+段内偏移的位数=地址长度,所以段内偏移占了32 - 8 = 24 比特。
以ucore lab1为例,在段访问机制上,80386采用了不同,且更加灵活的段寄存器+地址寄存器方案,(可看OS原理部分的"物理内存管理:第2部分"ppt的第10页),即CS中的值(称为选择子,selector)是段号,作为索引,指向了一个段描述符表中的一个段描述符。 段描述符中的一个字段是段基址(32位),这个32位段基址+段内偏移(即32位的EIP)形成了最终的线性地址(如果使能页机制,则也就是最终的物理地址了)。 所以,如果是这道题说明了采用80386方式,结果就不一样了。
(2010联考)某计算机采用二级页表的分页存储管理方式,按字节编址,页大小为2^10字节,页表项大小为2字节,逻辑地址结构为“|页目录号|页表|页内偏移量|”逻辑地址空间大小为2^16页,则表示整个逻辑地址空间的页目录表中包含表项的个数至少为( )
- 64
- 128
- 256
- 512
页大小为2^10B,页表项大小为2B,一页可以存放2^9个页表项,逻辑地址空间大小为2^16页,需要2^16个页表项,需要2^16/2^9 = 2^7 = 128个页面保存页表项。所以页目录表中包含的表项至少为128。
以ucore lab2为例,80386保护模式在使能页机制后,采用的是二级页表,32位地址空间,页大小为2^12字节,页表项为4字节,逻辑地址结构为“|页目录号|页表|页内偏移量|”逻辑地址空间大小为2^20页,则也目录表包含的表项个数为1024. 你觉得对吗?
(武汉理工大学)段式存储管理系统中,一个程序如何分段是在( )决定的。
- 分配主存时