深入理解Linux内核 学习笔记(1)

时间:2022-09-26 09:15:14

1.用户和用户组

每个用户是一个或多个用户组的一名成员,组由唯一的用户组标识符(user group ID)标识。每个文件的相关权限也恰好与一个组相对应。

root为超级用户,

2.模块

为了达到微内核理论上的很多优点而又不影响性能, Linux内核提供了模块(module)。模块是一个目标文件,其代码可以在运行时链接到内核或从内核解除链接。这种目标代码通常由一~组函数组成,用来实现文件系统、驱动程序或其他内核上层功能。与微内核操作系统的外层不同,模块不是作为一个特殊的进程执行的。就向是一个静态链接的内核函数-样,代表当前进程在内核态下执行。

3.文件目录

路径名由斜杠及- -列指向文件的目录名交替组成。如果路径名的第一个字符是斜杠,那么这个路径就是所谓的绝对路径,因为它的起点是根目录。否则,如果第- -项是目录名或文件名,那么这个路径就是所谓的相对路径,因为它的起点是进程的当前目录。

当标识文件名时,也用符号“."和“.”。 它们分别标识当前工作目录和父目录。如果当前工作目录是根目录,“.”和“.." 就是一致的。

4.硬链接和软连接

硬链接ln P1 P2,不允许对目录,不允许对不同种文件系统

软链接 ln -s P1 P2。

软连接只记录了链接文件的目录关系,硬链接相当于复制了一份文件,之后的文件修改也会对硬链接文件同步进行

5.文件类型

Unix文件可以是下列类型之一:

普通文件(regular file)

目录

符号链接

面向块的设备文件(block -oriented device file)

面向字符的设备文件(character- oriented device file)

管道(pipe) 和命名管道(named pipe) ( 也叫FIFO)

套接字(socket)

6,特殊线程

内核线程:运行在内核地址空间,不与用户交互,通常在启动时创建一直活跃直到系统关闭。

7.可重入内核

内核要是可重入的,即内核运行程序当需要磁盘请求时,可以让磁盘控制器去处理请求并恢复执行其他进程,然后等处理完再回来执行这个进程。

管只修改局部变量不改全局的

RAM的三个功能:

满足内核对缓存、描述符及其他动态内核数据结构的请求。

满足进程对一般内存区域的请求及对文件的内存映射的请求。
用高速缓存的方法从磁盘及其他缓神设备获得较好的性能。

 

RAM是有限的,必须在请求类型之间平衡。临界极限时可用页框回收算法。虚拟内存必须解决的一个主要问题是内存碎片。

内核内存分配器(KMA)应有特点:

必须快。实际上,这是最重要的属性,因为它由所有的内核子系统调用(包括中断处理程序)。

必须把内存的浪费减到最少。

必须努力碱轻内存的碎片(fragmentation) 问题。

必须能与其他内存管理子系统合作,以便借用和释放页框。

算法:

资源图分配算法( allocator)

2的幂次方空闲链表

McKusick- Karels分配算法

伏伴{Buddy)系統

Mach的区域(Zone)分配算法:

Dynix分配算法

Solaris的slab分配算法

脏缓冲区的概念:(内存中)缓冲区内容与对应磁盘块的内容不一样

设备驱动程序: 可以把设备的代码写成模块,动态装入内核,通过接口规范增加设备,不用时也可以卸载该模块