概述Linux系统一般由4个主要部分组成,内核、外壳、文件系统和应用程序。内核、外壳和文件系统共同构成了基本的操作系统结构,允许用户运行程序、管理文件和使用系统。因为内容比较多,这里就单独kernel这一类简单介绍一下。01.linux内核是操作系统的核心,具有许多最基本的功能。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。Linux内核由以下部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。系统调用接口:SCI层提供一定的机制来执行从用户空间到内核的函数调用。此接口依赖于体系结构,即使在同一处理器系列中也是如此。SCI其实是一个非常有用的函数调用复用和解复用服务。SCI实现可以在./linux/kernel中找到,架构相关的部分可以在./linux/arch中找到。02.内存管理对于任何计算机来说,它的内存和其他资源都是有限的。为了让有限的物理内存满足应用程序对内存的大量需求,Linux采用了一种称为“虚拟内存”的内存管理方式。Linux将内存划分为可管理的“内存页面”(大多数架构为4KB)。Linux涵盖了可用内存的管理方式,以及用于物理和虚拟映射的硬件机制。但是内存管理要管理的不仅仅是4KB缓冲区。Linux为4KB缓冲区提供抽象,例如slab分配器。这种内存管理模型以一个4KB的缓冲区为基础,然后从中分配结构,并跟踪内存页的使用情况,比如哪些内存页是满的,哪些页没有用完,哪些页是空的。这允许该模式根据系统需要动态调整内存使用情况。为了支持多个用户使用内存,有时可用内存会被耗尽。出于这个原因,页面可以移出内存并放在磁盘上。这个过程称为交换,因为页面从内存交换到磁盘。03.进程管理进程实际上是一个具体应用程序的运行实体。在Linux系统中,可以同时运行多个进程,Linux通过以较短的间隔轮流运行这些进程来实现“多任务处理”。这种短暂的时间间隔称为“时间片”,让进程轮流运行的方法称为“进程调度”,完成调度的程序称为调度器。进程调度控制进程对CPU的访问。当需要选择下一个要运行的进程时,调度程序会选择最值得运行的进程。可运行进程实际上是一个只等待CPU资源的进程。如果一个进程正在等待其他资源,则该进程是一个不可运行的进程。Linux使用相对简单的基于优先级的进程调度算法来选择新进程。通过多任务机制,每个进程都可以看作是独占计算机的唯一进程,从而简化了程序的编写。每个进程都有自己独立的地址空间,只能被本进程访问。这样,操作系统就避免了进程之间的相互干扰以及“不良”程序可能对系统造成的危害。有时需要组合两个程序的功能以完成特定任务,例如一个程序输出文本而另一个程序对文本进行排序。为此,操作系统还提供了进程间通信机制来帮助完成此类任务。Linux中常见的进程间通信机制包括信号、管道、共享内存、信号量和套接字。内核通过SCI提供应用程序编程接口(API)来创建新进程(fork、exec或PortableOperatingSystemInterface[POSIX]函数)、停止进程(kill、exit)以及它们之间的通信和同步(signal或POSIX机制)。04.文件系统Linux操作系统中独立的文件系统不是通过盘符或驱动器名(如A:或C:等)来标识的。相比之下,与UNIX操作系统一样,Linux操作系统将单独的文件系统组合成分层树结构,并用单个实体表示该文件系统。Linux操作系统的一个重要特性是它支持许多不同类型的文件系统。Linux中最常用的文件系统是Ext4,这也是Linux原生的文件系统。不过,Linux也可以支持FAT、VFAT、FAT32、MINIX等不同类型的文件系统,从而可以方便地与其他操作系统进行数据交换。由于Linux支持多种不同的文件系统,并将它们组织成一个统一的虚拟文件系统。虚拟文件系统(VirtualFileSystem,VFS):隐藏了各种硬件的具体细节,将文件系统操作与具体文件系统分开。实现细节分离,为所有设备提供统一的接口,VFS提供了几十种不同的文件系统。虚拟文件系统可分为逻辑文件系统和设备驱动程序。逻辑文件系统是指Linux支持的文件系统,如ext4、fat等,设备驱动是指为各个硬件控制器编写的设备驱动模块。虚拟文件系统(VFS)是Linux内核的一个非常有用的方面,因为它为文件系统提供了通用接口抽象。VFS在SCI和内核支持的文件系统之间提供了一个交换层。也就是说,VFS在用户和文件系统之间提供了一个交换层。VFS在用户和文件系统之间提供了一个交换层:在VFS之上是一个通用的API抽象,用于打开、关闭、读取和写入等功能。VFS下面是文件系统抽象,定义了上层功能的实现。它们是给定文件系统(50+)的插件。文件系统的源代码可以在./linux/fs中找到。文件系统层下面是buffercache,它为文件系统层提供了一个通用的功能集(与具体的文件系统无关)。该缓存层通过将数据保留一段时间(或预取数据以使其在需要时可用)来优化对物理设备的访问。缓冲区缓存下面是设备驱动程序,它实现了到特定物理设备的接口。因此,用户和进程不需要知道文件在什么类型的文件系统上,而只需要像使用Ext4文件系统中的文件一样使用它们。05.设备驱动程序设备驱动程序是Linux内核的主要部分。与操作系统的其他部分类似,设备驱动程序运行在高特权处理器环境中,可以直接对硬件进行操作,但也正因为如此,设备驱动程序的任何错误都可能导致操作系统崩溃.设备驱动程序实际上控制着操作系统和硬件设备之间的交互。设备驱动程序提供了一组操作系统可以理解的抽象接口来完成与操作系统的交互,而与硬件相关的具体操作细节则由设备驱动程序完成。一般来说,设备驱动程序与设备的控制芯片有关。比如电脑硬盘是SCSI硬盘,就需要使用SCSI驱动,而不是IDE驱动。06.网络接口(NET)提供对各种网络标准的访问和对各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。众所周知,TCP/IP协议是互联网的标准协议,也是事实上的行业标准。Linux的网络实现支持BSD套接字并支持所有TCP/IP协议。Linux内核的网络部分由BSD套接字、网络协议层和网络设备驱动程序组成。网络设备驱动程序负责与硬件设备进行通信,每一种可能的硬件设备都有对应的设备驱动程序。
