银行网站模板免费下载,做网站需要用什么开发软件,网站开发语言比较,学院网站建设项目一.认识硬件–磁盘
1. 物理结构 1.2 存储结构 ❓如何定位⼀个扇区呢#xff1f;
可以先定位磁头#xff08;header#xff09;——》确定磁头要访问哪⼀个柱⾯(磁道)#xff08;cylinder#xff09;——》 定位⼀个扇区(sector)。
柱⾯#xff08;cylinder#xff09…一.认识硬件–磁盘
1. 物理结构 1.2 存储结构 ❓如何定位⼀个扇区呢
可以先定位磁头header——》确定磁头要访问哪⼀个柱⾯(磁道)cylinder——》 定位⼀个扇区(sector)。
柱⾯cylinder磁头head扇区sector显然可以定位数据了这就是数据定位(寻址)⽅式之⼀CHS寻址方式。 1.3 逻辑抽象 我们知道磁带存储数据的结构是一个很长很长的带子我们可以把磁带“拉直”形成一个线性结构。 那么磁盘本质上虽然是硬质的但是逻辑上我们可以把磁盘想象成为卷在⼀起的磁带那么磁盘的逻辑存储结构我们也可以类似于 这样每⼀个扇区就有了⼀个线性地址(其实就是数组下标)这种地址叫做LBA ❓为什么扇区大小不均匀的但是LBA地址是均匀
——》因为磁道是从中间向外辐射的所以里面的磁道有多少个扇区外面的磁道就有多少个扇区只不过里面磁道的扇区会小一点扇区大小不均匀 但其实可以通过调整密度来变得均匀里面的01序列稠密一点外面的稀疏一点
二.文件系统
通过逻辑抽象我们可以把对扇区的地址抽象成线性的LBA地址整个磁盘都可以被抽象是成一个一维数组。
但是具体磁盘有多大呢已经用了多少扇区哪些扇区还没被使用哪些扇区存的是属性哪些扇区存的是内容要往哪个扇区去写入——诸如以上问题注定了我们的操作系统必须想办法把磁盘空间组织起来
操作系统如何对磁盘空间进行管理❓ ❗ inode存放的是文件的属性Block存放的是文件的内容在Linux文件系统中文件的属性和内容是分开存储的
2.1 inode 我们知道文件 属性 内容属性也是数据要管理这些数据就要以结构体的方式构建出来这些管理属性数据的结构体就是inode一个文件就有一个inodeinode就是属性数据的集合。 ❗ Linux系统里标记文件的唯一标识用的是inode且文件的属性中不包含文件的名称
❓如何在Linux查到每一个文件的inode编号 ls -li 2.2 Data Block ❗ Data Block存文件内容的区域以块作为最小单位块的大小常见的是4KB大小一般而言一个块只有自己的数据!
❗ 一个文件只有一个inode但如果是个大文件可能会有很多个块。所以在inode结构体内部会有一个block数组存储的是数据块的块号标识自己这个文件的内容占据了具体的哪一个数据块。注意inode的block数组存的只是块号而一个块号对应着一个Data Block4KB)。
2.3 BlockBitmap和 InodeBitmap InodeBitmap是一个位图每一个bit表示⼀个inode是否空闲可用。
BlockBitmap同样是个位图每一个bit记录着DataBlock中哪个数据块已经被占⽤哪个数据块没有被占⽤
❓问题1 为什么我们下载一个文件需要很久但是删除的时候却很快呢
❗删除一个文件的时候并不会把块文件内容清空而仅仅只是把对应比特标志位给修改了表明该块是空闲可用的。
❓问题2如果我们想恢复一个被删除的文件要怎么办呢
❗ 如果我们不小心误删的一个文件如果这个文件很重要最好的办法就是什么都不做然后找专业的人去恢复一般来说恢复其实就是得找到该文件的inode编号比如通过Linux的日志信息找到被删文件的inode但是具体怎么恢复得依靠一些专业的东西因为虽然内容还在但是他的位图信息表明是可以被使用的所以你如果乱操作可能会导致文件内容被覆盖。
2.4 SuperBlock
存放⽂件系统本⾝的结构信息描述整个分区的文件系统信息。记录的信息主要有bolck和inode的总量未使⽤的block和inode的数量⼀个block和inode的⼤⼩最近⼀次挂载的时间最近⼀次写⼊数据的时间最近⼀次检验磁盘的时间等其他⽂件系统的相关信息。SuperBlock的信息被破坏可以说整个文件系统结构就被破坏了
❗格式化就是写入空的文件系统
2.5 GDTGroupDescriptorTable
块组描述符表描述块组属性信息整个分区分成多个块组就对应有多少个块组描述符。每个块组描述符存储⼀个块组的描述信息如在这个块组中从哪⾥开始是inodeTable从哪⾥开始是Data Blocks空闲的inode和数据块还有多少个等等。块组描述符在每个块组的开头都有⼀份拷贝。
三.深刻理解文件系统下目录文件
3.1 对文件操作os怎么做
❓新建和删除文件在文件系统的角度下os到底是怎么做的
❗1️⃣新建文件OS会在某个路径下去创建路径帮助我们确定在哪一个分区——》读取了超级块后确定了一个block然后通过查该block的GDT知道该分区的inode还有很多没有被使用——》于是到inodebitmap位图结构里找到了没有用过的inode然后分配给该文件——》分配好之后把自己的属性往里面填这样就算新建成功了
❗如果还打算写入的话先确认一下要写入内容的大小确定一下需要几个块然后到blockbitmap里面找到没被使用的块把块号填到inode结构体里面的block数组里然后再把文件内容写进这些块里面。
❗2️⃣删除文件先找到分区再找到inode然后把对应inodebitmap和blockbitmap的位置置0。其实文件还在只不过对应的块可以被覆盖。
❓但是我们会发现一个问题就是在文件系统的角度下os无论对文件进行怎样的操作都要取到对应的inode号进而才能对其操作但是我们在对文件进行操作的时候可从来没有关心过indoe号啊我们对文件操作向os提供的是文件的地址os是怎么根据文件的地址知道文件的inode的
❗回答这个问题必须先了解文件系统下的目录。
3.2 目录文件
首先要明白一个事实那就是目录也是文件也有自己的inode 也是有内容属性构成
❓但是我们知道目录文件跟普通文件不同的是目录文件没有所谓的文件内容的那目录文件的文件内容存的是什么
❗有内容就要占据数据块目录有自己的数据块其中数据块存储的就是在当前目录下的文件和其inode值的映射关系
我们可以借助这一结论回答很多问题提升我们对文件的理解
❓疑问1在同一目录下为什么不允许有同名文件
❗因为文件名和inode是key和value的关系通过文件名找到inodekey值必须唯一。
❓疑问2为什么没有w权限无法创建文件
❗没有w权限意味着我们就无法将文件名和inode的映射关系写进去因此无法创建文件。
❓疑问3为什么没r无法查看文件
❗没有r权限着意味着我们也看不到文件名和inode的映射关系找不到inode就找不到文件也就找不到文件的内容。
❓疑问4为什么没有x无法进入目录
❗x意味着没有操作权限要进入一个目录必须cd目录名并且将当前目录名更新到环境变量PWD中所以无法进行该操作的话我们就无法进入。
3.3 路径解析
❓问题打开当前工作⽬录文件查看当前⼯作⽬录⽂件的内容?当前⼯作⽬录不也是⽂件吗我们访问当前⼯作⽬录不也是只知道当前⼯作⽬录的⽂件名吗要访问它不也得知道当前⼯作⽬录的inode吗
❗所以也要打开当前⼯作⽬录的上级⽬录类似递归需要把路径中所有的⽬录全部解析出⼝是/根⽬录。 ❗⽽实际上任何⽂件都有路径访问⽬标⽂件⽐如: /home/lvision/code/test/test/test.c都要从根⽬录开始依次打开每⼀个⽬录根据⽬录名依次访问每个⽬录下指定的⽬录直到访问到test.c。这个过程叫做Linux路径解析。
四.深刻理解软硬链接
4.1 硬链接
4.1.1 如何建立硬链接
ln a[源文件] b[硬链接名字]4.1.2 如何理解硬链接
我们知道真正找到磁盘上⽂件的并不是文件名inode。其实在linux中可以让多个文件名映射同⼀个inode而这些新建立的,对indoe建立的映射关系,的文件就是硬链接。
硬链接不是一个独立的文件因为他没有独立的inode Hardlink和myfile.cc的链接状态完全相同他们被称为指向⽂件的硬链接。内核记录了这个连接数inode 650257 的硬连接数为2。 我们在删除⽂件时干了两件事情1.在目录中将对应的记录删除2.将硬连接数-1如果为0则将对应的磁盘释放。
硬链接应用场景通常用来做路径定位可以通过硬链接进行目录切换
4.1.3为什么Linux不允许对目录建立硬链接
如果对目录建立硬链接就可能会出现这样的情景 ❓可是目录内部不是有. 和 … 的硬链接他们不是目录的硬链接吗 . 和 … 是操作系统创建的操作系统提前规定好了 .和…不会被做搜索这是强制规定的所以不会有环的问题 操作系统给我们. 和 … 我们就可以用相对路径去访问文件了可以在一些情境中不必用很长的绝对路径去访问文件。
4.2 软链接
4.2.1 如何建立软链接 ln -s a[源文件] b[硬链接名字] 4.2.2 如何理解软链接
软连接是一个独立的文件有独立的inode也有独立的数据块 他的内容里面保存的是指向的文件的路径。相当于windows的快捷方式 应用场景快捷方式