第1章Linux内核简介之Linux简介

1.2 Linux简介

        到现在,Linux已被广泛移植到Alpha、ARM、PowerPC、SPARC、x86-64等许多其它体系结构之上。如今Linux既被安装到最轻小的消费电子设备上,比如手表,同时也在服务规模最庞大的服务数据中心上,如超级计算机集群。如今,Linux的商业前景也被看好,不管是新成立的Linux专业公司RedHat还是计算巨头IBM,都提供解决方案,从嵌入式系统、桌面环境到服务器。

        Linux是类Unix系统,但不是Unix。尽管Linux借鉴了Unix的许多设计并且实现了Unix的API,但Linux没有像其他Unix变种那样直接使用Unix的源代码。必要的时候,Linux的实现可能和其它各种Unix的实现大相径庭,但Linux没有抛弃Unix的设计目标并且保证了应用程序编程接口的一致性。

        Linux是一个非商业化的产品。实际上Linux是一个互联网上的协作开发项目。尽管Linus被认为是Linux之父,并且现在依然是一个内核维护者,但开发工作其实是一个结构松散的工作组协力完成的。任何人都可以开发内核。和该系统的大部分一样,Linux内核也是自由公开软件。也不是无限自由的。Linux使用GNU的Generic Public License(GPL)第二版作为限制条款。这样做的结果是,可以自由地获取内核代码并随意修改它,但如果你希望发布你修改过的内核,你也得保证让得到你的内核的人同时享有你曾经享受过的所有权利,包括全部的源代码。

        Linux用途广泛。Linux系统的基础是内核、C库、工具集合系统的基本工具,如登录程序和Shell。Linux系统也支持现代的X Windows系统,这样可以使用完整的图形用户桌面环境,如GHOME。可以在Linux上使用的商业和自由软件数以千计。

1.3 操作系统和内核简介

        操作系统的精确定义并没有一个统一的标准。许多用户把他们在显示器屏幕上看到的东西认为就是操作系统。通常,操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分。这些部分应该包括内核、设备驱动程序、启动引导程序、命令行shell或者其他种类的用户界面、基本的文件管理工具和系统工具。这些都是必不可少的-别以为只要有浏览器和播放器就行。系统其实包含操作系统和所有运行在它之上的应用程序。

        本书的主题是内核。用户界面是操作系统的外在抽象,内核是操作系统的内在核心。系统其它部分必须依靠内核提供的服务,像管理硬件设备、分配系统资源等。内核有时被称作是管理者或者是操作系统的核心。通常一个内核由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网络、进程之间通信等系统服务程序共同组成。对于提供保护机制的现代系统来说,内核独立于普通应用程序,内核一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。这种系统态和被保护起来的内存空间,统称为内核空间。相对的,应用程序在用户空间执行。它们只能看到允许它们使用的部分系统资源,并且只使用某些特定的系统功能,不能直接访问硬件,也不能访问内核划给别人的内存范围,还有其他一些使用限制。当内核运行的时候,系统以内核态进入内核空间执行。而执行一个普通用户程序时,系统将以用户态进入用户空间执行。

        在系统中运行的应用程序通过系统调用与内核进行通信(如图1-1)。


        应用程序通常调用库函数比如C库函数再由库函数通过系统调用界面,让内核代其完成各种不同的任务。一些库调用提供了系统调用不具备的许多功能,在那些较为复杂的函数中,调用内核的操作通常只是整个工作的一个步骤而已。举个例子,printf()函数,它提供了数据的缓存和格式化等操作,而调用write()函数将数据写到控制台上只不过是其中的一个动作。也有一些库函数和系统调用时一一对应的关系,比如,open()库函数除了调用open()系统调用之外,几乎什么也不做。还有一些C库函数,像strcpy(),根本不需要直接调用系统级的操作。当一个应用程序执行一条系统调用,内核正在代其执行。如果进一步解释,在这种情况下,应用程序被称为通过系统调用在内核空间运行,而内核被称为运行在进程上下文中。这种交互关系-应用程序通过系统调用界面陷入内核-是应用程序完成其工作的基本行为方式。

        内核还要负责管理系统的硬件设备。现有的几乎所有的体系结构,包括全部的Linux支持的体系结构,都提供了中断机制。当硬件设备和系统通信时,它首先要发出一个异步的中断信号去打断处理器的执行,继而打断内核的执行。中断通常对应着一个中断号,内核通过这个中断号查找相应的中断服务程序,并调用这个程序响应和处理中断。例如,当敲击键盘时,键盘控制器发送一个中断信号告知系统,键盘缓冲区有数据到来。内核注意到这个中断对应的中断号,调用相应的中断服务程序。该中断服务程序处理键盘数据然后通知键盘控制器可以继续输入数据了。为保证同步,内核可以停用中止,既可以停止所有的中断,也可以有选择地停止某个中断号对应的中断。许多操作系统的中断服务程序,包括Linux的,都不在进程上下文中执行。而是在一个与所有进程都无关的、专门的中断上下文中运行。之所以存在一个专门的执行环境,是为了保证中断服务程序能够在第一时间响应和处理中断请求,然后快速退出。

        这些上下文代表内核活动的范围。实际上可以将每个处理器在任何指定时间点上的活动概括为下列三者之一:

运行在用户空间,执行用户进程。

运行在内核空间,处于进程上下文,代表某个特定的进程执行。

运行在内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断。

以上所列几乎包括所有进程,例如,当CPU空闲时,内核就运行一个空进程,处于进程上下文,但运行在内核空间。

       

猜你喜欢

转载自blog.csdn.net/xiezhi123456/article/details/81021569
今日推荐