Linux第5章课后习题答案
Linux思考题5 1. fork ()和clone ()二者之间的区别是什么? 答:fork创建一个进程时,子进程只是完全复制父进程的资源,复制出来的 子进程有自己的task_struct结构和pid,但却复制父进程其它所有的资源。通 过fork创建子进程,需要将上面描述的每种资源都复制一个副本。fork。调用 执行一次返回两个值,对于父进程,fork函数返回子程序的进程号,而对于 子程序,fork函数则返回零,这就是一个函数返回两次的本质。在fork之后, 子进程和父进程都会继续执行fork调用之后的指令。 系统调用fork()和vfork()是无参数的,而clone()则带有参数。fork。是全 部复制,vfork()是共享内存,而clone()是则可以将父进程资源有选择地复制 给子进程,而没有复制的数据结构则通过指针的复制让子进程共享,具体要 复制哪些资源给子进程,由参数列表中的clone_flags来决定。另外,clone() 返回的是子进程的pid。 2. 什么是进程?什么是线程? Linux系统中的进程有那些状态?如何获取系统 中各进程的状态? 答:进程是指在系统中正在运行的一个应用程序;线程是系统分配处理器时 间资源的基本单元,或者说进程之内独立执行的一个单元。对于操作系统而 言,其调度单元是线程。一个进程至少包括一个线程,通常将该线程称为主 线程。一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所 谓基于多线程的多任务。 Linux系统中的进程状态有:TASK_RUNNING(运行状态), TASK_INTERRUPTIBLE(可中断睡眠状态),TASKJJNINTERRUPTIBLE(不可 中断的睡眠状态),TASK_STOPPED(暂停状态), TASK_NONINTERACTIVE(不可交互睡眠状态),TASK_DEAD(死亡状态), EXIT_ZOMBIE(僵死进程),EXIT_DEAD(僵死撤销状态) ps查看静态的进程信息 可以使用man来查看ps的使用参数以下是几个常使用到得, a显示当前终端的所有进程信息 u使用以用户为主的格式输出进程信息 X显示当前用户在所有终端下的进程信息 -e显示系统内的所有进程 #ps只显示当前用户打开的进程 ]# ps aux显示系统中所有进程信息 3. Linux系统中进程有哪两种模式?各有何特点? 答:用户进程和系统进程, 用户进程就是用户自己打开的应用程序,可有可无。 系统进程即是内核进程,是维持操作系统正常工作自动生成的,关闭系统进 程会产生不可预知的结果。 4. Linux系统中进程控制块的作用是什么?它进程有何关系? 答:进程控制块(PCB)的作用:进程控制块是进程组成中最关键的部分,它保存 有进程的重要信息。1)每个进程有唯一的PCB.O 2)操作系统根据PCB. 对进程实施控制和管理。3)进程的动态、并发等特征是利用PCB.表现出 来的。4) PCB是进程存在的唯一标志。 5. Linux系统如何执行进程调度? 答:首先查找所有在就绪队列中的进程,从中选出优先级最高且在内存的一个 进程,如果队列中有实时进程,那么实时进程将优先运行。如果最需要运行的不 是当前进程,则挂起当前进程,并保护它的现场,然后为选中的进程恢复运 行现场。 5.8 Linux系统一般采用哪种文件系统?其构造形式如何? 答:采用ext2文件系统。(现在几乎是默认用ext3 了)ext2文件系统中的文件信 息都保存在数据块中。在同一个ext2文件系统中,所有数据块的大小一样。 ext2文件系统将逻辑分区划分成块组,每个块组重复保存一些有关整个文件系统 的关键信息,以及实际的文件和目录的数据块。 系统引导块总是介质上的第一数据块,只有根文件系统才放有引导程序。 5.9什么是块组?什么是超级块?超级块的功能是什么? 答:linux用的是虚拟文件系统,块组是相当于windows系统的硬盘分区,比如c 盘d盘。超级块位于块组的最前面,描述文件系统整体信息的数据结构,主要描 述文件系统的目录和文件的静态分布情况,以及描述文件系统的各种组成结构的 尺寸、数量等。 5.10什么是索引节点?索引节点主要有哪些内容?它与文件有何关系? 答:索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、 所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每 个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分 配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。 2.索引节点与文件的关系 Linux为每个文件分配一个称为索引节点的号码inode,可以将inode简单理解成 一个指针,它永远指向本文件的具体存储位置。系统是通过索引节点(而不是文 件名)来定位每一个文件。文件系统处理文件所需要的所有信息都放在称为索引 节点的数据结构中。文件名可以随时更改,但是索引节点对文件是唯一的,并且 随文件的存在而存在。 一个文件系统允许的inode节点数是有限的,如果文件数量太多,即使每个文件 都是0字节的空文件,系统最终也会因为节点空间耗尽而不能再创建文件. 5.11为什么要设立虚拟文件系统?它与实际文件系统的关系是怎样的? 答:Linux系统支持多种文件系统,必须使用一种统一的接口,而VFS可以实现;VFS 是建立在具体文件系统之上的,它为用户程序提供一个统一的、抽象的、虚拟的文件系 统界面。 5.13 Linux系统采用哪两种内存管理技术?各自的基本实现思想是什么? 答:Linux系统采用交换和请求分页存储管理两种内存管理技术;1)请求分页 的基本思想是,当执行一个程序时,才把它换入内存,但并不把全部程序都调入 内存,而是用到哪一页就调入哪一页;2)内存交换基本思想,当系统中出现内 存不足时,Linux内存管理子系统就需要释放一些内存页,从而增加系统中空闲 内存页的数量。 5.17 Linux信号机制是如何实现进程通信? 答:Linux信号机制基本上是从Unix系统中继承过来的。早期Unix系统中的信号 机制比较简单和原始,后来在实践中暴露出一些问题,因此,把那些建立在早 期机制上的信号叫做”不可靠信号“,信号值小于SIGRTMIN(Red hat 7.2中, SIGRTMIN=32, SIGRTMAX=63)的信号都是不可靠信号。这就是”不可靠信号“的来 源。它的主要问题是: •进程每次处理信号后,就将对信号的响应设置为默认动作。在某些情况下,将 导致对信号的错误处理;因此,用户如果不希望这样的操作,那么就要在信号处 理函数结尾再一次调用signal(),重新安装该信号。 •信号可能丢失,后面将对此详细阐述。 因此,早期unix下的不可靠信号主要指的是进程可能对信号做出错误的反应以 及信号可能丢失。 Linux支持不可靠信号,但是对不可靠信号机制做了改进:在调用完信号处理函 数后,不必重新调用该信号的安装函数(信号安装函数是在可靠机制上的实现)。 因此,Linux下的不可靠信号问题主要指的是信号可能丢失。 信号值位于S