Understanding Linux Kernel version 3 读书笔记
- P30, preemptive kernel 、kernel threading 和Multithreaded application support没太好理解,我想如果设计个多线程的程序来运行运行,恐怕就好理解了。搞清楚了!
- 在source code里面, arch和include是和硬件相关的代码,arch下面是architecture-specific的文件, include下面放的是内核的所有头文件,其中带有asm前缀的子目录里面是particular architecture的头文件。
- 从2.6版本开始,版本命名方式发生了变化,比如2.6.10和2.6.11看似很接近,但实则相差可能很大,甚至内部的关键部分甚至算法都会有很大不同。
- microkernel 和 monolithic kernel 目前体会不深。
- 关于hard link和soft link: 由于hard link有两个限制:(1)建立link的两个文件必须处于同一个文件系统里面;(2)还有就是不能对目录进行hard link。所以,就出现了soft link
- Unix的文件类型有:regular、symblic、directory、block-orient、character-orient、pipe and named pipe和socket。
- Each file has its own inode, which the filesystem uses to identify the file.
- 到1.5.5
- 文件系统存放在磁盘上。磁盘划分为若干个分区,每个分区中有个独立的文件系统。磁盘的0号扇区前446byte称为Msater Boot Record,该地区存放的是boot loader程序,用来引导计算机,后面64byte描述了该磁盘的分区信息,即每个分区表的开始和结束cylinder号,并且会标注其中某个分区是active分区。最后2byte是魔数0XAA55。对于每个分区,无论是否是active的,都从一个boot block开始。计算机在被引导时,BIOS读入MBR。MBR做的第一件事就是确定active分区,进而读入active分区的第一个块,也称boot block,并执行之。引导块中的程序将装载该分区中的操作系统。
- 认识磁盘:一个硬盘是有很多处于同心圆的圆形的磁片组成,每个磁片的正反两面(side)都可以记录信息。按不同半径画出的一个圆环称为磁道(track),每个track又划分为若干扇区(sector),每个扇区固定地只有512byte,磁头对磁盘的读写,就是以sector为最小单位的,值得注意的是,sector号在物理上并不是连续的,而是由所谓的“交叉因子”,目的是是磁盘的读取速度和磁头的旋转速度匹配。所有处于不同磁片但位于同一个半径的同心圆环称为柱面(cylinder),cylinder是每个分区(partition)的最小单位,连续的一组cylinder组成了一个分区。block是文件系统存取的最小单位,可以认为设定,一般是4K。因为一个block最多仅能容纳一个文件,所以block的大小涉及到磁盘空间的使用效率。block选得过大,存储取小文件时,容易浪费空间,block选取过小,容易造成磁盘的数目大增,从而造成inode在指向block时搜寻时间的增多。
- inode是记录文件的属性及其放置在哪些Block之内的信息。所以,每个文件都会占用一个inode。当Linux系统要查找某个文件时,它会先搜索inode table找到这个文件的属性及数据存放地点,然后再查找数据存放的Block进而将数据取出。inode数量在一开始已被设定好,其设定方式通常是"硬盘大小/一个容量",这个容量比Block大一些较佳,例如刚才将Block设为4K,那么这个容量可以设为8K左右。所以,一块1GB的硬盘如果以8K 大小划分它的inode数,则会有131072个inode。一个inode的大小为128Byte,这样,我们就可以清楚地知道,一个分区被格式化为一个文件系统之后,基本上它一定会有inode table与数据区域两大块,一个用来记录文件的属性信息与该文件存放的Block块,一个用来记录文件的内容。
创建一个文件后,会同时创建一个inode和一个block,inode存放的是文件的属性信息,但是不包括文件名,并存放所对应数据所在的block块的地址的指针;block存放文件的数据。
linux里文件的文件名、文件属性、文件内容是分别存储的:文件名存放在目录项(即dentry)中,文件属性存放在inode中,一般情况下,每个inode占用128Bity磁盘空间,文件内容存放在数据块中。
block块可以用mkfs.ext3 -b来制定快的大小。
block越大,inode越少,适合存储大文件的文件系统;block越小,inode越多,适合存储文件多而小的文件系统。
系统运行时,inode和block会在修改后内存与磁盘做一个同步,我们用ls -li列出来的内容这是内存中的暂存,所以有时候系统非正常的关机会导致block和inode的不同步问题。