zoukankan      html  css  js  c++  java
  • 开机流程+文件系统 笔记

    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来手动强迫写入磁盘。

    文件系统必须要挂载到目录树的某一个目录,才能够使用该文件系统。

  • 相关阅读:
    DEEP COMPRESSION小记
    python中join的用法
    Ubuntu下pycharm安装
    java.lang.ClassNotFoundException
    12种排序算法(转载)
    会场安排问题
    在GitHub上上传项目(转载)
    实现prim算法
    经典进程同步与互斥习题总结
    实现迪杰斯特拉算法
  • 原文地址:https://www.cnblogs.com/flintlovesam/p/5136677.html
Copyright © 2011-2022 走看看