linux操作系统的组成有哪几部分?

来源:互联网 发布:java怎么解析excel 编辑:程序博客网 时间:2024/05/01 11:42
马上就要工作了,以后的工作环境是以linux操作系统为平台进行开发,但是今天同学说了一个面试题:linux操作系统你了解多少, 说说linux 操作系统的机制吧。

       于是上网查了一下,感觉对于初学者(像我这样的),首先应该了解操作系统的组成:

        一种说法:

一般系统的组成由:核心,shell(命令解释器),应用程序

 

linux也一样,linux的核心(2.6.9.18),shell(/bin/bash),应用程序(Xwindow)等

或是:

Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。

 

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

 

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

 

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

 

4.网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。

 

5.进程间通讯(IPC) 支持进程间各种通信机制。

 

不识庐山真面目――操作系统的组成

操作系统概念对新手来说就很容易混淆。拜现代的许多商业操作系统所赐,很少有用户能不费力气地明白说出什么是操作系统。很多人认为操作系统就是Windows,操作系统当然要包含字处理软件,操作系统怎么可以不处理图形? 说实话,正是由于这些广泛存在的误解,原本操作系统的定义的内涵已经越来越偏离大众的理解了――不识庐山真面目,只缘身在此山中。所以,我们在这里有必要对这个概念进行一番界定,才能展开我们自己的讨论――勿于浮沙建高塔。

如果您已经比较熟悉这些情况和渊源了,可以跳过这部分,选择其它您感兴趣的文章。

操作系统功能变得愈来愈强大,但结构也越来越复杂。在以方便用户 (包括开发人员和终端用户)为宗旨的思想下,操作系统不断加入新功能,新服务。回忆从前大家使用的DOS系统仅仅只需要一张软盘(拿DOS举例是因为比较切合国内用户的实际情况,其实Unix是比DOS年代久远的,但大家以前很少使用,大部分人都是从DOS开始计算机之旅的。当然Unix的最初版本也用不了几张软盘),而如今的windows系统或Linux系统动辄就需要数张光盘,麻雀已经变成了恐龙――虽然它们都有五脏六腑。

 

词汇辨析:操作系统

   操作系统一词现在已经有了很多不同的内涵。操作系统通常被认为是整个系统中负责完成最基本功能和系统管理的部分。这些部分应该包括内核、设备驱动程序、启动引导程序、命令行shell或者其他种类的用户界面、基本的文件管理工具和系统工具。这些都是必不可少的东西。

    可是,由于大多数最终用户是通过商业途径得到操作系统,他们很少会仅仅购买一个只包含以上功能的软件包。一般的,他们在得到操作系统的同时,更需要的是构架于其上的应用软件,来完成所需的实际功能。为了满足这种需求,操作系统一般要和应用软件绑定发行和出售。这样的软件包在Linux领域被称作发行包,如RedHat8.0或 红旗Linux4.0等。

    由此就引起了一些误解,许多用户理所当然地认为发行包就是操作系统。但是,从逻辑结构划分,应用软件不应该属于操作系统。

    为了符合大多数人的习惯,在本杂志范围内,我们一般用操作系统这个词指代发行包,而用内核表示操作系统本来的逻辑概念。在不引起混淆的情况下,有时也会用操作系统表示内核。

 

虽然变成了恐龙,但筋骨脉络还是清楚的,现代操作系统的结构相对是稳定、清晰的。操作系统本质上也是大型软件包(从开发者的角度看),因此结构组织也不会与其它大型软件迥然而异:采取了分层结构,越向上层抽象程度越高,越接近用户;相反越向下层,越靠近硬件,抽象也相对接近硬件。而且上层软件依靠下层软件提供的服务,再加上本身提供附加服务为更高层服务。总体呈现倒金子塔形。

下面我们就简要分析一下操作系统的体系结构。

增繁就简――操作系统组成

形形色色的操作系统组成结构都不尽相同。虽然大多是为同样的目的,但由于实现方法可以自由选择,所以各个操作系统理所当然的存在差异,有些系统之间差异还相当大。

我们选取最常见的操作系统(UNIX)组成结构,向大家展示操作系统的体系结构的大致框架。对于各种操作系统之间的具体差异,大家可以跟下面讲述的结构进行对比认识。   

在这里,我们自己用一组简单的公式来描述操作系统的组成要素:

操作系统 = 内核 + 系统程序

系统程序 = 编译环境 + API

编译环境 = 编译程序 + 连接程序 + 装载程序

API  = 系统调用 + 语言库函数(C、C++、Java等等)

AUI  =  shell + 系统服务例程(如x服务器等)+ 应用程序(浏览器,字处理,编辑器等)

而整个软件系统是:

软件系统 = 操作系统 + AUI

操作系统最底层的组件是内核,其上层搭建了许多系统软件。

系统程序包括三个部分,分别是:编译环境、应用程序接口和用户接口。

编译环境包含汇编、C 等低高级语言编译程序,连接程序和装载程序,这些程序负责将文本格式的程序语言转变为机器能识别和装载的机器代码。

应用程序接口(API)包含内核提供的系统调用接口和语言库,系统调用是为了能让应用程序使用内核服务,语言库函数则是为了方便应用程序开发,所以将一些常用的基础功能预先编译以供使用,比如对C语言来说常用的C库等;

用户接口(AUI)包括我们熟悉的shell、系统服务程序和常用的应用程序。

这是一个典型的结构,但不是一成不变。许多操作系统的发行中会有所删减,比如应用于嵌入式设备的系统,对X服务器就可能不做要求。但是像内核、系统调用等要素是必不可少的。

下图显示了操作系统的概念结构。



系统软件:系统软件是相对应用软件而言的,应用软件针对最终用户需求编写,完成实际功能,而系统软件则是为了简化应用程序的开发而存在的,比如数据库系统为应用软件提供了有效的数据传输、存储服务;还有编程语言的执行环境――它由C库实现――也属于一种系统程序,它为应用程序开发提供了诸如I/O操作例程,图形库,计算库等等基础服务。可见系统软件范围覆盖很广,只要面向的服务群体不是最终用户的软件都可以划归到系统软件中来。

原创粉丝点击