当前位置: 首页 > news >正文

建设上海公司网站青海西宁做网站多少钱

建设上海公司网站,青海西宁做网站多少钱,潜江人才网官网,网站建设网络推广公司有哪些文章目录 一、前言二、认识硬件----磁盘1.基本介绍2.磁盘的存储构成3.磁盘的逻辑结构4.回归到硬件 三、文件系统1.划分2.Block group(1)Data blocks(2)inode Table(3)Block Bitmap(4)inode Bitmap(5)Group Descriptor Table(GDT)(6)Super Block 3.总结4.一些其他问题5.如何理解… 文章目录 一、前言二、认识硬件----磁盘1.基本介绍2.磁盘的存储构成3.磁盘的逻辑结构4.回归到硬件 三、文件系统1.划分2.Block group(1)Data blocks(2)inode Table(3)Block Bitmap(4)inode Bitmap(5)Group Descriptor Table(GDT)(6)Super Block 3.总结4.一些其他问题5.如何理解“目录” 一、前言 我们在前面已经知道了一个被打开的文件在操作系统中是以进程来创建一个struct file结构体来描述这个文件。这个结构体里面有文件的各种信息。 那么没有被打开的文件呢 如果一个文件没有被打开那么是在磁盘中存储的。 我们会比较关心以下几个问题 路径问题存储问题获取的问题属性文件内容效率 文件 文件内容 属性 --所以我们知道磁盘上存储文件 存文件的内容 存文件的属性 而文件的内容是使用数据块来存储 文件属性是用inode 所以Linux的文件在磁盘中存储是将属性和内容分开存储的! 就比如下图中test.c的文件属性和内容是分开来存储的 二、认识硬件----磁盘 1.基本介绍 在十几年前我们的电脑用的是磁盘也就是机械盘。 后来随着技术的进步我们用的都是固态硬盘了SSD 不过由于磁盘比较便宜所以现在企业用的还是磁盘。 磁盘是我们电脑唯一的机械设备也是一个外设所以注定了磁盘的效率一定低下 如下是一个光盘的图片 这种光盘它只有一面是光的另外一面是介绍信息的 如下是一些磁盘的照片 在这些磁盘中它的盘面两面都是光的也有好几张盘面 如下所示 当我们关机的时候这个磁头会停靠在下面的这个磁头停靠点。当磁盘加电以后盘面高速旋转。同时磁头也在来回左右摆动。 同时我们也要知道磁头是一面一个一个盘面有两个磁头上下各一个也就是说对于前面的蓝色图片中它应该有六个磁头 不过虽然他们一面一个但是这些磁头是整体移动。 还需要注意的是磁头和盘面不接触 不过对于这种磁盘不经摔有可能摔了之后磁头刮花了盘面导致数据丢失了。不过现在我们的电脑都是使用了固态硬盘一般不会出现这种问题。所以磁盘退出个人电脑是历史的必然 而且一旦磁盘有了灰尘由于高速运转也可能导致磁盘损坏所以磁盘还必须得在无尘环境。 这个磁盘它的表面看上去是非常光滑的实际是凹凸不平的。所以数据就是直接在盘面上存储的也就是说会通过这个硬件电路主板等一些设备会将数据导入到磁盘内部。所以我们的各种数据其实都是在盘面上以二进制进行存储的。 而我们的计算机只认识二进制所以盘面上存储的都是二进制。我们的这个磁盘叫做永久性存储介质。内存是掉电易失性介质 我们举一个例子吸铁石有两种极性。假设N设置为1S设置为0而且我们可以通过一些电气特性改变吸铁石的磁性。即改变南北极 也就是说我们可以将这个盘面看作一个由无数个小吸铁石组成的。当磁头移动的时候它可以通过电磁特性将南北极逆置这就相当于写入了一个1。如此一来磁头可以利用它的电气特性去写入人为定义好的01数据的。 如果未来我们想要销毁一个磁盘的数据我们可以去直接用火烧使其消磁不过这样成本太高了所以现在我们就是让磁盘的生产厂商从软件层面一件式写0或者写1去擦除掉数据。只要符合一定的标准即可。 2.磁盘的存储构成 如上图所示 磁盘中会以马达为中心向外辐射就会有很多半径不同的同心圆 同心圆是有宽度的就如同上图磁盘上的黄色一样。 如下所示的图中它只会在上面的绿色的同心圆上存储它具有宽度我们下面的这个图比较夸张中间白色的部分是不存储数据的。 它的数据就是在下图中所示的红色圈中的扇形区域中 这样的同心圆我们称之为磁道而磁道会被划分为一段一段的我们称之为扇区 即每一个磁盘都有很多个磁道构成而每个磁道又有很多个扇区组成。 磁盘被访问的最基本单元是扇区 ---- 512字节/4KB4KB不常见 这也意味着未来哪怕我们只想要改变一个数据我们都要将这512字节全部改掉。 也就是说我们可以把磁盘看作由无数个扇区构成的存储介质 所以要把数据存储到磁盘第一个解决的问题是定位一个扇区哪一面定位用哪个磁头,哪一个磁道哪一个扇区。 像在下图中我们这一堆盘片的同一个半径下就形成了柱面类似于磁道 而我们前面说过磁盘中盘面会快速移动磁头会左右移动这个过程本质就是定位磁道和柱面的过程磁头的左右自动就是在确定在哪个磁道上 一旦我们确定好了磁道和柱面磁头就不在左右移动了。 而一旦磁头不动了只剩下盘面在高速运转这个过程就是定位扇区的过程。 所以磁盘本身的效率就取决于磁头的左右移动以及盘片的转速。所以如果磁盘上的数据是无序的乱放着的势必会导致效率低下因为访问的次数变多了。这是因为运动越少效率越搞运动越多效率越低 所以我们软件设计上设计者一定要有意识的将相关数据放在一起。这样可以减少机械运动。 前面的这种磁道Cylinder,磁头Header,扇区Sector这种方式我们称之为CHS寻址方式这要我们有这三个参数就可以找到磁盘中的某个扇区了 3.磁盘的逻辑结构 如下是磁带的图片 这个磁带和磁盘一样都是一种存储介质。 对于这个磁带他物理上卷起来就有点类似于磁盘的同心圆一样。 这个磁带他物理上是一个圆形的不过我们可以将他扯出来即延展开逻辑上我们看他是线性的 也就是说我们可以将这个抽象为一个线性结构 . 而磁盘也一样它在物理上是一个圆形的但是在我们看来逻辑上也可以是一个线性的 比如磁盘有六面所以我们可以把他看作是这样的 而这个每一面都有很多的同心圆每个同心圆都是一个磁道 而每个磁道上都有很多的扇区 所以最终这个磁盘就会被抽象为以扇区为基本单位的数组 所以它的任意一个扇区都有下标 可是问题是磁盘只知道CHS 而此时我们已经有下标了所以我们可以用下标逆向的推出对应的CHS了注意里面和外面的扇区数量是一样的因为我们可以通过一些密度的方式去让大小虽然不一样但是容量是一样的 比如每个盘面2w个扇区 每个盘面有50个 每个磁道有400个扇区 假如当前我们是28888号扇区 我们先用28888/20000 1代表如果第一个是0号盘面那么此时处于1号盘面 然后28888%200008888代表是这个盘面中的第8888号扇区 8888 / 400 22 代表是第22号磁道 8888 % 400 88 代表是88号扇区 所以C磁道为22H磁头为1S扇区为88。所以这样物理地址即CHS地址就出来了。 而前面的28888是逻辑扇区地址即LBA地址。这样的话他们就可以自己去进行转化了。 以上就是对于磁盘理解的建模过程 4.回归到硬件 在我们的计算机中不仅仅CPU有寄存器其他设备外设也有磁盘也有。 磁盘以下几个寄存器比较常用控制寄存器数据寄存器地址寄存器状态寄存器 如下所示控制寄存器中可以存储r/w以便控制I/O方向数据寄存器可以从内存中读取数据等等地址寄存器用的就是LBA地址进行转化后找到在哪里进行读写 从而将最终向磁盘中写入数据最终状态显示出结果操作系统就可以根据状态寄存器里面的结果来进一步决定 三、文件系统 1.划分 假设我们现在我们现在的磁盘有800GB那么操作系统如何对这个磁盘空间进行管理呢 我们现在知道了操作系统可以使用LBA来访问扇区 那么我们怎么知道哪里存的是文件的属性哪里存的是文件的内容呢 我们知道我们现在有800GB我们知道有这么大是非常难以管理的所以我们要对其进行划分 所以既然800GB不好管理那么200GB就好管理了。以上的划分工作我们也称之为分区 而我们要分区这个是非常简单的如下所示只需要定义好起始和结束即可 struct partion {int start;int end; } struct partion part[5];所以我们只需要将着200GB的空间给管理好其他的空间都是一样的都可以这样去管理 但是这200GB也不是很好管理因为它也很大在这个分区中它的头部有一个Boot Block 这个Boot Block它通常会记录操作系统刚启动时候的信息起始分区在哪里结束分区在哪里。这个是与开机相关的东西。一般这个在第一个盘面的0号磁道的0号扇区处放着在一些其他的分区头部有时候也会有。在其他分区的头部也会有的原因是防止磁盘这里的数据丢了导致操作系统挂了这样在一些其他分区的头部也有一份以便这个数据丢失以后可以直接去拷贝一份利用修复工具去修复。 不过这个Boot Block并不是一个重点因为它是与开机相关的在我们的职业生涯中服务器基本不会关机的。 除了第一个东西以外剩下的东西是由无数个Block group组成的。即划分为了很多个Block group 假设每一个Block group有10GB,那么只要我们将每一个Block group给管理好了那么所有的10GB都可以管理好进而200GB就可以管理好进而整个磁盘就可以管理好了 所以我们现在的问题就进一步转化了为对这个10GB的研究 上面的这种思想就是分治的思想 2.Block group 在如下所示的分区中 第一个Super Block(SB)描述的是文件系统的信息 第二个Group Descriptor Table(GDT)描述的是分组的情况 剩下的四个字段都是存储数据和属性的内容了 (1)Data blocks 首先是Data blocks它是存文件内容的的区域比如它有15000个扇区它会将这么多扇区以块的形式呈现出来。即磁盘认为访问的最小单位是扇区但是文件不一定这么认为它可以被设置为102420484096。常见的是4KB大小它被称为文件系统块大小 就比如说我们要创建一个新文件哪怕我们只在这个文件中写入一个字节的内容在文件系统中都要在某一个分区中找到某一个块组在这个块里面申请一个块这个块必须是4KB也就是要把连续的八个扇区拿出来。 所以说在磁盘上访问的最小单位是512字节但是在操作系统上他是以4KB为单位进行块级别的去访问的从我们的磁盘当中把磁盘调入到内存以4KB方式进行调入当他写到磁盘时也以4KB方式来进行写入。 我们可能会觉得这个比较浪费但是其实还好因为任何一个文件只有最后一个块才会产生浪费 一般而言每一个块只有自己的数据 同时这个Data blocks是我们整个Block group块中占据最大的那一部分 其次就是inodeTable比较大剩下的都比较短 (2)inode Table 第二个是inode Table inode是单个文件的所有的属性一般大小是128字节 也就是说所有文件的属性都在inode里面存储所有的文件内容都在Data block里面存储。 一般而言一个文件一个inode 所以我们这里会有很多个inode 当我们在打开文件的时候首先读取到的肯定是inode 而这里有很多个inode所以每个inode有唯一的编号 一般而言每个文件可能会占用很多个块所以当它有多个块的时候占了哪些块也算是文件的属性所以这个inode和数据块一定会建立某种对应的关系 所以这里也再次印证了我们之前所说的Linux的文件在磁盘中存储是将属性和内容分开存储的 我们可以将inode想象成一个结构体它里面存储着文件的属性 struct inode {//文件的所有属性 };我们需要知道的一个事实是在Linux中文件的属性不包含文件的名称 如果我们要查一个文件的inode,我们可以用ls -li就可以看到这个i代表的就是inode 所以在Linux里标识文件其实用的是inode编号而不是文件名 那么现在我们已经有了inode了如何找到对应的数据块呢 其实在我们的inode结构体里面是这样的 #define NUM 15 struct inode { inode number;文件类型权限引用计数拥有者所属组ACM时间int block[NUM]; //NUM随操作系统的不同而不同 };有了上面的这个block数组以后我们就可以将每个文件所用到的数据块的编号这个数字一次填到这个数组里。 然后就建立了属性和文件的对应关系 根据数组里面的块号就可以直接将文件的内容读出来了 不过我们可能会好奇一个块只有4KB而我们只有15个块难道一个文件最大只能由60KB吗当然不是的 如下图所示中其实如果是15个大小的数组的话那么前12个就是直接索引第13和第14个是间接索引两级索引 即如下图所示他会认为这里所指向的内容并不是文件的内容而是继续存储文件的块号。利用这个块号继续索引其他块 而第十五个块号存储的是三级索引也就是说它指向的块号是用来存储二级索引的 最终经过inode的映射就可以找到对应的文件内容 (3)Block Bitmap 假设我们这个Data bolcks里面由20000个块 我们知道申请一个块和创建一个块是比较常见的动作 所以我们怎么知道那些块被使用哪些块没有被使用呢 如果我们由20000个块所以我们就有20000个比特位 所以比特位的位置和块号映射起来比特位的内容表示该块有没有被使用 所以删一个文件的时候用不用把块文件内容清空呢 其实是不用了我们只需要把对应位图的编号内容置0即可。 (4)inode Bitmap 同理像Block Bitmap一样我们要知道哪一个inode有没有被占用 所以用这个inode Bitmap可以将比特为的位置和inode编号映射起来比特位的内容是inode是否是有效的 所以我们删除一个文件只需要去考虑Block Bitmap和inode Bitmap即可与后面的内容和属性没有任何关系 (5)Group Descriptor Table(GDT) GDT描述的是整个分组的基本使用情况 如Block Bitmap,inode Bitmap等使用情况 整个分组的使用都由GDT来统一管理 (6)Super Block Super Block它表示的是文件系统的基本信息 它称之为超级块 它有个基本特点它描述的是整个分区的文件系统的基本情况虽然这个Super Block是在这个组里面的。但是它表示的是分区的基本情况 比如下图中Super Block衡量的是这200GB的基本情况 Super Block代表的是文件系统的基本信息里面包含的是整个分区的基本使用情况。 比如一共有多少个组每个组的大小每个组的inode数量每个组的block数量每个组的起始inode,文件系统的类型与名称等 那么每个组都有Super Block吗 其实不是的Super Block不会在也不必在每个组里存在。 不过Super Block会在系统里存在多份。 这是为了防止该组的Block Group挂掉了各个组的边界都消失了最终导致这200GB的分区都挂掉了。 那么操作系统怎么知道哪个块有Super Block呢其实是有一个魔数的东西 3.总结 每一个分区在被使用之前都必须提前先将部分文件系统的属性信息提前设置进对应的分区中方便我们后序使用这个分区或者分组 上面这个过程其实也是格式化 这个过程也有点类似于先描述好属性的信息然后再组织好文件。 我们可以看到某个文件的属性信息 4.一些其他问题 首先我们要知道 在Linux系统中一个文件一个inode每一个inode都有自己的inode编号inode的设置是以分区为单位的不能跨分区 inode表示文件的所有属性但是文件名并不属于inode内的属性 那么 新建一个文件系统要做什么 删除一个文件系统要做什么 查找一个文件系统要做什么 修改一个文件系统要做什么 首先当我们新建一个文件的时候一定会在某一个路径下创建它是可以确认在哪一个分区里面的。 一旦确认在哪个分区了在整个分区上去分配inode 而整个分区上比如说第0组是110000,第二组是1000120000 比如说我们用Block group 0 于是就用它获取一个inode编号。 只需要查GDT,先发现它的使用率很低还有很多的inode,然后去扫面inode Bitmap去位图中扫描对应的编号。找到最小的那个即可。 比如说是10005个inode我们就可以很方便的确认是第二个组里面 然后我们将对应的位图置为1即可 最后在对应的inode Table里面将对应的文件属性一填写。 至此这个文件就新建成功了 当我们想要去文件写入的时候先确认写入数据量的大小然后去遍历这个Block Bitmap去找到没有使用的块找到块号之后直接将块号填写到对应的属性之中 然后再次跳转过去将文件内容写入进去 至此文件就写入成功了 如果要删除某一个文件 我们是一定知道它的目录的也就知道他是处于哪一个分区的 我们也一定知道它的inode的。 我们根据inode的范围确认它是哪一个分组的 然后就可以减去前面已经有的inode的值 然后我们去找到对应的inode里面的数据块表然后根据这里面的块号去修改对应的Block Bitmap将对应的内容由1置为0即可。这样的话对应的数据内容就删除掉了 然后就可以直接再inode Bitmap中去索引了然后我们就只需要将这个比特位由1置为0即可 所以我们的删除只是删除对应位图中的数据 所以下载就会很慢但是删除却很快 所以说删除其实等于允许被覆盖 所以查找一个文件也很简单 我们只需要去找到对应的位图结构中去看该inode是否有效 有效则进一步inode Table里找到对应的inode把对应的属性全拿出来。 然后通过里面的数组找到对应的数据块将里面的数据拼接好交给我们 这样就把文件打开了 就好比下面的例子中 我们查看test.txt的内容就是先根据它当前的路径确定再哪个分区然后根据inode去找到对应的Block group,最后找到对应的inode然后从inode里面的该数组中找到对应的数据块内容最后将数据块的内容加载到内容中。 如下面的例子 当我们去查看某个文件的信息的时候也是一样的先确定分区然后找到对应的Block group,最后从inode Table中找到对应的inode结构体然后打印对应的内容。 如果我们要修改文件 比如修改属性那么也要通过inode从而找到对应的inode属性数据块 找到之后直接进行更新即可 如果是要修改文件内容 比如是新增那么也要找到inode然后找到对应的数据块如果不够就再申请一个数据块然后往数据里面一填写即可 如果要删除直接去将inode里面数组的数据块下标所对应的Block Bitmap给清空即可 5.如何理解“目录” 以上所有的问题都得到了解答现在所有的问题都指向了一个问题。 我们知道inode里面是没有文件名的那么我们要获取一个文件名的时候是先要文件名还是先要inode。即我们怎么知道一个文件的inode 我们使用者从来没有关心过inode用的永远都是文件名 所以文件名和inode一定会产生某种关系 我们需要理解“目录” 那么目录是文件吗 目录肯定是文件它也有自己独立的inode目录也要有自己的属性。 那么目录有内容吗 我们知道文件 内容 属性 那么目录一定有内容 那么目录要不要数据块呢 当然目录也要有数据块 那么目录数据块里面放什么呢 它里面存放的其实是 该目录下文件的文件名和对应文件的inode映射关系 所以当我们使用ll指令的时候 我们需要先找到该目录文件的inode结构体 所以我们就能从数据块中找到对应的文件名和inode对应的关系 然后就能找到对应的文件了最后对接上前面的部分了 所以我们就知道了 为什么同一个目录下不能有同名文件因为目录里面的数据块是一共KV结构K不能重复目录下没有w,我们无法创建文件因为无法将对应文件的文件名和inode映射关系写入数据块中目录下没有r我们无法查看文件因为没有r我们无法访问数据块拿不到文件名和inode的映射关系目录下没有x我们无法进入这个目录当我们要进入一个目录的时候本质就是把这个目录的inode找到以后然后将我们当前的环境变量做出更新可是现在我们可以加一个判断不让将这个目录拼接到环境变量中不让更新环境变量 可是目录是文件也有inode编号我们怎么知道目录的inode呢 我们知道我们当前的目录的inode本质也是上一级目录的文件。所以我们可以去访问上一级目录去找到它的inode。 最终我们会一路向上找最终找到根目录。 根目录对应的文件名是确定的。 所以访问任何文件都需要通过路径来进行访问。 不过这样我们可能会觉得很慢因为要一路递归下去。 这样确实很慢所以Linux会将我们曾经访问过的常见的目录都放在一个dentry缓存中需要用的时候直接从缓存中拿而不用直接读盘了。
http://www.pierceye.com/news/135959/

相关文章:

  • 推广自身网站升级的网站显示什么
  • 网站与系统对接图文方案免费可信网站认证
  • 深圳设计网站速成班网站音频播放器代码
  • 域名注册最后是网站wordpress手机上传图片插件
  • 有哪些网站交互效果做的好的如何让google收录网站
  • wordpress到服务器配置云南seo
  • 常见网站安全漏洞行业网站如何推广
  • 网站开发实战项目苏州行业网站建设费用
  • 大团企业网站制作东莞网站制作的公司
  • 石家庄做网站公司的电话网站建设费用大概多少
  • 襄阳市网站建设怎么注册工作邮箱
  • 在百度里面做个网站怎么做的摄影大赛官网
  • 网站建设需要哪些的ps网站策划
  • 网站维护的意义上海知名进出口贸易公司
  • 青岛中小微企业互联网站建设补贴微信小程序怎么发布上线
  • 贺州做网站哪家公司温州移动网站建设服务商
  • 网站变灰兼容代码北京计算机培训学校
  • 网站导航包括海拉尔网站建设+网站设计
  • flashfxp 上传网站佛山哪里有网站开发
  • qq互联 网站开发济南建设集团有限公司官网
  • 网站开发兼职网站学校网站构建
  • 简约网站后台媒体网站开发
  • 广东营销网站建设网页设计理念及设计思路
  • 咋自己做网站桂林生活网官网首页
  • 电子商务网站建设的展望自己做壁纸的网站
  • 国外h5建站网站建设方案总结评语
  • 百度开放平台白城整站优化
  • 搜狗整站优化广州市网站建站
  • 最方便建立网站北京定制网络营销收费
  • 烟台放心的一站式网站建设桐梓网站建设