笔者本学期使用该教材上课,教师布置的一些课后习题似乎难以在网上找到答案。故分享自己写的答案,水平有限,仅供参考。欢迎指出问题、交流。本文随着学期课程学习进度而动态更新。
1-4
①基于UNIX设计,性能出色。②遵照GPL许可,是自由软件。
③符合POSIX标准,兼容性好。④可移植性好。⑤网络功能强大。⑥安全性好。
1-5
Linux的基本系统由内核、Shell和文件系统这3个部分组成。
Linux内核的功能是运行程序和管理基本硬件设备。
2-8
2-9
其他人想要访问该文件,必须要先访问该目录。由于该目录访问权限是700,其他人不具有读取权限,所以就不能读取目录下的文件。
2-10
新建立的文本文件默认权限为(777-037)&666=640;
新建立的目录的默认权限为777-037=740。
2-12
2-14
$ chmod o+x myfile
5-8
Linux使用fork()系统调用,按父进程复制一个子进程,建立子进程的描述符,链入进程链表,fork()返回后,子进程已就绪,等待进程调度。
写时复制技术的目的是优化fork()的性能,不是将父进程的映像复制给子进程,而是让子进程共享父进程映像的同一个复本,直到父子进程有一方遇到写操作时再进行复制。由于子进程在创建时通常就立刻执行exec()系统调用,使得复制操作不会发生,提高了创建进程的效率。
5-9
Shell进程是所有在其下执行的命令的父进程。当Shell接收一个命令行后,会创建一个子进程,将子进程的映像更换为要执行的命令的映像文件,子进程会执行该命令直到结束。若子进程为后台运行,则Shell进程会立即显示命令提示符,准备接收下一个命令;若子进程为前台运行,则Shell进程阻塞自己,等待子进程退出时被唤醒,回收子进程并准备接收下一个命令。
5-13
Linux的调度策略有实时调度策略(先进先出法、轮转法)、普通调度策略(完全公平调度法)。普通进程采用完全公平调度法CFS。
5-17
Linux系统中对死锁问题采取鸵鸟算法,即忽略死锁问题。原因:对付死锁问题的成本过高,而死锁发生的概率也很低。采用死锁预防或者检测算法会严重降低系统效率,以此代价去换取避免概率极小的死锁问题很不划算。
6-9
Linux内存管理是基于分页的。Linux的页式存储机制为了适应x86的分段机制,利用了共享0基址段的方式,即各个段的基址都被设为0,使段式映射实际上不起作用,这样虚拟地址与线性地址是一样的,只需进行页式映射即可得到物理内存地址。此时,段界限为4GB,由于基址为0,故偏移量等于线性地址。
6-12
Linux系统的内存分配与回收采用伙伴算法。特点:分配和回收的空间都是2的幂大小的页块,用以减少内存碎片,增加连续内存分配成功的几率。
6-13
malloc()函数是用户进程使用的,用于分配用户空间中的虚存区中的堆区,即malloc()只是在分配区间上建立匿名映射,并不直接分配物理内存。kmalloc()函数用于获得以字节为单位的一个连续的小块内存区(通常小于128MB),即分配小块连续的物理内存,访问效率高。vmalloc()函数用于分配一个线性地址连续但是物理地址不保证连续的内存区,可以分配较大的内存空间,访问效率一般较低。
7-5
Linux文件系统采用流式文件逻辑结构,采用多重索引文件物理结构。
7-6
1.Linux文件系统中,目录文件存放的是文件列表,即该目录下文件的FCB(Ext中是FCB次部)构成的表,每个FCB是一个目录项;普通文件存放的是文件内容,通常是字符串。2.普通文件的权限分为r、w、x,目录文件权限分为r(读)、w(增删目录中文件)、x(目录可访问)、X(只能访问目录,不能执行目录中无执行权限x的文件)。
7-10
虚拟文件系统位于整个文件系统的最上层,为用户进程及内核其他模块提供了使用文件系统的统一接口。作用:接收来自系统调用层的文件操作请求,把操作结果返回给调用者;负责管理文件系统的缓存,保证文件系统的整体效率;将标准文件操作映射到实际文件系统的操作。与实际文件系统的关系:虚拟文件系统是对实际文件系统的抽象,将标准文件操作映射到实际文件系统的操作,保证Linux可以支持多种不同的文件系统。
选做题:请阐述Linux文件系统引入inode的好处。
引入索引节点inode,实现了将索引节点内容(文件属性信息、索引表)与文件名相分离。使用FCB次部构建的目录项大大减小了目录文件的大小,提升了查找效率;属性信息、索引表与文件名相分离使得对数据块的访问更加灵活,即可以利用文件名和路径去访问文件数据块,也可以利用索引节点inode中的索引表去访问数据块,这一特性也直接保证了文件链接技术的诞生,硬链接正是使用了inode而绕过文件名去访问文件,实现文件的共享。