Linux最大的亮点就是开源,你可以下源它的所有源代码,仔细品。Linux内核是最重要的一个部分。其次,它必须运行大量其他软件来向用户提供这个有用的环境。很多linux发布版都将Linux源代码安装在/usr/src/linux这个目录下。Linux是一个庞大的、复杂的单块结构的内核,大多数商用的Unix也是单块结构的,也有例外的,如Apple的Mac OS,它遵循微内核的方法。
Linux可以按需动态地加载和卸载部分内核代码,通常这部分代码叫做模块。Linux内核线程是一个能被独立调度的执行环境。线程之间的上下文切换比普通进程之间的上下文切换所花费的代价要小得多,因为线程通常同一个地址空间执行。Linux会以一种有限的方式周期性地去执行少量的几个内核函数。
一个多线程用户程序由很多轻量级进程组成,它些轻量级进程可以对共同的地址空间、共同的物理内存页、共同的打开的文件进行操作。Linux对于多线程应用程序的支持也是如此,它定义了属于自己的轻量级进程,Linux把轻量级进程定义为基本的执行上下文。
Linux可以在编译出抢占式内核或非抢占式内核,通过设置相应的选项来指定。Linux的文件系统也是相当的丰富。
Ext2文件系统一般就满足大数需要,Ext3对于系统崩溃后要做大量的文件检查的情况更友好。要做处理大量小文件的话,ReiserFS是最佳选择。
另外,提醒一点,Linux并没有像大部分的商业Unix内核那样包含了SVR4引入的STREAMS I/O子系统。据说这个东西只是为了搞钱而已。
Linux很强大,它的目标就是不断地提高系统的运行效率。Linux支持很多硬件平台:
- alpha:据说已经不生产了。HP的工作站。
- arm:这个我们最熟悉了,很多移动设备、嵌入式设备都在用它。
- cris:代码精简指令集CPU
- frv:日本富士通公司的处理器,用在嵌入式设备上的
- h8300: 日立公司的RISC微处理器
- i386: IBM公司的CPU用在个人PC上的
- ia64:安腾微处理器,用在工作站上
- m32r:瑞萨科技的微处理器
- m68k:摩托罗拉的微处理器,用于个人PC
- mips:mips微处理器,用在硅谷图形公司的工作站上
- parisc:HP公司的微处理器,用于工作站上
- ppc、ppc64: 如果我没有错的话,是摩托罗拉与IBM合作的微处理器
- s390:IBM的大型机用的CPU
- sh、sh64:日立与意法半导体合作的微处理器,用于嵌入式系统
- sparc、sparc64:Sun公司的微处理器,用于工作站
- v850:基于哈佛结构的RISC核心的微控制器
- x86_64: 最出名的AMD和Intel的微处理器
当计算机开机后,Linux内核就会被加载到内存中。一般,大家都会将操作系统与linux内核看成是一样东西。其实这东西也不用分得太清。作为操作系统,主要是做两件大事,一是与硬件打交道,二是为应用程序提供运行环境。
那么用户程序想用硬件时,它必须向操作系统提出申请(系统调用),Linux内核会对这个申请进行评估,如果允许的话,内核就会去与相关的硬件进行交互。用户程序是禁止与硬件直接打交道的,为了做到这一点,硬件为CPU至少要引入两种模式:用户的非特权模式(用户态)和内核的特权模式(内核态)。
现在的操作系统都是支持多用户的。即在一个机上能并发和独立地执行分别属于两个或多个用户的若干应用程序。多用户操作系统的特点,如下:
- 它必须要有一套认证机制来核实用户身份
- 它必须提供一套保护机制来防止错误的应用程序影响到其他应用程序
- 它必须提供一套保护机制确保有恶意的用户程序不能够干涉或窥探其他用户程序
- 它必须提供一套机制来分配给每个用户的资源数。
为了能够有效提供如上机制,Linux内核必须利用CPU特权模式相关硬件保护机制。否则用户程序将有可能直接访问系统电路并克服这些施加在它身上的限制。
在多用户系统中,每一个用户在Linux操作系统上都有自己的私有空间,所有Linux必须能够保证用户空间的私有,不能被其他用户可见。因此每一个用户在linux系统上都有一个唯一的标识,即用户标识符(User ID,UID)。为了能够与其他用户有选择地共享资料,每个用户是一个或多个用户组的成员,组由唯一标识符标识,即用户组标识符(user group ID,GID),每个文件也正好与一个用户组相对应,这样就达到共享文件资料的目的了。