磁盘与文件系统

在这里插入图片描述
从磁盘中读写1个字节:移动磁头到指定磁道,旋转磁道直到指定扇区,通过磁生电/电生磁来读/取一个字节。只需要往控制器中写柱面,磁道,扇区,缓存位置,就能通过指令获取数据。

操作系统对这整个过程进行了封装抽象。

将多个扇区合成一个block,然后按照顺序排序,使得相邻盘号的block放在一起(这样连续读取相邻盘块可以花费较少的寻道时间),程序只需要传入一个block号,就能通过磁盘驱动自动取出多个相邻扇区的数据,block越大,空间浪费越多但是速度越快(每次寻道能读出更多的数据)。
因为有多个进程都要对磁盘进行读写请求,需要将每个进程的请求放到请求队列中,使用调度算法来进行调度,使得目标的平均访问延迟小。常见的磁盘调度算法:FCFS(先来先服务),SSTF(最短寻道优先),SCAN(电梯调度)
为使得用户使用的方便(总不可能让用户直接使用block吧),操作系统引入了文件来封装block(建立字符流到盘块集合的映射关系)。将整个磁盘抽象成了目录树结构。

文件在磁盘上的存储方式
  1. 连续存放:速度快,非常不灵活,对于文件增长有可能需要分配更大得连续盘块,FCB中保存文件得起始盘号以及长度
  2. 链式结构:各个盘块可以分开存放,速度慢,由指针连接起来,FCB只用保存起始盘号。
  3. 索引结构:专门拿一块来做索引块,中间存储了这个文件对应的盘块信息,FCB中存储索引块的块号。
    unix使用的是多级索引(inode)
    在这里插入图片描述
用户调用磁盘读写的过程

file_write(inode, file, buf, count):根据file中的一个读写指针(开始地址),加上count就是要读取的文件字符,然后使用inode找到要操作的盘号。

目录与文件系统

将目录(多个文件的集合)以及文件组成一个目录树结构,目录是一个特殊文件,存放了文件名+对应FCB的"地址"。根目录的FCB数组可以放在固定位置,FCB在磁盘中以数组形式存在,这样给出一个数组下标就能直接找出FCB的位置(根目录可以考虑放在第一个位置),通过FCB可以找到对应的数据块,目录在数据块中存放了在他目录下文件的文件名+对应FCB的“地址”。
根目录的信息从哪里来的:磁盘格式化,通过读取固定的块信息读出根目录的信息。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值