### 一、Linux与其它类Unix内核的比较:
单块结构的内核:由几个逻辑上独立的成分构成,单块结构,大多数据商用Unix变体也是单块结构;
编译并静态连接的传统Unix内核:Linux能自动按需动态地装载和卸载部分内核代码(模块),而传统Unix内核仅支持静态连接;
内核线程:Linux以一种十分有限的方式使用内核线程来周期性地执行几个内核函数,而一些Unix内核则本身被组织成一组内核线程;
多线程应用程序支持:Linux定义了自己的轻量级进程版本,并以此来实现对多线程应用程序的支持,而商用Unix则都是基于内核线程来作为多线程应用程序的执行环境;
抢占式内核:Linux2.6提供了“可抢占的内核”的编译选项,当采用这种编译方式来编译内核时,Linux2.6可以随意交错执行处于特权模式的执行流,而一些传统的、通用的Unix,如Solaris则是完全的抢占式内核;
多处理器支持:一些Unix内核变体都利用了多处理器系统,Linux2.6支持不同存储模式的对称多处理,不仅可以使用多处理器,同时每个处理器可以毫无区别地处理任何一个任务;
注:"对称多处理"(Symmetrical Multi-Processing)又叫SMP,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。
文件系统:Linux标准文件系统支持多种不同类型的文件系统,由于采用了面向对象虚拟文件系统技术,外部文件系统可以很容易移植到Linux内核上;
注:虚拟文件系统(VFS)是物理文件系统与服务之间的一个接口层,它对Linux的每个文件系统的所有细节进行抽象,使得不同的文件系统在Linux核心以 及系统中运行的其他进程看来,都是相同的。严格说来,VFS并不是一种实际的文件系统。它只存在于内存中,不存在于任何外存空间。VFS在系统启动时建 立,在系统关闭时消亡。
STREAMS:大部分Unix内核均包含STREAMS I/O子系统,作为编写设备驱动程序、终端驱动程序及网络协议的首选接口,但Linux无类似的子系统;
### 二、硬件依赖性:
Linux试图在硬件无关的源代码与硬件相关的源代码之间保持清晰的界限,为此,Linux为不同的硬件平台作了不同的支持,目前共对23种不同的硬件平台类型作了专门的支持。
### 三、操作系统基本概念:
当操作系统启动时,内核被装入到RAM中,内核中包含了系统运行所必须的很多核心过程。内核为系统中所有事情提供了主要功能,并决定高层软件的许多特性。
操作系统的两个主要目标:与硬件交互以及为运行在其上的应用程序提供执行环境。
### 多用户系统:
能并发和独立执行分别属于两个或多个用户的若干应用程序的计算机。
“并发”意味着几个应用程序能同时处于活动状态并竞争各种资源;
“独立”意味着每个应用程序能执行自己的任务,而无需考虑其他用户的应用程序在干些什么;
多用户操作系统必须包含的特点:
* 核实用户身份的认证机制;
* 防止有错误的应用程序妨碍到其它应用程序在系统中运行的保护机制;
* 防止有恶意用户程序干涉或窥视其它用户的活动的保护机制;
* 限制分配给每个用户的资源数的记账机制;
以上保护机制依赖与CPU特权模式相关的硬件保护机制。
###
### 用户和组:
所有的用户由一个唯一的用户标识符来标识。
为了实现资料的共享,引入用户组,组由唯一的用户组标识符来标识。
任何类Unix操作系统都有一个特殊的root用户,即超级用户,操作系统不对她使用通常的保护机制,可以访问系统中的任何一个文件,并干涉任何一个正在执行的用户程序活动。
###
### 进程:
程序执行的一个实例,一个运行程序的“执行上下文”。
Unix是具有抢占式进程的多处理器操作系统。
类Unix操作系统采用进程/内核模式,每个进程都自以为它是系统中唯一的进程,可以独占操作系统所提供的服务。只要进程发出系统调用,硬件就会把特权模式由用户态变成内核态,然后进程以非常有限的目的开始一个内核过程的执行。
内核体系结构:
大部分Unix内核是单块结构:每一个内核层都被集成到整个内核程序中,并代表当前进程在内核态下运行。
微内核操作系统只需要内核有一个很小的函数集,通常包括几个同步原语、一个简单的调度程序和进程间的通信机制。
微内核操作系统一般比单块内核的效率低,因此操作系统不同层次之间显式的消息传递要花费一定的代价。
微内核操作系统迫使系统程序员采用模块化方法,因为任何操作系统层都是一个相对独立的程序,这种程序必须通过定义明确而清晰的软件接口,以实现与其他层的交互,同时时方便移植。
微内核操作系统比单块内核更充分的利用了RAM。
Linux内核提供了模块。模块是一个目标文件,其代码可以在运行时链接到内核,或从内核上解除链接。这种目标代码通常由一组函数组成,用来实现文件系统、驱动程序或其它内核上层功能。
### 四、Unix文件系统概述:
文件:
Unix文件是以字节序列组成的信息载体,内核不解释文件的内容。
文件或目录名由除了“/”和“\0”之外的任意ASCII字符序列组成,通常不能超过255个字符。
当标识文件名时,“.”和“..”分别用来标识当前工作目录和父目录。
硬链接和软链接:
包含在目录中的文件名就是一个文件的硬链接,或简称链接。
软链接又称为符号链接,是短文件,这些文件包含有另一个文件的任意一个路径名。
文件类型:
Unix文件可以是下列类型之一:
* 普通文件
* 目录
* 符号链接
* 面向块的设备文件
* 面向字符的设备文件
* 管道和命令管道
* 套接字(Socket)
文件描述符与索引节点:
文件内容不包含任何控制信息。
文件系统处理文件需要的所有信息包含在一个名为索引节点的数据结构中。
索引节点至少提供以下属性:
* 文件类型
* 与文件相关的硬链接个数
* 以字节为单位的文件长度
* 设备标识符(包含文件的设备的标识符)
* 在文件系统中识别文件的索引节点号
* 文件拥有者的UID
* 文件的用户组ID
* 几个时间戳,表示索引节点状态改变的时间、最后访问时间及最后修改时间
* 访问权限和文件模式
文件操作的系统调用:
当用户访问一个变通文件或目录文件的内容时,实际是访问硬件设备上的一些数据,因此,文件系统是硬盘分区物理组织的用户级视图。而由于处于用户态的进程不能直接与低层硬件交互,因此,所有实际的文件操作都必须在内核态下进行。
当几个进程同时打开一个文件时,文件系统给每个文件分配一个单独的打开文件对象以及单独的文件描述符。在这种情况下,Unix文件系统对进程在同一文件上发出的I/O操作之间不提供任何形式的同步机制。
对普通Unix文件,可以顺序访问,也可随机访问,而对设备文件和命名管道文件,通常只能顺序访问。