0.1991年,Linus Torvalds开发出最初的linux。
1.Linux最吸引人的一个优点就在于它不是商业操作系统,它的源代码在GNU公共许可证GPL(General Public License)下是开放的。
2.linux有以下特点:
单块结构的内核,相对于微内核而言。
Linux对模块的支持是很好的,因为它能自动按需装载或卸载模块。
Linux以一种十分有限的方式使用内核线程来周期性地执行几个内核函数。
Linux定义了自己的轻量级进程(LWP),把轻量级进程当作基本的执行上下文,通过非标准的clone()系统调用来处理他们。
当采用“可抢占的内核”选项来编译内核时,Linux2.6可以随意交错执行处于特权模式的执行流。
Linux2.6以几乎最优化方式使用SMP(对称多处理器)。
内核的版本号主要有四个数组组成。比如版本号:2.6.26.1 其中,
2 - 主版本号
6 - 从版本号或副版本号
26 - 修订版本号
1 - 稳定版本号
副版本号表示这个版本是稳定版(偶数)还是开发版(奇数),上面例子中的版本号是稳定版。
稳定的版本可用于企业级环境。
修订版本号的升级包括BUG修正,新的驱动以及新的特性的追加。
稳定版本号主要是一些关键性BUG的修改。
单内核与微内核的比较见下表:
单内核和微内核
| 原理 | 优势 | 劣势 |
单内核 | 整个内核都在一个大内核地址空间上运行。 | 1. 简单。 2. 高效:所有内核都在一个大的地址空间上,所以内核各个功能之间的调用和调用函数类似,几乎没有性能开销。 | 一个功能的崩溃会导致整个内核无法使用。 |
微内核 | 内核按功能被划分成各个独立的过程。每个过程独立的运行在自己的地址空间上。 | 1. 安全:内核的各种服务独立运行,一种服务挂了不会影响其他服务。 | 内核各个服务之间的调用涉及进程间的通信,比较复杂且效率低。 |
Linux的内核虽然是基于单内核的,但是经过这么多年的发展,也具备微内核的一些特征。(体现了Linux实用至上的原则)
主要有以下特征:
- 支持动态加载内核模块
- 支持对称多处理(SMP)
- 内核可以抢占(preemptive),允许内核运行的任务有优先执行的能力
- 不区分线程和进程
Unix文件系统概述
10.Unix文件系统根目录名字为“/”,Unix的每一个进程都有一个当前工作目录。如果路径名的第一个字符是斜杠,那么这个路径就是
绝对路径,因为他的起点是根目录;否则,如果第一项是一个目录名或文件名,那么这个路径就是一个相对路径,因为他的起点是
进程的当前目录。“.”表示当前目录,“..”标识父目录。
11.硬链接:包含在目录中的文件名就是一个文件的硬链接,或简称链接。同一个文件可以有几个链接。
缺点:
1.不允许给目录创建硬链接,因为可能把目录树变成环形。
2.不能在不同的文件系统中创建链接
软链接:也称为符号链接,符号链接是一个短文件,包含另一个文件的一个路径名,路径名可以指向位于任意一个文件系统的任意
文件或目录,甚至指向一个不存在的文件。
12.Unix文件类型包含:普通文件,目录,符号链接,面向块的设备文件,面向字符的设备文件,管道和命名管道,套接字。
13.文件系统处理文件需要的所有信息包含在一个名为inode的数据结构中,每个文件都有自己的inode。inode包含如下信息:
文件类型,文件相关硬链接数,文件长度,设备标识符,inode号,文件owner的UID,文件的owner所在的用户组ID,几个时间戳
(inode状态改变时间,最后访问时间,最后修改时间),访问权限和文件模式。
14.文件操作的系统调用包括:open,lseek,read,write,close,rename,unlink。
Unix内核概述
15.一般情况下,一个程序运行在用户态(CPU处于用户模式),只能访问地址空间中的user space(低3G);当程序请求内核服务
时通过系统调用进入kernel mode,此时程序运行在内核态(CPU处于内核模式),此时可以访问所有地址空间(kernel space和
user space)。
16.Unix系统包含几个所谓的内核线程(kernel thread)的特权进程,有以下特点:
他们以内核态运行在内核地址空间;
他们不与用户直接交互,不需要终端设备;
他们通常在系统启动时创建,然后一直处于活跃状态直到系统关闭。
17.所有的Unix内核都是可重入的,即若干个进程可以同时在内核态下执行。
18.内核控制路径:内核处理系统调用,异常或中断所执行的指令序列。
19.信号量:一个数据结构相关的计数器。每个信号量由以下部分组成:
一个整数变量
一个等待进程的链表
两个原子方法:down和up
down方法对信号量减一,如果这个新值小于0,该方法就把正在运行的进程加入到这个信号量链表,然后阻塞该进程。up方法对信号量的值加1,如果这个新值大于或等于0,则激活这个信号量链表中的一个或多个进程。
20.自旋锁:自旋锁没有进程链表,当一个进程发现锁被另一个进程锁着时,他就不停地旋转,执行一个紧凑的循环指令直到锁打开。也就是所谓的忙等待(不释放CPU)。
自旋锁不适用于单处理器,因为他不释放CPU,也就无法等到另一个进程释放锁资源。
21.信号:signal提供了把系统事件报告给进程的一种机制。每种事件都有自己的信号编号。有两种系统事件:异步通告和同步错误或异常。POSIX标准定义了大约20种信号。进程可以以两种方式对接收到的信号做出反应:
忽略该信号
异步地执行一个指定的过程(信号处理程序)
22.进程间通信:信号量,消息队列,共享内存