更新于 

文件共享与保护

文件共享

操作系统为用户提供文件共享功能,可以让许多个用户共享的使用同一个文件。所以也意味着系统中只有一份文件数据,并且只要某个用户修改了该文件的数据,那么其他用户也可以看到文件数据的变化。如果是多个用户都“复制”了同一个文件,那么系统就会由好几份文件数据,其中一个用户修改了自己的那份文件数据此时并不会其他用户的文件数据造成影响。

基于索引节点的共享方式(硬链接)

我们知道,索引节点是一种文件目录瘦身策略,由于检索文件只需要文件名,所以其他的信息都存放到了索引节点中,这样目录项就只包括文件名和索引节点指针了,如下图:

索引节点中设置了一个链接技术变量count,用于表示链接到本索引节点的用户目录项。如果count=2,说明此时有两个用户目录项都链接到了该索引节点上也就意味着这两个用户共享这个文件。如果某个用户决定删除该文件,那么只需要把用户目录中与该文件对应的目录项删除即可,且索引节点的count值减1。只要count>0,就说明此时还有别的用户要使用这个文件,那么就不能把文件数据删除,否则就会导致目录项中索引节点指针悬空(NULL)。当count==0时就说明没有用户使用这个文件那么就可以删除了,操作系统会负责删除这个文件。

基于符号链的共享方式(软链接)

当User3访问ccc时,操作系统会判断文件ccc属于Link类型文件,那么就会根据其中记录的路径层层查找目录最终找到User1的目录表中的aaa表项,于是就找到了文件1的索引节点。

思考:这种链接方式的一种特点?

我们发现这种方式的链接会有如下情况发生:当User1的aaa目录项被删除了而此时User3的目录项ccc还没有删除时,那么即使ccc可以指向Link文件2,但是由于User1的aaa不存在了所以不能找到文件1了,所以此时ccc会出现无法找到文件的情况,即User3ccc访问文件是基于User1在存在文件aaa存在的前提下才能实现的。

总结

文件保护

这里我们介绍几种文件保护的具体做法。

口令保护

主要是用于保护文件,设置特殊口令,只有正确才可以访问。所以此时用户访求文件时必须提供正确的口令,口令一般会存放在文件对应的FCB活索引节点中,用户访问文件前需要输入口令,然后操作系统将口令和FCB中的口令做对比,如果正确则允许用户访问文件(那么FCB中的口令肯定是不允许普通用户随意获得的)。这种方式优点是保存口令的空间开销不多,验证口令的时间开销也很小,但是缺点是正确的口令存放在系统内部不够安全。

加密保护

使用某个密码对文件进行加密,在访问时需要提供正确的密码才可以进行正确的解密。那么密码肯定是有多种的,我们以一个最简单的加密算法–异或加密为例。假设用于加密/解密的密码为01001,那么:

上面这种方法确实做到了加密的作用,并且优点是保密性强,不需要在系统中存放正确的密码,缺点是编码/译码(加密/解密)需要花费一定的时间。

访问控制

为每个文件的FCB(或者索引节点)中增加一个访问控制表(Access-Control List,ACL),该表记录各个用户可以对文件执行那些操作。

精简的访问列表就是:以组为单位,标记各组用户可以对文件执行那些操作。如下表:

当某用户想要访问文件时,系统会检查该用户所属的分组是否有相应的访问权限。所以一般重要的OS内核文件肯定是不允许用户访问的即使是操作者。

总结

磁盘的结构

磁盘、磁道、扇区

磁盘的表面由一些磁性物质组成,可以用来存储二进制数据,所以磁盘不能被刮坏。这里我们讲解一下一个磁盘的具体结构术语。

上图就是一个磁盘,他会被等大分为许多扇形,每一个扇形就是一个磁盘块(前面讲过磁盘块存储的数据大小相同),这里的一圈就是磁道,越靠近内侧数据的密度就越大。

磁盘读/写数据方法

我们知道磁盘在被访问时会一直转动,所以就会一直切换不同的扇区即磁盘块,而右边的磁头就是从磁盘上滑过,但是他只会从里到外滑动,不会旋转转动,这样他想在某个扇区(磁盘块)进行数据的读写只需要等到磁盘转到指定扇区即可,即磁头主要是负责切换磁道。

盘面、柱面

为了高效,一般一个盘片的两面均可以存放数据,所以会有许多盘面。所以每一个盘面均对应着一个滑过的磁头,但是磁头是连在一起的所以共进退。这也就意味着一次只能有一个磁头到达他想要到达的位置对应着的就是(柱面号,盘面号,扇区号),柱面号就是规定了磁头将要访问的磁道,而盘面号规定的是此时是哪一个磁头访问这个柱面磁道的数据,扇区号就是访问盘面的哪一个扇面,其他的磁头如果没有到达所要访问的位置也只能等待。

思考:为什么磁头要设计成这样?

当然我也想过每个磁头可以不用共进退,各自访问他们想要去的位置这样岂不是更加读写高效,但是貌似实现起来也更复杂,并且我们也知道磁盘一转很快的,实际上磁头读写的速度非常快,上面这种已经可以高效实现磁盘的读写操作了。

磁盘的物理地址

其实我们上面已经介绍过来,可以用(柱面号,盘面号,扇区号)来定位任意一个磁盘块,在文件的物理结构中,我们经常提到文件数据存放在外存中的几号块,这个块号就是对应着一个具体的物理地址所以可以转换成(柱面号,盘面号,扇区号)的地址形式。

可根据该地址读取一个块:

  1. 根据柱面号移动磁臂,让磁头指向指定柱面(柱面号的作用)
  2. 激活指定盘面对应的磁头(盘面号的作用)
  3. 磁盘旋转的过程中,当指定的扇区划过时,磁头进行数据的读写,如果一次没有完成可以再等磁盘转过时进行直至完成数据的读/写(扇区号的作用)

磁盘的分类

此时图二的下方也是有许多磁头的只是没画出来,实际上这两种各有利弊,第一个磁臂需要频繁移动来切换磁道,而第二个磁头太多。

总结