Linux操作系统概述
- Linux发展历史
- Linux的发展要素
- Linux与UNIX的异同
- 操作系统类型选择和内核版本的选择
- Linux的系统架构
- Linux内核的主要模块
- Linux的文件结构
Linux发展历史
Linux操作系统于1991年诞生,目前已经成为主流的操作系统之 一 。其版本从开始的0.01版本到目前的3.9.4版本经历了二十多年的发展,成为目前在服务器、嵌入式系统和个人计算机等多个方面得到广泛应用的操作系统。
Linux的发展要素
Linux操作系统是UNIX的 一 种典型的克隆系统。在 Linux 诞生之后,借助于 Internet网络,在全世界计算机爱好者的共同努力下,成为目前世界上使用者最多的一种类似UNIX的操作系统,在Linux操作系统的诞生、成长和发展过程中,以下5个方面起到了重要的作用:
-
UNIX操作系统
-
Minix操作系统
-
GNU计划
-
OSIX标准
-
Internet网络
Linux与UNIX的异同
Linux是UNIX操作系统的一 个克隆系统,没有UNIX 就没有Linux。但是,Linux 和传统的UNIX有很大的不同,两者之间的最大区别是关于版权方面的: Linux是开放源代码的自由软件,而UNIX是对源代码实行知识产权保护的传统商业软件。两者之间还存在如下的区别:
-
UNIX操作系统大多数是与硬件配套的,操作系统与硬件进行了绑定;而Linux则可运行在多种硬件平台上。
-
UNIX操作系统是一 种商业软件 (授权费大约为5 万美元);而Linux 操作提供则是一 种自由软件,是免费的,并且公开源代码。
-
UNIX的历史要比Linux 悠久,但是Linux 操作系统由于吸取了其他操作系统的经验,其设计思想虽然源于UNIX但是要优于UNIX。
-
虽然UNIX和Linux都是操作系统的名称,但UNIX除了是一 种操作系统的名称外,作为商标,它有SCO所有。
-
Linux的商业化版本有Red Hat Linux、SuSe Linux、slakeware Linux、国内的红旗Linux等,还有Turbo Linux; UNIX主要有Oracle的Solaris, IBM的AIX, HP的HP-UX, 以及基于x86平台的SCO UNIX/UNIX ware。
-
Linux操作系统的内核是免费的;而UNIX的内核并不公开。
-
在对硬件的要求上,Linux操作系统要比UNIX要求低,并且没有UNIX对硬件要求的那么苛刻;在对系统的安装难易度上,Linux比UNIX容易得多;在使用上, Linux相对没有UNIX那么复杂。
总体来说,Linux操作系统无论在外观上还是在性能上都与UNIX相同或者比UNIX更好,但是Linux操作系统不同于UNIX的源代码。在功能上,Linux仿制了UNIX的一部分,与UNIX的System V和BSD UNIX相兼容。在UNIX上可以运行的源代码, 一 般情况下在Linux上重新进行编译后就可以运行,甚至BSD UNIX的执行文件可以在Linux操作系统上直接运行。
操作系统类型选择和内核版本的选择
在Linux环境下进行程序设计,首先要选择一 款适合自己的Linux 操作系统。本节对常用的发行版本和Linux内核进行了介绍,并简要讲解了如何定制自己的Linux操作系统。
Linux的发行版本众多,本小节将对最常用的发行版本进行简单的介绍,表1.1为用户经常使用的版本。读者可以去相关网址查找,选择适合的版本使用。本书所使用的Linux为Ubuntu。
内核是 Linux 操作系统的最重要的部分,从最初的0.95版本到目前的3.9.4 版本,Linux内核开发经过了 20 多年的时间,其架构已经十分稳定。Linux 内核的编号采用如下编号形式:
注:在2011 年,Linux Kernel 3.0 发布。随后,一系列以3 开头的内核版本被发布更新。
例如 2.6.34.14 各数字的含义如下:
-
第1个数字(2)是主版本号,表示第2大版本。
-
第 2 个数字 (6) 是次版本号,有两个含义:既表示是 Linux 内核大版本的第 6 个小版本,同时因为6是偶数表示为发布版本(奇数表示测试版);
-
第 3个数字(34) 是主版本补丁号,表示指定小版本的第 34 个补丁包;
-
第 4 个数字 ( 14 ) 是次版本补丁号,表示次补丁号的第 3 个小补丁。
在安装 Linux操作系统的时候,最好不要采用发行版本号中的小版本号是奇数的内核,因为开发中的版本没有经过比较完善的测试,有一些漏洞是未知的,有可能造成使用中不必要的麻烦。
注:Debian Linux 内核的版本稍有不同,如 2.6.18-3, 可以发现多了 一 组数字 (3) ,该数字是构建号,每个构建号可以增加少量新的驱动程序或缺陷修复。
Linux内核版本的开发源代码树目前比较通用的是2.6.xx的版本,当然,有部分2.4的版本仍在使用。与2.4版本的内核相比较,2.6版本内核具有如下优势:
-
支持绝大多数的嵌入式系统,加入了之前嵌入式系统经常使用的µ Clinux的大部分代码,并且子系统的支持更加细化,可以支持硬件体系结构的多样性,可抢占内核的调度方式支待实时系统,可定制内核。
-
支持目前最新的CPU, 例如Intel的超线程、可扩展的地址空间访问。
-
驱动程序框架变更,例如用**.ko替代了原来的.o**方式,消除内核竞争,更加透明的子模块方式。
-
增加了更多的内核级的硬件支持。
Linux的系统架构
Linux系统从应用角度来看,分为内核空间和用户空间两个部分。内核空间是Linux操作系统的主要部分,但是仅有内核的操作系统是不能完成用户任务的。丰富并且功能强大的应用程序包是 一 个操作系统成功的必要条件。
Linux内核的主要模块
Linux的内核主要由5个子系统组成:进程调度、内存管理、虚拟文件系统、网络接口、进程间通信。下面将依次讲解这5个子系统。
①.进程调度SCHED
进程调度指的是系统对进程的多种状态之间转换的策略。Linux下的进程调度有3种策略: SCHED_OTHER、SCHED_FIFO和SCHED_RR:
-
SCHED_OTHER是用于针对普通进程的时间片轮转调度策略。这种策略中,系统给所有的运行状态的进程分配时间片。在当前进程的时间片用完之后,系统从进程中优先级最高的进程中选择进程运行。
-
SCHED_FIFO是针对运行的实时性要求比较高、运行时间短的进程调度策略。这种策略中,系统按照进入队列的先后进行进程的调度,在没有更高优先级进程到来或者当前进程没有因为等待资源而阻塞的情况下,会 一直运行。
-
SCHED_RR是针对实时性要求比较高、运行时间比较长的进程调度策略。这种策略与SCHED_OTHER的策略类似,只不过SCHED_RR进程的优先级要高得多。系统分配给SCHED_RR进程时间片,然后轮循运行这些进程,将时间片用完的进程放入队列的末尾。
由于存在多种调度方式,Linux进程调度采用的是"有条件可剥夺" 的调度方式。普通进程中采用的是SCHED_OTHER的时间片轮循方式,实时进程可以剥夺普通进程。如果普通进程在用户空间运行,则普通进程立即停止运行,将资源让给实时进程;如果普通进程运行在内核空间,需要等系统调用返回空间后方可剥夺资源。
②.内存管理MMU
-
内存管理是多个进程间的内存共享策略。在Linux系统中,内存管理的主要概念是虚拟内存。
-
虚拟内存可以让进程拥有比实际物理内存更大的内存,可以是实际内存的很多倍。每个进程的虚拟内存有不同的地址空间,多个进程的虚拟内存不会冲突。
-
虚拟内存的分配策略是每个进程都可以公平地使用虚拟内存。虚拟内存的大小通常设置为物理内存的两倍。
③.虚拟文件系统VFS
-
在Linux下支持多种文件系统,如ext、ext2、minix、umsdos、msdos、vfat、ntfs、proc、 smb、ncp、iso9660、sysv、hpfs、affs等。
-
目前Linux下最常用的文件格式是ext2和ext3。 ext2文件系统用于固定文件系统和可活动文件系统,是ext文件系统的扩展。ext3文件系统是在ext2上增加日志功能后的扩展,它兼容ext2。
-
两种文件系统之间可以互相转换,ext2不用格式化就可以转换为ext3文件系统,而ext3文件系统转换为ext2文件系统也不会丢失数据。
④.网络接口
Linux是在Internet飞速发展的时期成长起来的,所以Linux支持多种网络接口和协议。网络接口分为网络协议和驱动程序,网络协议是一 种网络传输的通信标准,而网络驱动则是对硬件设备的驱动程序。Linux支待的网络设备多种多样,几乎目前所有网络设备都有驱动程序。
⑤.进程间的通信
Linux操作系统支待多进程,进程之间需要进行数据的交流才能完成控制、协同工作等功能,Linux的进程间通信是从UNIX系统继承过来的。Linux下的进程间的通信方式主要有管道方式、信号方式、消息队列方式、共享内存和套接字等方法。
Linux的文件结构
-
与Windows下的文件组织结构不同,Linux不使用磁盘分区符号来访问文件系统,而是将整个文件系统表示成树状的结构,Linux系统每增加 一 个文件系统都会将其加入到这个树中。
- 操作系统文件结构的开始,只有一个单独的顶级目录结构,叫做根目录。所有一 切都从 “根” 开始,用 “/” 代表,并且延伸到子目录。DOS/Windows 下文件系统按照磁盘分区的概念分类,目录都存于分区上。Linux则通过 **“挂接”**的方式把所有分区都放置在“根” 下各个目录里。
一 个Linux 系统的文件结构如下图所示。不同的Linux发行版本的目录结构和具体的实现功能存在 一 些细微的差别。但是主要的功能都是一 致的。一 些常用目录的作用如下所述。
-
/etc :包括绝大多数Linux系统引导所需要的配置文件,系统引导时读取配置文件,按照配置文件的选项进行不同情况的启动,例如fstab、host.conf等;
-
/lib: 包含C编译程序需要的函数库,是一 组二进制文件,例如glibc等;
-
/usr: 包括所有其他内容,如src、local。Linux的内核就在/usr/src中。其下有子目录/bin, 存放所有安装语言的命令,如gee、perl等;
-
var: 包含系统定义表,以便在系统运行改变时可以只备份该目录,如eaehe;
-
/tmp: 用于临时性的存储;
-
/bin: 大多数命令存放在这里;
-
/home: 主要存放用户账号,并且可以支持ftp的用户管理。系统管理员增加用户时,系统在home目录下创建与用户同名的目录,此目录下一般默认有Desktop目录。
-
/dev: 这个目录下存放一种设备文件的特殊文件,如fd0、had等。
-
/mnt: 在Linux系统中,它是专门给外挂的文件系统使用的,里面有两个文件edrom、floopy,登录光驱、软驱时要用到。
刚开始使用Linux的人比较容易混淆的是Linux下使用斜杠**“/”,而在DOS/Windows下使用的是反斜杠"“。例如在Linux中,由于从UNIX集成的关系,路径用”/usr/src/Linux"表示,而在Windows下则用"\usr\src\Linux"**表示。在Linux下更加普遍的问题是字母大小写敏感,例如文件Hello.c和文件bello.c在Linux下不是一个文件,而在Windows下则表示同一个文件。