《深入理解linux内核》读书笔记 -- 第一章 绪论


0.1991年,Linus Torvalds开发出最初的linux。

1.Linux最吸引人的一个优点就在于它不是商业操作系统,它的源代码在GNU公共许可证GPL(General Public License)下是开放的。

2.linux有以下特点:

单块结构的内核,相对于微内核而言。

Linux对模块的支持是很好的,因为它能自动按需装载或卸载模块。

Linux以一种十分有限的方式使用内核线程来周期性地执行几个内核函数。

Linux定义了自己的轻量级进程(LWP),把轻量级进程当作基本的执行上下文,通过非标准的clone()系统调用来处理他们。

当采用“可抢占的内核”选项来编译内核时,Linux2.6可以随意交错执行处于特权模式的执行流。

Linux2.6以几乎最优化方式使用SMP(对称多处理器)。

3.与商用竞争对手相比,Linux有如下优势:
免费
所有成分都可以充分的定制
可以运行在低档,便宜的硬件平台上
强大,高效
开发者都是出色程序员,系统稳定
内核非常小,而且紧凑
与很多通用操作系统高度兼容
很好的技术支持

4.硬件的依赖性
Linux试图在硬件无关的源代码与硬件相关的源代码之间保持清晰的界限。为了做到这点,在arch和include目录下包含了23个子目录,以对应Linux支持的不同硬件平台。包括:arm,i386,ia64,米拍摄,ppc,x86_64等等。

5.Linux的版本

内核的版本号主要有四个数组组成。比如版本号:2.6.26.1  其中,

2  - 主版本号

6  - 从版本号或副版本号

26 - 修订版本号

1  - 稳定版本号

副版本号表示这个版本是稳定版(偶数)还是开发版(奇数),上面例子中的版本号是稳定版。

稳定的版本可用于企业级环境。

修订版本号的升级包括BUG修正,新的驱动以及新的特性的追加。

稳定版本号主要是一些关键性BUG的修改。

操作系统基本概念
6.多用户系统:
能并发和独立地执行分别属于两个或多个用户的若干应用程序。

7.用户和组:
所有的用户由一个唯一的数字来标识,这个数字叫用户标识符(UID),每个用户是一个或多个用户组的一员,组由唯一
的用户组标识符(user group ID)标识,每个文件与一个组对应。每个文件可以针对文件的所有者,文件所有者所在的同组的其他
用户以及非同组的其他用户分别设置可读可写和可执行的权限,具体可以参见ls -l命令的第一列的含义。
任何类unix操作系统都有一个特殊的用户root,即超级用户。

8.进程:
程序执行时的一个实例,或者一个运行程序的执行上下文。程序和进程的区别:几个进程能并发地执行同一个程序,而同一个
进程能顺序地执行几个程序。

9.内核体系结构:

单内核与微内核的比较见下表:

单内核和微内核


原理

优势

劣势

单内核

整个内核都在一个大内核地址空间上运行。 1. 简单。
2. 高效:所有内核都在一个大的地址空间上,所以内核各个功能之间的调用和调用函数类似,几乎没有性能开销。
一个功能的崩溃会导致整个内核无法使用。

微内核

内核按功能被划分成各个独立的过程。每个过程独立的运行在自己的地址空间上。 1. 安全:内核的各种服务独立运行,一种服务挂了不会影响其他服务。 内核各个服务之间的调用涉及进程间的通信,比较复杂且效率低。

Linux的内核虽然是基于单内核的,但是经过这么多年的发展,也具备微内核的一些特征。(体现了Linux实用至上的原则)

主要有以下特征:

  1. 支持动态加载内核模块
  2. 支持对称多处理(SMP)
  3. 内核可以抢占(preemptive),允许内核运行的任务有优先执行的能力
  4. 不区分线程和进程

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.进程间通信:信号量,消息队列,共享内存




你可能感兴趣的:(linux)