Linux内核介绍

来源:互联网 发布:手机自动数据连接 编辑:程序博客网 时间:2024/06/05 04:53

一、Unix的历史

1969年Unix诞生,已经40年,它仍然是现存操作系统中最强大和最优秀的系统。
Unix从贝尔试验室的一个失败的多用户操作系统Multics中涅桑而生。
1969年由Dennis Ritchie和Ken Thompson在一台无人问津的PDP-7型机上实现的。1971年,Unix被移植到PDP-11型机中。1973年,整个Unix操作系统用C语言进行重写。第一个在贝尔实验室以外被广泛使用的Unix版本是第6版,称为V6。

许多其他的公司也把Unix移植到新的机型上。伴随着这些移植,开发者们按照自己的方式不断地增强系统的功能,并由此产生了若干变体。1977年,贝尔实验室综合各种变体推出了Unix System III;1983年AT&T推出了system V.

由于Unix系统设计简洁并且在发布时提供源代码,所以许多其他组织和团体都对它进行了进一步的开发.加州大学伯克利分校便是其中影响最大的一个。他们推出的变体叫Berkeley Software Distribution(BSD)。伯克利的第一个Unix演化版是1977年推出的1BSD系统等。这些Unix演化版实现了任务管理、换页机制、TCP/IP等新的特性。
最终伯克利大学在1994年重写了虚拟内存子系统(VM),并推出了伯克利Unix系统的最终官方版,即我们熟知的4.4BSD.由于BSD的开放性许可,BSD的开发由Darwin,FreeBSD,NetBSD和OpenBSD继续。

20世纪80和90年代,许多工作站和服务器厂商推出了他们自己的Unix,这些Unix大部分是在AT&T或伯克利发行版的基础上加上一些满足他们特定体系结构需要的特性。这其中就包括Digital的Tru64、HP的HP-UX、IBM的AIX、Sequent的DYNIX/ptx、SGI的IRIX以及Sun的Solaris和SunOS。

今天,Unix已经发展成为一个支持抢占式多任务、多线程、虚拟内存、换页、动态链接和TCP/IP网络的现代化操作系统。Unix的不同变体被应用在大到数百个CPU的集群,小到嵌入式设备的各种系统上。设备的各种系统上。它伴随着操作系统设计技术的进步而继续成长,人们把它作为一个通用的操作系统来使用。

二、Unix强大的根本原因

首先,Unix很简洁。Unix仅仅提供几百个系统调用并且有一个非常明确的设计目的。
第二,在Unix中所有的东西都被当做文件对待。这种抽象使对数据和对设备的操作是通过一套相同的系统调用接口来进行的。
第三,Unix的内核和相关的系统工具软件是用C语言编写而成,使Unix在各种硬件体系架构面前都具备令人惊异的移植能力。
第四,Unix的进程创建非常迅速,并且有一个非常独特的fork()系统调用。
最后,Unix提供了一套非常简单但又很稳定的进程间通信元语,快速简洁的进程创建过程使Unix的程序把目标放在一次执行保质保量地完成一个任务上,而简单稳定的进程间通信机制又可以保证这些单一目的的简单程序可以方便地组合在一起,去解决现实中变得越来越复杂的任务。正是由于这种策略和机制分离的设计理念,确保了Unix系统具备清晰的层次化结构。

三、Linux简介

1991年,Linus Torvalds为当时新推出的、使用Intel 80386微处理器的计算机开发了一款全新的操作系统,Linux由此诞生。
那时,作为芬兰赫尔辛基大学一名学生的Linus,为不能随心所欲使用强大而自由的Unix系统而苦恼。
Linus热衷使用于Minix,一种教学用的廉价Unix,但他不能轻易修改和发布该系统的源代码(由于Minix的许可证),也不能对Minix开发者所作的设计轻举妄动,这让他有了开发自己操作系统的想法。
Linux成功的重要因素是,Linux很快吸引了很多开发者和黑客对其代码进行修改和完善。由于其许可证条款的约定,Linux迅速成为多人的合作开发项目。
Linux是一个非商业化的产品,Linux内核是自由(公开)软件它使用GNU的GPL第2版作为限制条款,即你可以自由地获取内核代码并随意修改它,但如果你希望发布你修改过的内核,你也得保证让得到你的内核的人同时享有你曾经享受过的所有权利,包括全部的源代码。

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

Linux用途厂泛,包含的东西也名目繁多。Linux系统的基础是内核、C库、工具集和系统的基本工具,如登录程序和Shell。Linux系统也支持现代的X Windows系统,这样就可以使用完整的图形用户桌面环境,如GNOMLE。可以在Linux上使用的商业和自由软件数以千计。以后,如无特殊说明,Linux指Linux内核。在容易引起混淆的地方,会具体说明到底指整个系统还是内核。一般情况下,Linux这个词主要指内核。

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

四、操作系统和内核简介

