• 沒有找到結果。

Linux 内核原理

在文檔中 嵌 入 式 系 统 应 用 开 发 (頁 124-127)

第 4 章 嵌入式 Linux

4.2 Linux 内核原理

Linux 是一个多用户、多任务的操作系统。多用户就是一台计算机能够并发和独立执 行分别属于两个或多个用户的若干应用程序。在多用户系统中,每个用户在机器上有私用 空间,并能保证没有用户能够开发一个用于侵犯其他用户私有空间的系统应用程序。

Linux 操作系统的每个任务可以由若干个并发进程完成,所有进程都处在一定的用户 模式和系统模式中。这些模式由不同的硬件支持,但是通常从用户方式进入系统方式或从 系统方式进入用户方式时,有一个安全机制。在 Linux 中,进程不能抢占当前运行进程。

进程的运行是基于时间片调度,即每一个进程允许使用一小段 CPU 时间。内核对进程根 据运行时间的多少排队,但也提供优先级调度,即所谓的实时可抢占。

Linux 进程在执行过程中会根据环境来改变状态,进程状态转换如图 4.1 所示。

l 运行态(TASK_RUNNING)。进程处于运行(它是系统的当前进程)或者准备运行状 态(它在等待系统将 CPU 分配给它)。

l 等待态。进程在等待一个事件或者资源。Linux 将等待进程分成两类:可中断与 不可中断。处于可中断等待态(TASK_INTERRUPTIBLE)的进程,待资源有效时 被唤醒,也可被其他进程的信号中断,唤醒后进入就绪态。不可中断等待态 (TASK_UNINTERRUPTIBLE)的进程不能被其他进程的信号中断,只有等到资源 有效时才被唤醒。

图4.1 进程状态的变迁

l 停止态(TASK_STOPPED)。进程被暂停,通过其他进程的信号才能被唤醒。正 在调试的进程可以处于停止状态。

l 僵死态(TASK_ZOMBIE)。由于某些原因被终止的进程,但是在 task 数据中仍然 保留task_struct 结构。它像一个已经死亡的进程。

Linux 内核是一整块可执行代码,它的体系结构是单模块。尽管不同内核任务之间的 区别不总是能清楚地标识出来,但内核的作用还是可以划分的,参见图4.2。

图4.2 内核划分图

(1) 进程管理

进程实际是某特定应用程序的一个运行实体。在 Linux 系统中,能够同时运行多个 进程,Linux 通过在短的时间间隔内轮流运行这些进程而实现“多任务”。这一短的时间 间隔称为“时间片”,让进程轮流运行的方法称为“调度”,完成调度的程序称为调度程 序。通过多任务机制,每个进程可认为自己独占计算机,从而简化程序的编写。每个进程 有自己单独的地址空间,并且只能由这一进程访问,这样,操作系统避免了进程之间的互 相干扰以及“坏”程序对系统可能造成的危害。

为了完成某特定任务,有时需要综合两个程序的功能,例如一个程序输出文本,而另 一个程序对文本进行排序。为此,操作系统还提供进程间的通信机制来帮助完成这样的任 务。Linux 中常见的进程间通信机制有信号、管道、共享内存、信号量和套接字等。

(2) 内存管理

对任何一台计算机而言,其内存以及其他资源都是有限的。为了让有限的物理内存满 足应用程序对内存的大量需求,Linux 采用了称为“虚拟内存”的内存管理方式。Linux 将内存划分为容易处理的“内存页”。在系统运行过程中,应用程序对内存的需求大于物 理内存时,Linux 可将暂时不用的内存页交换到硬盘上。这样,空闲的内存页可以满足应 用程序的内存需求,而应用程序却不会注意到内存交换的发生。

内存管理分为内核态与用户态,内核态采用实内存分配与管理,用户态采用虚拟内存 管理。Linux 对内存的管理有许多算法,如伙伴算法等。

(3) 文件系统

和 DOS 等操作系统不同,Linux 操作系统中单独的文件系统并不是由驱动器号或驱 动器名称(如 A:或 C:等)来标识的。和 Unix 操作系统一样,Linux 操作系统将独立的文 件系统组合成一个层次化的树形结构,并且由一个单独的实体代表这一文件系统。Linux 将新的文件系统通过一个称为“挂装”或“挂上”的操作将其挂装到某个目录上,从而让 不同的文件系统结合成为一个整体。Linux 操作系统的一个重要特点是它支持许多不同类 型的文件系统。Linux 中最普遍使用的文件系统是 Ext2,它也是 Linux 土生土长的文件系 统。但 Linux 也能够支持 FAT、VFAT、FAT32、MINIX 等不同类型的文件系统,从而可 以方便地和其他操作系统交换数据。由于 Linux 支持许多不同的文件系统,并且将它们组 织成了一个统一的虚拟文件系统,因此,用户和进程不需要知道文件所在的文件系统类 型,而只需要像使用Ext2 文件系统中的文件一样使用它们。

实际上,Linux 利用虚拟文件系统,把文件系统操作和不同文件系统的具体实现细节 分离开。

(4) 设备管理

设备驱动程序是 Linux 内核的主要部分。和操作系统的其他部分类似,设备驱动程 序运行在高特权级的处理器环境中,从而可以直接对硬件进行操作,但正因为如此,任何 一个设备驱动程序的错误都可能导致操作系统的崩溃。设备驱动程序实际控制操作系统和 硬件设备之间的交互。设备驱动程序提供一组操作系统可理解的抽象接口完成和操作系统 之间的交互,而与硬件相关的具体操作细节由设备驱动程序完成。一般而言,设备驱动程 序和设备的控制芯片有关,例如,如果计算机硬盘是 SCSI 硬盘,则需要使用 SCSI 驱 动程序,而不是IDE 驱动程序。

Linux 中设备分为字符设备与块设备。字符设备是最简单的,如串行口、并行口、鼠 标/键盘的 PS/2 接口等。应用程序可以使用标准的系统调用访问它们。块设备主要指的是 磁介质盘、RAMdisk、FlashDisk 等设备。

(5) 网络

网络必须由操作系统管理,由于大多数网络操作不是针对进程的,接收数据包是异步 事件。数据包必须在进程处理它们以前就被收集、确认和分发。系统通过程序和网络接口 发送数据包,并且应该可以正确让程序睡眠,并唤醒等待网络数据的进程。另外,所有路 由和地址解析问题是在内核里实现的。

Linux 和网络几乎就是同义语。Linux 实际就是 Internet 和万维网(WWW)的产物。

Linux 的开发者使用网络和 Web 进行信息交换,而 Linux 本身又用于各种组织的网络支 持。TCP/IP 协议是 Internet 的标准协议,同时也是事实上的工业标准。Linux 的网络实现 支持BSD 套接字,支持全部的 TCP/IP 协议。Linux 内核的网络部分由 BSD 套接字、网络 协议层和网络设备驱动程序组成。

在文檔中 嵌 入 式 系 统 应 用 开 发 (頁 124-127)