三、问答
1.何谓在分区里进行分页的虚拟存储管理技术?
答:所谓在分区里进行分页的虚拟存储管理技术,即是把用户程序按照其逻辑结构,把虚拟存储空间划分成若干个分区,然后在分区里面分页。由于通常都是按照程序的逻辑结构来划分分区,因此这种存储管理技术,不仅具有页式存储管理的特点(各页可以存放在内存中不连续的页里),而且有利于进行存储保护和共享。 2.Linux采用的多级页表技术,有什么优点? 答:按照分页式存储管理,页表必须占据内存的连续存储区。由于Linux提供的虚拟地址空间,最大可以有1M个页面。因此,一个页表最大就可以有一百万个表项。把它存放在一个连续的内存区里,不利于存储空间的充分利用。于是,Linux就将页表也按页来划分,并形成页表的索引。这样,大的页表就不必占用连续的内存空间了,从而提高了内存空间的利用率。 3.如书上的图8-12(a)的位示图里,如果现在第36内存块被释放,那么它是否应该和它前面的第34、35块以及它后面的第37、38、39、40块,合并成为一个大的空闲区?为什么? 答:不应该与它们合并。在伙伴系统里,只有尺寸相同、又相邻接的空闲区才能进行合并。第36内存块是由独个内存块构成的空闲区,第34、35块是由两个块构成的空闲区,第37、38、39、40块是由四个块构成的空闲区。既然它们的尺寸不同,因此不能合并。 4.在Ext2中,若有一个分区大小为8GB,盘块的尺寸是4KB。试问,该文件卷最多有多少磁盘块?最多有多少个块组? 答:由于盘块的尺寸是4KB,共有8*4K=32K个二进制位。这表明,在一个块组里,用一个盘块构成盘块位图时,最多可以管理32K个磁盘块,也就是一个块组里最多可以有32K个磁盘块。现在分区尺寸为8GB,盘块尺寸为4KB,所以整个文件卷有8GB/4KB=2M个盘块;有2M/32K=64个块组。 5.试画出Linux巨型文件的索引结构图。 答:Linux巨型文件的索引结构图如下:
6.模仿书上图8-9,画出Linux的三级页表式地址转换过程图。
答:Linux的三级页表式地址转换过程图如下:
46
7.Linux的每个进程都有若干个VMA,且两个VMA可以不连续。即使两个VMA连续,它们也必须分开管理吗?为什么? 答:即使两个VMA连续,它们也必须分开管理。这是因为两个VMA实施的存储保护可以不同,不可能进行统一的管理。 8.试描述在Linux中,你如何能够根据给出的文件名称,找到该文件具体存放在磁盘的哪些磁盘块上的? 答:首先根据文件名称查文件目录,得到该文件的inode节点编号。再由inode节点编号,在索引节点表里找到该文件的索引节点。最后从索引节点里的i_block[ ]数组,就可以得到该文件具体存放在哪些磁盘块里。
9.模仿书上图8-23所示的字符设备数据结构间的关系,画出块设备管理中blkdevs数组、device_struct结构、block_device_operations结构间的关系示意图。
答:块设备数据结构间的关系示意图如下:
四、计算 1.如果在Linux里,某段小于4MB。那么它虚拟空间的页表索引有多少表项?它有多少个页表?构成页表索引和页表,总共需要开销多少内存空间?
答:对于Linux来说,它的页表索引最大有1024个表项,每个表项对应一个页表。每个页表有
47
1024个表项,一个表项描述了虚拟空间中的一页与内存块(4KB)的对应情况。因此,一个页表可以用来描述4MB大小的空间。由于现在已知段的长度小于4MB,即是虚拟地址空间小于4MB。所以,它的页表索引需要有1个表项,这个表项指向唯一的一个页表。
虽然页表索引只有1个表项,但必须占用一页的存储量。另外,一个页表要占用一页的存储量。所以,小于4MB的段,要开销两个块的存储空间。
2.假设页面的尺寸为4KB,一个页表项用4B。若要求用页表来管理地址结构为36位的虚拟
地址空间,并且每个页表只占用一页。那么,采用多级页表结构时,需要几级才能达到管理的要求?
答:36位的虚拟地址空间尺寸为236=16GB。已知页面的尺寸为4KB,一个页表项用4B,每个页表只占用一页。这表示一个页表有1024个表项,可以管理1024(=210)个页面,即管理4M(=222)大小的虚存空间。根据题意,第1级只能是一个页表,它可以管理K个页面(因为一个页表里有1024个表项)。K个页面的存储量是4MB。因此,用一级页表不能管理16GB的虚拟空间。于是进入第2级;第2级有K个页表,可以管理K*K个页面。K*K个页面的存储量是
4GB。显然用二级页表不能管理16GB的虚拟空间。于是进入第3级;第3级有K*K个页表,可以管理K*K*K个页面。K*K*K个页面的存储量是超过了16GB,达到了242。因此,本题需要使用三级页表才能够管理236的虚拟空间。
3.Linux的空闲区队列表free_area总共可以有11个队列。试问,在第11个队列里排队的每一个空闲区里,包含有多少个连续的内存块?
答:Linux的空闲区队列表free_area里,排在每个队列里的空闲区中所含连续块的数目,是按2的次幂递增的。在第1个队列里,空闲区中所含连续块的数目为20;在第2个队列里,空闲区中所含连续块的数目为21;在第3个队列里,空闲区中所含连续块的数目为22;??。因此,在第11个队列里,空闲区中所含连续块的数目为210。即在这个队列里,每个空闲区中所含连续块的数目为1024块!
4.Linux的Ext2文件系统,其巨型文件最多可以有多少个磁盘块?
答:Ext2文件系统的巨型文件,最多可以有(b/4)*(b/4)*(b/4)+(b/4)*(b/4)+(b/4)+12个磁盘块。
第9章习题解答
一、填空?
1.MS-DOS操作系统由BOOT、IO.SYS、MSDOS.SYS以及 COMMAND.COM 所组成。 2.MS-DOS的一个进程,由程序(包括代码、数据和堆栈)、 程序段前缀 以及环境块三部分组成。
3.MS-DOS向用户提供了两种控制作业运行的方式,一种是 批处理方式 ,一种是命令处理方式。
48
4.MS-DOS存储管理规定,从地址0开始每16个字节为一个“ 节 ”,它是进行存储分配的单位。
5.MS-DOS在每个内存分区的前面都开辟一个16个字节的区域,在它里面存放该分区的尺寸和使用信息。这个区域被称为是一个内存分区所对应的 内存控制块 。
6.MS-DOS有4个存储区域,它们是: 常规内存区 、上位内存区、高端内存区和扩充内存区。
7.“ 簇 ”是MS-DOS进行磁盘存储空间分配的单位,它所含扇区数必须是2的整数次方。 8.当一个目录表里仅包含“.”和“..”时,意味该目录表为 空 。
9.在MS-DOS里,用文件名打开文件,随后就通过 句柄 来访问该文件了。 10.在MS-DOS里,把 字符设备 视为设备文件。
二、选择?
1.下面对DOS的说法中, B 是正确的。
A.内、外部命令都常驻内存 B.内部命令常驻内存,外部命令非常驻内存 C.内、外部命令都非常驻内存 D.内部命令非常驻内存,外部命令常驻内存 2.DOS进程的程序,在内存里 D 存放在一起。
A.总是和程序段前缀以及环境块 B.和谁都不 C.总是和进程的环境块 D.总是和程序段前缀 3.MS-DOS启动时能够自动执行的批处理文件名是: C 。
A.CONFIG.SYS B.MSDOS.SYS C.AUTOEXEC.BAT D.COMMAND.COM 4.下面所列的内存分配算法, D 不是MS-DOS采用的。
A.最佳适应法 B.最先适应法 C.最后适应法 D.最坏适应法 5.在MS-DOS里,从1024K到1088K的存储区域被称为 D 区。 A.上位内存 B.扩展内存 6.MS-DOS的存储管理是对 A 的管理。
C.扩充内存
D.高端内存
A.常规内存 B.常规内存和上位内存 C.常规内存和扩展内存 D.常规内存和扩充内存 7.在下面给出的MS-DOS常用扩展名中, B 不表示一个可执行文件。 A..exe B..obj C..com 8.下列四项中, D 不是MS-DOS文件分配表的功能。
D..bat
49
A.记录文件的链接结构 B.进行磁盘存储空间的管理 C.存放簇之间的链接指针 D.反映文件间的共享情况 9.下面不能作为MS-DOS设备文件的设备是: B 。 A.显示器 B.磁盘 10.MS-DOS的设备文件是指 C 。 A.字符设备和块设备 B.块设备
C.打印机
D.键盘
C.字符设备 D.NUL设备
三、问答?
1.什么是DOS的内部命令,什么是DOS的外部命令?
答:MS-DOS把命令处理模块(COMMAND.COM)中那些功能简单、使用频率较高的操作命令称为“内部命令”。内部命令程序都在COMMAND.COM暂驻内存模块里。只要暂驻内存模块在内存中,系统接收到一条内部命令时,就能够直接调用它并执行。
MS-DOS把命令处理模块(COMMAND.COM)中那些使用频度较小的操作命令称为“外部命令”。它们都是以文件的形式存放在磁盘上。当在内存的暂驻内存模块接收到一个外部命令时,必须先将它从磁盘读入内存,然后才能被执行。
2.试勾画出DOS启动过程中四大部分的相互关系。谁最先运行?谁又把谁装入到内存?最后CPU的控制权落在了谁的手里?
答:MS-DOS由一个引导程序(BOOT)和3个程序模块(IO.SYS和ROM-BIOS、MSDOS.SYS、COMMAND.COM)组成,其间的层次关系,如教材中的图8-1所示。
BOOT是一个极短的程序。系统初启时,它最先投入运行。随后检查系统盘根目录下的头两个文件是否是IO.SYS和MSDOS.SYS。如果为真,则把IO.SYS装入到内存,结束引导任务,转而执行IO.SYS里的系统初始化程序。
IO.SYS及ROM-BIOS是MS-DOS的输入/输出管理模块。其中在系统盘上的IO.SYS,是进行输入/输出的接口模块;固化在ROM里的ROM-BIOS,是一个个具体的设备驱动程序。在引导程序将IO.SYS装入内存、转而执行IO.SYS里的系统初始化程序后,就由它负责调入MSDOS.SYS;负责装入COMMAND.COM模块。所以,MSDOS.SYS以及COMMAND.COM都是由IO.SYS装入到内存的。 COMMAND.COM是MS-DOS操作系统与用户之间的接口。在系统启动后,CPU的控制权最后落在了它的手里,由它接收用户输入的各种DOS命令,解释后加以执行。
3.MS-DOS不支持进程间的并发执行,进程之间只能够串行执行。那么它是怎样保证进程之间顺利切换的呢?
答:在进程的程序段前缀里,有返回时的地址,有调用者的PSP地址(即指向调用进程的进程控制块指针),这是保证进程之间顺利切换的两个重要的信息。对于DOS来说,创建一个新进
50