操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分,包括内核、设备驱动程序、启动引导程序、命令行Shell或者其他种类的用户界面、基本的文件管理工具和系统工具。

用户界面是操作系统的外在表象,内核才是操作系统的内在核心。内核又被称作是管理者或者是操作系统核心。通常一个内核由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网络、进程间通信等系统服务程序共同组成。

对于提供保护机制的现代系统来说,内核独立于普通应用程序,它一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。这种系统态和被保护起来的内存空间,统称为内核空间。
应用程序在用户空间执行。它们只能看到允许它们使用的部分系统资源,并且只使用某些特定的系统功能,不能直接访问硬件,也不能访问内核划给别人的内存范围,还有其他一些使用限制。
当内核运行的时候,系统以内核态进入内核空间执行。而执行一个普通用户程序时,系统将以用户态进入以用户空间执行。

在系统中运行的应用程序通过系统调用来与内核通信。应用程序通常调用库函数(比如C库函数)再由库函数通过系统调用界面,让内核代其完成各种不同任务,如printf,open,write等。
当一个应用程序执行一条系统调用,我们说内核正在代其执行。在这种情况下,应用程序被称为通过系统调用在内核空间运行,而内核被称为运行于进程上下文中。这种交互关系——应用程序通过系统调用界面陷入内核——是应用程序完成其工作的基本行为方式。

内核还要负责管理系统的硬件设备。现有的几乎所有的体系结构,包括全部Linux支持的体系结构,都提供了中断机制。
当硬件设备想和系统通信的时候,它首先要发出一个异步的中断信号去打断处理器的执行,继而打断内核的执行。中断通常对应一个中断号,内核通过这个中断号查找相应的中断服务程序,并调用这个程序响应和处理中断。
许多操作系统的中断服务程序,包括Linux,都不在进程上下文中执行。它们在一个与所有进程都无关的、专门的中断上下文中运行。之所以存这样,是为了保证中断服务程序能够在第一时间响应和处理中断请求,然后快速地退出。

这些上下文代表着内核活动的范围。实际上我们可以将每个处理器在任何指定时间点上的活动必然概括为下列三者之一:
第一、运行于用户空间,执行用户进程。
第二、运行于内核空间,处于进程上下文,代表某个特定的迸程执行。
第三、运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断。

五、Unix内核和传统Unix内核比较

由于所有的Unix内核都同宗同源,并且提供相同的API,现代的Unix内核存在许多设计上的相似之处。Unix内核几乎毫无例外的都是一个不可分割的静态可执行库。也就是说,它们必须以巨大、单独的可执行块的形式在一个单独的地址空间中运行。

单内核与微内核设计之比较
所谓单内核就是把它从整体上作为一个单独的大过程来实现,同时也运行在一个单独的地址空间上。因此,这样的内核通常以单个静态二进制文件的形式存放于磁盘中 。所有内核服务都在这样的一个大内核地址空间上运行。内核之间的通信是微不足道的,因为大家都运行在内核态,并身处同一地址空间:内核可以直接调用函数,这与用 户空间应用程序没有什么区别。这种模式的支持者认为单模块具有简单和性能高的特点。大多数Unix系统都设计为单模块

微内核并不作为一个单独的大过程来实现。相反,微内核的功能被划分为多个独立的过程,每个过程叫做一个服务器。理想情况下,只有强烈请求特权服务的服务器才运行在特权模式下,其他服务器都运行在用户空间。所有的服务器都保持独立并运行在各自的地址空间上。因此,就不可能像单模块内核那样直接调用函数,而是通过消息传速处理微内核通信:系统采用了进程间通信(IPC)机制。因此,各个服务器之间通过 IPC机制互通消息,互换“服务”。服务器各自独立,有效地避免了一个服务器的失效祸及另一个。同样,模块化的系统允许一个服务器为了另一个服务器而换出。

因为IPC机制的开销多于函数调用,又因为会涉及内核空间与用户空间的上下文切换,因此,消息传递需要一定的周期,而单内核中简单的函数调用没有这些开销。结果,所有实际应用的基于微内核的系统都让大部分或全部服务器位于内核,这样,就可以直接调用函数,消除频繁的上下文切换。
Windows NT内核(Windows XP、Windows Vista和Windows7等基于此)和Mach(Mac OS X的组成部分)是微内核的典型实例。不管是Windows还是Mac OS X,都在其新近版本中不让任何微内核服务器运行在用户空间,这违背了微内核设计的初衷。

Linux是一个单内核,也就是说,Linux内核运行在单独的内核地址空间上。不过,Linux汲取了微内核的精华:模块化设计、抢占式内核、支持内核线程以及动态装载内核模块的能力。Linux还避免微内核设计上性能损失的缺陷,让所有事情都运行在内核态,直接调用函数,无须消息传递。至今,Linux是模块化的、多线程的以及内核本身可调度的操作系统。

0 0
原创粉丝点击