Linux的核心 结合这篇文章 Linux系统可以粗略地分为用户层与核心层两个部分。如图:

这里指的应用程序范围非常广,它可以是用户的任何程序,例如MySQL/PostSQL等,也可以是一些套坟软件,如X-Server/OpenOffice等,Linux指令,more/cat/less等。这里系统程序是指为系统开发提供服务与支持环境的程序,例如编译程序/文本编辑程序及命令解释程序都属于系统程序的范围。在多数操作系统中都有一个使命令解释器(Command INterpreter),部分,比如DOS中的command就是DOS的一个核心部分。如果没有命令解释无法跟操作系统打交道,进而同系统的硬件设备打交道。Linux的命令解释程序csh或者bash是个独立的程序,所以我们把它与系统程序归到同一类。 核心层是Linux的核心程序。通常认为操作系统应该具备的基本功能,包括进程管理/内存管理/文件系统管理及设备驱动程序等都属于核心层范围。核心程序直接与电脑硬件打交道,例如键盘驱动程序负责接入从键盘输入的字符,并将要显示的字符输出到终端屏幕上;硬盘驱动程序则负责做磁盘输入输出操作,如移动头磁头等。这样的系统结构由于硬件不同而使操作系统在不同平台上不一样的部分几乎集中在外围设备的驱动程序部分,所以可以相对方便的移植到一个新系统上,另外整 个Linux程序几乎是用C编写的,仅有一部分是用汇编写的(主要是硬件初始化与硬件设备密切相关的那部分),高级语言应用在操作系统设计上使得系统移植的难易程序降到最低,Linux在这方面也是很突出的,是一个比较容易移植的多用户多任务操作系统。 从上图可以看出,在用户层及核心层之间有一个中间层叫做系统调用,它是用户与核心之间的接口。系统调用是一些预先定义好的模块,它们提供了一个途径,使得应用程序或一般用户能通过这个途径得到核心程序的服务,例如外部设置使用/程序的很执行/文件的传输等。因为大多数操作系统中,普通用户或应用程序是不能直接访问系统的硬件设备的,因为它是系统的组织/管理者。所以为了使应用程序能安全的访问系统硬件资源和其他一些比较重要的软件资源,通常操作系统都提供一系列的系统调用供应用程序调用。 Linux是多用户多任务操作系统,因此在同一时间可能同时执行多个进程,系统本身也有一些担任资源维护的程序在定期执行。(例如:crontab等)。因此Linux的系统资源(包括软件资源和硬件资源)是由许多进程共享,这点与单用户单任务的DOS是完全不同的。在DOS系统中,所有资源全由单一的用户独占,这样做的后果通常是程序员可以任意改变或者读取系统的状态,也可以通过对BIOS的直接调用向外部设备下达输入/输出的指令。虽然这样做有时候会很方便,但这种做法会破坏整个核心程序对系统的控制。为了避免这种情况,在Linux编程必须通过系统调用来取得核心程序的服务,让所有向系统提出请求服务,都得经过核心程序本身来完成,这样就使一切行动都控制在核心程序管理之下。
[此贴被 TomyChen(quest) 在 08月13日15时09分 编辑过]
|