linux.docx
《linux.docx》由会员分享,可在线阅读,更多相关《linux.docx(12页珍藏版)》请在冰豆网上搜索。
linux
一、选择题
1、Linux虚存映射中如果映射与文件无关,那么这种映射叫(D)。
A.共享的映射B.内存映像C.私有的映射D.匿名映射
2、Linux的信号量中count的值小于0表明(C)。
A.有资源可用B.无资源可用,但也没有进程申请资源
C.有进程申请资源而睡眠D.有进程释放资源
3、在linux中中断处理程序运行于(A)态下运行?
A.内核态B.用户态C.或用户态或内核态D.取决于中断类型
4、Linux操作系统中对于硬连接的描述,正确的是(D)。
A.不同文件系统之间的文件可以创建硬连接B.可以给目录创建硬连接
C.一个文件只能对应一个文件名D.同一文件系统的文件才能创建硬连接
5、LINUX系统的三级文件访问权限不包括(D)。
A.文件所有者B.同组用户C.其他用户D.特殊用户
6、Linux系统调用中用来存放系统调用号的是(B)。
A.PCB.EAXC.IDTRD.EBX
7、下面关于init进程的描述哪个是不正确的(A)。
A.init进程是所有进程的祖先B.init进程是用户态下所有进程的祖先
C.init进程的PID是1D.init进程负责管理系统中的孤儿进程
9、源代码_set_gate(idt_table+n,15,3,addr)表示在中断描述符表中插入一种门,请问这条语句插入的是哪种类型的门(C)。
A.中断门B.陷阱门C.系统门D.以上都不是
10、信号量是一种(B)。
A.自旋锁B.睡眠锁C.A和BD.以上都不对
11、请问下面哪一条命令可以实现修改文件的权限(A)。
A.chmodB.ls–lC.cdD.pwd
12、请问下面哪一条命令可以实现创建一个文件(A)。
A.viB.mountC.cdD.pwd
13、异常分为故障和陷阱两类,它们的共同特点是?
(C)
A.不用中断控制器B.不能被屏蔽C.A和B正确D.A和B不正确
14、将不同文件系统的操作统一起来进行操作的技术叫(A)。
A.VFSB.FATC.ROOTD.MOUNT
15、Linux内核包括处理器管理、存储器管理、设备管理和(A)。
A.文件管理B.中断C.异常D.以上都不对
16、(A)是指主板上的物理内存条所提供的内存空间。
A.物理内存空间B.虚拟地址空间C.线性地址空间D.都不正确
17、下面哪一个硬件是用来把虚拟地址转化为物理地址的硬件(C)。
A.CPUB.IDTRC.MMUD.DMA
18、LINUX操作系统中atomic_tv=ATOMIC_INIT(0)的含义是(A)
A.定义原子类型并给初值为0B.定义原子类型并给初值为空
C.定义信号量,并给初值为0D.定义整型变量并给初值为0
19、中断描述符表中的每一个表项叫做(B)。
A.段描述符B.门描述符C.全局描述符D.局部描述符
20、Linux系统不包括(D)。
A.符合POSIX标准的操作系统内核、shell和外围工具
B.C语言编译器和其他开发工具及函数库
C.XWindow窗口系统D.POSIX
21、进程运行结束,但未消亡的状态是(D)。
A.TASK_INTERRUPTIBLEB.TASK_UNINTERRUPTIBLE
C.TASK_STOPPEDD.TASK_ZOMBIE
22、vm_area_struct结构用来描述?
(A)。
A.虚存区B.交换区C.临界区D.进程整个用户空间
23、下面关于POSIX标准的描述正确的是(A)。
A.POSIX是可移植操作系统编程接口B.POSIX是GNU
C.POSIX是开放源代码的操作系统D.POSIX是linux
24、Linux内核由五个主要的子系统组成。
下面哪一个子系统不包含在这五个子系统之中(D)。
A.CPU管理B.内存管理C.文件管理D.中断和异常
25、用来实现虚拟地址转化为物理地址的硬件是(C)。
A.CPUB.IDTRC.MMUD.DMA
26、下面哪个地址是二维的(C)
A.物理地址B.线性地址C.虚拟地址D.以上都不正确
27、中断描述符表中的每一个表项叫(B)。
A.段描述符B.门描述符C.全局描述符D.局部描述符
28、IA32体系中下面哪个是段选择符寄存器(A)。
A.CSB.AXC.BXD.CX
29、下面哪个状态下,进程所占用的资源全部释放,只有task_struct结构体没有释放(D)。
A.TASK_INTERRUPTIBLEB.TASK_UNINTERRUPTIBLE
C.TASK_STOPPEDD.TASK_ZOMBIE
30、进程用户空间管理中mm_struct结构用来描述?
(D)。
A.虚存区B.交换区C.临界区D.进程整个用户空间
二、填空题
1、每个进程使用一个files_struct来记录文件描述符的使用情况,该结构称为(用户打开文件表)表。
2、程序出错、虚地址有效和要访问的虚地址被写保护可能引起(异常)。
3、getpid()实际上调用的服务例程(内核函数)是(sys-getpid())。
4、Linux中fork()后,当父进程或子进程试图修改某些内容时,内核才在修改之前将被修改的部分进行拷贝的技术叫做(写时复制)。
5、Linux必须为代码段和数据段分别创建一个(基地址)为0,段界限为4GB的段描述符。
6、Linux中某个时刻(进程的内容)被称为进程映像。
7、Linux的(临界区)是访问和操作共享数据,必须原子地执行的代码段。
8、kswapd线程第二部分每次都执行,目的是把已经处于(不活跃状态)的脏页面写入交换区。
9、(进程)代表程序的执行过程,是一个动态实体,随程序中指令的执行而不断地变化。
10、虚拟内存的实现机制包括地址映射机制、请页机制、内存分配和回收机制、交换机制、(缓存和刷新机制)。
11、mount–tiso9660/dev/sda/mnt/usb是将/dev/sda文件系统安装到(/mnt/usb)安装点上。
12、Linux中的虚拟映射包括(匿名映射)、共享映射、私有映射。
13、init内核线程由kflushd、kupdate、kpiod和(kswapd)四个线程构成。
14、创建设备文件的命令是()。
15、超级块是对一个(文件系统)的描述,索引节点是对一个文件处理信息的描述。
16、Linux操作系统中的系统调用的中断向量是(软中断)。
17、Linux中的常规文件分为文本文件和(二进制文件)。
18、fork()系统调用后若运行父进程,则这个系统调用的返回值是(创建的子进程的进程ID)。
19、Linux的伙伴算法把所有的空闲页面分为(10)个块链表,每个链表中的一个块含有2的幂次个页面。
20、Linux中将(就绪态)和运行态合并为一种状态叫做可运行态。
21、Linux中(task_struct)是对进程进行全面描述的数据结构。
22、LINUX将设备纳入(文件系统)的范畴来管理。
23、页表项包括物理页面基地址和(页的属性)。
24、(wait)系统调用不仅仅是阻塞自己,还准备对僵死的子进程进行善后处理。
25、(页表)是把线性地址映射到物理地址的一种数据结构。
26、中断描述符表中包括中断门、陷阱门和(系统门)。
27、Linux存放系统调用参数所用的6个寄存器为EAX、EBX、ECX、EDX以及(ESI、EDI)。
28、中断线共享的数据结构中,handler指向一个具体IO设备的中断(服务例程)。
29、LINUX中,当前进程存放在全局变量(current宏)中。
30、Linux文件包括常规文件、目录文件、设备文件、(管道文件)和连接文件。
三、判断对错
(√)1、read()系统调用使用的封装例程是syscall3宏。
(√)2、Linux中为每个中断线设置了一个中断请求队列。
(√)3、LINUX操作系统的文件系统的根目录只有一个。
(×)4、ret_from_intr()是从中断中返回的函数。
(×)5、API是内核的出口。
(√)6、LINUX操作系统的文件系统的根目录只有一个。
(√)7、Linux线程被看做是一个使用某些共享资源的进程。
(√)8、所有I/O设备发出的中断请求(IRQ)都是可屏蔽的。
(√)9、加锁的顺序应该按相同的顺序给资源加锁,这样可以避免死锁。
(×)10、Linux把PCB与用户栈放在一起,共占用1KB内存空间。
(√)11、在Linux中,将换出物理页面尽量放在相邻的页插槽中。
(×)12、为了保证进程树的完整性,Linux操作系统中的0号进程负责收养孤儿进程。
(√)13、Linux的伙伴算法中把大小相同、物理地址连续的两个页块被称为“伙伴”。
(√)14、处于僵死态的进程没有机会再被调度程序选中。
(√)15、进程一旦调用了wait系统调用就阻塞了自己。
(√)16、交换区中的页插槽的大小与物理页面的大小一样。
(×)17、Linux中进程的用户空间是0xC0000000~0xFFFFFFFF。
(×)18、Linux中浅睡态和深睡态都可被信号唤醒。
(×)19、Linux文件系统使用具有唯一编号的文件描述符来记录文件信息。
(√)20、Linux不允许为目录创建硬链接。
四、简答题
1、说明门描述符表的组成及各字段的含义
答:
门描述符表的组成有DPL、偏移量、P、段选择符、D、XXX。
其中DPL:
段描述符的特权级。
偏移量:
入口函数地址的偏移量。
P:
表示段是否在内存中的标志。
D:
标志位,1表示32位,0表示16位。
XXX:
3位门类型码。
2、说明Linux系统中的虚拟文件系统(VFS)使用的几个对象。
答:
超级块对象:
存放系统中已安装的文件系统的有关信息。
索引节点对象:
存放关于具体文件的一般信息。
目录项对象:
存放目录项与对应文件进行链接的信息。
文件对象:
存放打开的文件与进程之间进行交互的有关信息。
3、init内核线程和init进程是一回事吗?
它们有什么本质的区别?
答:
两者不是一回事。
区别如下:
内核线程执行的是内核中的函数,而普通进程只有通过系统调用才执行内核中的函数。
内核线程只运行在内核态,而普通进程既可以运行在用户态,也可以运行在内核态。
因为内核线程只运行在内核态,因此,它只能使用大于PAGE_OFFSET的地址空间。
另一方面,不管在用户态还是内核态,普通进程可以使用4GB的地址空间。
4、Linux内核的进程的状态转换。
答:
P43图3.4
5、什么是虚存映射?
有哪几种类型?
答:
随着进程的运行,被引用的程序部分会由操作系统装入到物理内存,这种将映像链接到进程用户空间的方法称为“虚存映射”。
分为共享映射、私有映射、匿名映射。
6、在保护模式下,MMU如何把一个虚拟地址转换成一个物理地址?
答:
P22图2.3
7、什么是软链接?
什么是硬链接?
二者有什么区别?
答:
软链接(符号链接)是包含了另一个文件的任意一个路径名的特殊文件。
硬链接是让一个文件对应一个或多个文件名。
由于硬链接有2个限制不允许给目录创建硬链接、只有在同一文件系统中的文件之间才能创建硬链接。
然而,软连接能克服这2个限制。
8、画图说明Linux内核栈和PCB的存放情况,并说明如何确定当前进程的PCB的起始地址。
答:
P44图3.6
因为PCB的起始地址总是开始于页大小的边界,因此只要知道堆栈指针的值,就可以很容易的求出PCB的起始地址。
9、在IA32体系结构中Linux操作系统是怎样实现分段机制的?
答:
IA32规定了分段机制是不可禁止的,因此不可能绕过它直接给出线性地址空间的地址。
Linux的设计人员让段的基地址为0,而段的界限为4GB,这时任意给出一个偏移量,则等式为“0+偏移量=线性地址”,即“偏移量=线性地址”。
另外,由于分段机制规定“偏移量<4GB”,所以偏移量的范围为0H~FFFFFFFFH,这恰好是线性地址空间范围,也就是说虚拟地址直接映射到线性地址。
Linux在没有回避分段机制的情况下巧妙的绕过了它。
11、写出可以避免死锁发生的一些规则。
答:
(1)加锁的顺序是关键。
使用嵌套的锁时必须保证以相同的顺序获取锁,这样可以防止致命拥抱类型的死锁。
最好能记录下锁的顺序,以便其他人也能照此顺序使用。
(2)防止发生饥饿。
试着自问,这个任务是否一定会结束?
如果事件A不发生,任务B一直等待下去吗?
(3)不要请求同一个锁。
(4)越复杂的加锁方案越可能造成死锁,因此设计应力求简单。
12、画图说明Linux内核的虚拟地址空间到物理地址空间的映射。
答:
P69图4.2
13、目录项结构和索引节点有何区别?
为什么不把二者合二为一?
答:
这是因为二者所描述的目标不同,目录项结构代表的是逻辑意义
上的文件,描述文件的逻辑属性,因此,目录项对象在磁盘上并没有对应的映像;而索引节点结构代表的是物理意义上的文件,记录其物理属性,对于一个具体的文件系统(如Ext2),Ext2_inode结构在磁盘上就有对应的映像。
所以说,一个索引节点对象可能对应多个目录项对象。
14、Linux系统中为什么采用分区方法管理进程的用户空间?
答:
这是因为每个虚存区可能来源不同,有的可能来自可执行映像,有的可能来自共享库,而有的可能是动态分配的内存区。
对不同的区间可能具有不同的访问权限,也可能有不同的操作。
因此Linux把进程的用户空间分割管理,并利用了虚存区处理函数(vm_ops)来抽象对不同来源的虚存区的处理方法。
15、进程调度主要时机
答:
Linux的进程调度时机主要有:
1.进程状态转换的时刻,如进程终止、进程睡眠。
2.当前进程的时间片用完时。
3.设备驱动程序运行时。
4.从内核态返回到用户态时。
16、分析schedule调度函数,回答问题。
(1)说明next取值的两种不同情况。
1.调用schedule时正在执行的程序为prev,next为下一个给予CPU的进程。
2.next与prev相同重新调用CPU已获得的进程。
(2)if(prev->policy&SCHED_YIELD)条件为真说明什么?
如何处理?
说明该进程愿意礼让(YIELD),进程主动让出处理器,并将自己等候调度队列队尾。
(3)c=-1000说明什么?
进程的权值为-1000
17、system_call()流程,系统调用进入内核时内核态堆栈的内容
答:
system_call:
…
sys_xyz()
…
ret_from_sys_call:
…
iret
18、举例说明封装例程的含义及思想,并说明系统调用EAX寄存器的作用?
答:
比如说系统调用getpid()就是服务例程sys_getpid()的封装例程。
通过这种封装,在用户态下调用变得简单,不用关心系统调用号,也不需提供复杂参数就让内核为自己服务。
寄存器EAX中存放系统调用的功能号,当系统调用完成后返回值可以在EAX中获得。
19、阅读下列程序
#include
main()
{
intp1,p2=0;
if(p1=fork())
{
putchar('b');
}
else
{
if(p2==fork())
putchar('c');
elseputchar('a');
}
}
#include
main()
{
intp1=0,p2;
if(p1==fork())
putchar('b');
else
{
if(p2=fork()){
wait(NULL);
putchar('c');}
elseputchar('a');
}
}