Android系统级深入开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.1.1 标准的Linux操作系统

Linux类似于UNIX,是免费的,源代码也是开放的,符合POSIX标准规范的操作系统。Linux拥有现代操作系统的所具有的内容,例如:真正的抢先式多任务处理、支持多用户、内存保护、虚拟内存、支持对称多处理机SMP(symmetric multiprocessing)、符合POSIX标准、支持TCP/IP、支持绝大多数的32位和64位CPU。目前,Linux操作系统不仅可以运行于桌面计算机的x86体系结构,也可以运行于ARM、MIPS、PowerPC等多种操作系统上。

1.Linux的核心部件

Linux的内核从逻辑上可以分成进程调度、进程间通信、内存管理、虚拟文件系统和网络5个部分,它们之间的关系如图3-1所示。

图3-1 Linux内核的模块关系

进程调度(Process Schedule)

进程调度控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其他资源,则该进程是不可运行进程。Linux使用了基于优先级的进程调度算法选择新的运行进程。

进程调度的内容包含在Linux内核中的kernel目录中。

进程间通信(IPC,Intre-Process Communication)

Linux的进程间通信包括FIFO、管道(pipe)等机制,以及System V IPC的共享内存(shm)、消息队列(msg)和信号灯(sem)。

进程间通信的内容包含在Linux内核中的ipc目录中。

内存管理(MM,Memory Management)

内存管理允许多个进程安全地共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,它的代码、数据和堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。

内存管理的内容包含在Linux内核中的mm目录中。

虚拟文件系统(VFS,Virtual File System)

虚拟文件系统隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,包括ext2、fat、NFS等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。

虚拟文件系统的内容包含在Linux内核中的vfs目录中。

网络(Net)

Linux是源于网络的操作系统,提供了大量的内置网络功能,并且网络功能和内核的联系非常紧密。Linux的网络功能包括各种网络协议和对网络硬件的访问。

网络的内容包含在Linux内核中的net目录中。

2.Linux的内核移植和驱动程序

由于Linux可以支持众多的体系结构,因此Linux内核在众多的体系结构中的移植是一个重要的部分。Linux将每种体系结构组成一个文件夹。

以ARM体系结构为例,又包含了各种不同的处理器,操作对于它们的代码又不相同。因此,在arch/arm下包含了两方面的代码:与处理器无关的公共代码、与处理器相关的部分。

在ARM体系结构中,又分为不同的机器。每一种ARM体系对应arch/arm目录中一个名称为mach-XXX的文件夹。

驱动程序也是Linux操作系统中的一个重要部分。在目前的Linux内核的源代码中,驱动程序占据了大部分。在Linux操作系统中,系统调用是应用程序和内核(kernel)之间的接口,而设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备通常是一个标准的设备文件, 应用程序可以像操作普通文件一样对硬件设备进行操作。

在Linux操作系统的驱动程序分成3种基本的类型:

字符设备(char device)

块设备(block device)

网络设备(net device)

这种分类方式是按照驱动程序对用户空间的接口来区分的。在用户空间,通过设备文件访问字符设备和块设备通过,通过socket访问网络设备。

此外,随着Linux操作系统的发展,驱动程序也越来越复杂,某些驱动程序只有对内核的接口,没有对用户空间的接口。某些驱动程序,不需要使用设备节点的方式向用户空间提供接口,而是使用sysfs的方式。

Linux中的驱动程序大都具有标准的架构,基于这个标准的架构可以构建出多种多样的驱动程序。