10.8 小结

Linux一开始是一个开源的完全复制UNIX的系统,而今天它已经广泛应用于各种系统,从笔记本到超级计算机。它有三种主要接口:shell、C函数库和系统调用。此外,通常使用图形用户界面以简化用户与系统的交互。shell允许用户输入命令来执行。这些命令可能是简单的命令、管线或者复杂的命令结构。输入和输出可以被重定向。C函数库包括了系统调用和许多增强的调用,例如用于格式化输出的printf。实际的系统调用接口是依赖于体系结构的,在x86平台上大约有250个系统调用,每个系统调用做需要做的事情,不会做多余的事情。

Linux中的关键概念包括进程、内存模型、I/O和文件系统。进程可以创建子进程,形成一棵进程树。Linux中的进程管理与其他的UNIX系统不太一样,Linux系统把每一个执行体——单线程进程,或者多线程进程中的每一个线程或者内核——看做不同的任务。一个进程,或者统称为一个任务,通过两个关键的部分来表示,即任务结构和描述用户地址空间的附加信息。前者常驻内存,后者可能被换出内存。进程创建是通过复制父进程的任务结构,然后将内存映像信息设置为指向父进程的内存映像。内存映像页面的真正复制仅当在共享不允许和需要修改内存单元时发生。这种机制称为写时复制。进程调度采用基于优先级的算法,给予交互式进程更高的优先级。

每个进程的内存模型由三个部分组成:代码、数据和堆栈。内存管理采用分页式。一个常驻内存的表跟踪每一页的状态,页面守护进程采用一种修改过的双指针时钟算法保证系统有足够多的空闲页。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

可以通过特殊文件访问I/O设备,每个设备都有一个主设备号和次设备号。块设备I/O使用内存缓存磁盘块,以减少访问磁盘的次数。字符I/O可以工作在原始模式,或者字符流可以通过行规则加以修改。网络设备稍有不同,它关联了整个网络协议模块来处理网络数据包流。

文件系统由文件和目录所组成的层次结构组成。所有磁盘都挂载到一个有惟一根的目录树中。文件可以从文件系统的其他地方连接到一个目录下。要使用文件,首先要打开文件,这会产生一个文件描述符用于接下来的读和写。文件系统内部主要使用三种表:文件描述符表、打开文件描述表和i节点表。其中i节点表是最重要的表,包含了文件管理所需要的所有信息和文件位置信息。目录和设备,以及其他特殊文件也都表示为文件。

保护基于对所有者、同组用户和其他人的读、写和执行的访问控制。对目录而言,执行位指示是否允许搜索。