开机流程+文件系统 笔记
1.BIOS:开机主动执行的固件,会认识第一个可开机设备,比如硬盘。
2.MBR:第一个可开机设备的第一个扇区内的主引导分区块,内含引导加载程序。
3.Bootloader:一支可以读取kernel文件来执行的软件。
4.kernel:开始操作OS的功能。
BIOS和MBR都是硬件本身支持的功能,至于Bootloader则是操作系统安装在MBR上面的一套软件。MBR仅仅446
字节,因此这个Bootloader是小而完美的。
主要有下面这些功能:
提供菜单:用户可以选择不同的开机选项。
载入kernel:直接指向可开机的程序区段来开始操作系统。
转交给其他Bootloader。
引导程序除了可以安装在MBR之外,还可以安装在每个分区的引导扇区。
BOOTLOADER提供两个菜单,第一个菜单可以直接加载windose的内核文件来开机;
第二个菜单可以将引导加载工作交给第二个分区的boot sector。当用户开机选择菜单二时,那么整个引导加载工作就会交给第二分区的bootloader。
第二个bootloader启动之后,只有一个菜单,因此就能够使用linuxkernel来开机。
总结:每个分区都有自己的启动扇区bootsector。实际可开机的内核文件是放置到各个分区内的。loader只认识自己分区内的可开机内核文件,以及其他的loader。loader可以直接指向或者间接将管理权交给另一个管理程序。
每一个分区可以被格式化为不同的文件系统。
文件系统通常会将这两部分的数据分别存放在不同的块,权限与属性放置到了inode中,至于实际数据则被放置到了data block块中。还有一个超级块super block来记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量。
superblock:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式和相关信息等。
inode:记录文件属性,一个文件用一个inode,同时记录此文件的数据所在的block号码;
block:实际记录文件的内容,若文件太大时,会占用多个block。
data block数据块在ext2中支持的文件系统大小有1,2,4kB对应这不同的单一文件限制和最大文件系统总容量。
原则上,block的大小与数量在各式花纹之后就不能够再改变了(除非重新格式化);
每个block最多只能放置一个文件的数据。
如果文件大于block的大小,则一个文件就会占用多个block。
若文件小于block,则该block的剩余空间就不能再被使用了。
例如 10000个小文件 每个50bytes 所有文件容量 50*10000=488.3KB,但是实际占用4046*10000=38.6MB。
inodetable(inode 表格)
inode的内容主要记录文件的属性以及文件实际数据是放在哪个block内。基本上,inode记录的文件数据至少是:
文件访问模式(read/write/excute);
该文件的所有者和组(owner/group);
文件大小;
该文件创建或者状态改变时间(ctime);
最近读取的时间(atime);
最近修改的时间(mtime);
定义文件的特性的标志(flag),比如SetUID等;
该文件真正内容指向(pointer);
inode文件的大小与数量已经在格式化时就已经确定。
每个inode文件固定大小128byte;
每个文件都金辉占用一个inode而已;
因此文件系统能创建的文件数量与inode的数量有关;
系统读取文件时先找到inode,并分析inode记录的权限与用户是否符合,若符合才能够开始实际读取block内容。
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。
表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:
首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。
ls -i 显示文件的inode号。
每个block group都可能含有super block,每个文件系统都仅有一个superblock,后续的block group若是含有super block主要是完成对第一个block group的备份。
File system description文件描述系统说明 这个区段可以描述每个block group的开始与结束的block号码,以及说明每个区段(super block,bitmap,inodemap,data block)分别位于哪一个block号码之间。
block bitmap如果你想要添加文件时总会用到block。就选择bitmap中那些标记为空的block。
inode bitmap记录未使用的inode号码。
当我们在linux的ext2系统建立一个目录时,ext2会分配一个inode和至少一个block给该目录。其中inode记录的是该目录的相关权限和属性,并可以记录分配到的那块block号码,而block则是记录这个目录下的文件名与该文件名占用的inode号码。目录下面的文件数目太多,linux就给与该目录多一个block来存储文件相关的记录。
当我们在ext2新建一个文件时,一个block为4kb 新建一个100kb的文件,则需要 25个+1个=26个block来存储该文件,由于inode仅有12个直接指向,因此还要多一个block来作为block作为块号码的记录。
如果我想读取/etc/passwd那么读取顺序是这样的,/的inode /的block etc的inode etc的block passwd的inode passwd的block。
linux文件系统的操作
如果你正在编辑一个很大的文件,所有数据都必须加载到内存,CPU才能读取,编辑过程中需要频繁写回磁盘,由于磁盘写入的速度要比内存慢很多,因此你需要经常等待硬盘的频繁写入/读取。因此linux使用异步读取来解决这个问题:
当一个文件加载到内存,如果这个文件没有被改动过,则在内存中文件数据就会被设置成clean的。如果改动了,就设置成dirty。此时所有数据还呆在内存中,并没有写入磁盘中。系统会不定期的将dirty的数据写回磁盘,以保持磁盘和内存数据的一致性。可用sync手动写入磁盘。正常关机系统会主动调用sync来手动强迫写入磁盘。
文件系统必须要挂载到目录树的某一个目录,才能够使用该文件系统。