计算机操作系统(第四版)汤小丹课后答案完整版 下载本文

答: UNIX 内核结构分四层:最底层是硬件,次底层是 口

OS 核心,第二层是 OS 与用户接

shell 及 编 译 程 序 等 , 最 高 层 是 应 用 程 序 。3. UNIX 系统中的PCB 含哪几部分?用图说明各部分之间的关系。答: UNIX

系统中的 PCB 含进程表项、 U 区、系统区表、进程区表。

4.进程映像含哪几部分?其中系统级上、下文动态部分的作用是什么? 答:进程映像含用户上下文、寄存器上下文、系统级上下文。

系统级上下文动态部分的作用是当因中断或系统调用进入核心状态时,核心把一个寄存 器上下文压入核心栈,退出系统调用时,

核心又弹出寄存器上下文,在上下文切换时,

核心

将压入老进程的上下文,弹出新进程的上下文。

5.在 UNIX 系统中用于进程控制的主要系统调用有哪些?它们各自的主要功能是什么? 答:用于进程控制的主要系统调用有: (1) ) fork 系统调用:用于创建新进程 (2) ) exit 系统调用:实现进程自我终止 (3) ) exec 系统调用:改变进程原有代码

(4) ) wait 系统调用:将调用进程挂起并等待子进程终止 6.为创建一个新进程,须做哪些工作?

答:为新进程分配一个进程表项和进程标志符; 检查同时运行的进程数目; 拷贝进程表项中的数据;子进程继承父进程的所有文件;为子进程创建进程上下文;子进程执行。 7.为何要采取进程自我终止方式?如何实现

exit ?

Unix 内核用 exit 实现

答:为了及时回收进程占用的资源,在进程任务完成后应尽快撤销。

进程的自我终止。 父进程在创建子进程时, 应在子进程末尾安排 exit 使子进程能自我终止。实现 exit 的具体操作是:关闭软中断、回收资源、写记账信息和置进程为僵死状态。 8.在 UNIX 系统中采用了何种调度算法?如何确定进程的优先数? 答: UNIX 系统采用动态优先数轮转的进程调度算法。优先数确定公式:优先数 =(最近使用 CPU 的时间 /2 ) +基本用户优先数 9.在进入 sleep 过程后,内核应做哪些处理?

答:进入 sleep 过程后,核心首先保存进入睡眠时的处理机运行级,

提高处理机的运行优先

将该进程放入睡

级屏蔽所有中断, 将该进程置为睡眠状态, 将睡眠地址保存在进程表项中, 眠队列。如果进程的睡眠不可中断,

在进程上下文切换后,进程便安稳睡眠。当进程被唤醒

并被调度执行,将恢复处理机的运行级为进入睡眠时的值,此时允许中断处理机。 10 .试说明信号与中断两种机制间的异同处。

答:不同点 :中断有优先级,而信号没有,所有信号皆平等;信号处理程序在用户态运行,而中断处理程序是在核心态运行;还有中断响应及时,而信号响应通常都是延时的。

相同点:都采用异步通信方式;当检测出信号或中断请求时都暂停正在执行的程序而转去执行相应的处理程序;都在处理完毕返回到原来断点;对信号或中断都可进行屏蔽。 11 .扼要说明信号机制中信号的发送和对信号的处理功能。 答:信号发送是指由发送进程把信号送到目标进程的 对信号的处理功能:首先利用系统调用

proc 结构中信号域的某一位上。

signal (sig , func )预置对信号的处理方式,

func 为非 0 非 1 时, func

处理完毕再

func=1 时屏蔽该类信号; func=0 时,进程收到信号后终止自己;

值作为信号处理程序的指针, 系统从核心态转为用户态并执行相应的处理程序, 返回用户程序的断点处。

12 .什么是管道?无名管道和有名管道的主要差别是什么? 答:管道是指能连接写进程和读进程,

并允许它们以生产者消费者方式进行通信的一个共享

文件或 pipe 文件。无名管道是个临时文件,是利用系统调用

pipe ()建立起来的无路径名

文件,只有调用 pipe 的进程及其子孙进程才能识别此文件描述符而利用该文件(管道)进 行通信;有名管道是利用

mknod 系统调用建立的、可以在文件系统中长期存在的有路径名

文件,其它进程可以知道其存在,并利用该路径名访问的文件。 13 .在读、写管道时,应遵循哪些规则?答:( 1)对 pipe 文件大小的限制 (2 )进程互斥

(3 )进程写管道时在管道空间上满足生产者操作规则 (4 )进程读管道时在管道空间上满足消费者操作规则 14 .在消息机制中有哪些系统调用?说明它们的用途。 答:在消息机制中的系统调用是

msgctl( ) 、msgsnd( ) 、msgrcv( ) 。

msgctl( ) 系统调用于指定的消息队列进行操纵。 msgsnd( ) 系统调用来发送消息。

msgrcv( ) 系统调用从指定消息队列中读取一个消息。 15 .在共享存储机制中有哪些系统调用?扼要说明它们的用途 答:在共享存储机制中的系统调用有

shmget() 、shmctl() 、shmat() 。

shmget( ) 用于建立一块共享存储区,提供该区名字 key 和共享存储区长度 size 等参数。

shmctl( ) 系统调用于查询共享存储区的状态信息。

shmat( ) 系统调用于将该共享存储区附接到用户给定的某个进程虚地址 shmaddr 上,

并指定该存储区的访问属性是只读还是可读可写。 16 .核心在执行 shmget 系统调用时需完成哪些工作?

答:(1) 检查共享存储区表, 若找到 key 表项, 表明该区已建立, 返回共享区描述符 shmid ;(2) 若未找到指定 key 表项,而 flag 标志为 IPC_CREAT 且参数 size 值在系统限制值内,则分配一系统空闲区作为共享区的页表区,

分配相应的内存块, 将这些块号填入页表中;