操作系统之存储管理

文件系统

内存分配方法和空闲空间管理:
1、连续分配:在这种内存分配方式下,空间是连续分配的,是一种线性序列,即数据支持直接读取和顺序读取。这种方式的优点是访问很快,但是当存在数据的删除操作时,会导致数据的碎片化,一些空闲的小空间就不能得到充分利用。有一种解决方法是复制算法,把数据复制到了一个软盘,令有效空间连续,那么就可以得到连续的空闲空间了,但是这种方式会导致停机或是一些时间成本。
2、链接分配:它解决了连续分配的所有问题,内存可以不连续,每一块内存都有指向下一块的指针,采用链接分配就可以避免内存碎片,但是它只能用于文件的顺序访问,且指针也会占用内存的空间。为了解决指针占用内存空间的问题,可以把多个块组成一个簇,这样减少了指针的空间,但是也会带来内存碎片的问题。虽然存在这个问题,但是它的高可靠性还是令其被广泛使用。可以采用FAT来优化链接分配的指针错误导致找不到下一个卷的问题,FAT是一个关于卷名称和对应块的位置的key-value关系,通过FAT可以快速找到任何块,提高了效率。
3、索引分配:它的特点是通过文件名索引一个索引块的号,这个索引块中保存了文件数据的块的地址。它的好处是支持直接访问也没有外部碎片,但是索引块的本身就会占据内存,且单个索引块的大小如何定义也是一个问题。
效率与性能:
1、索引节点:如果一个磁盘不存放任何有用数据,它也是会占用一定的内存的,因为有索引节点。预先分配索引节点在合适的位置,为之后数据的插入提供便利,节省寻道的时间。
2、簇技术:根据文件的大小来调整簇的大小,当大簇能填满时就用大簇,小文件和最后簇就用小簇。
3、页面缓存、缓冲缓存、统一缓冲缓存:页面缓存使用虚拟内存技术,将文件数据作为页而不是面向文件系统的块来缓存文件数据。缓冲缓存是基于块。同时经过缓冲缓存和页面缓存就称为双重缓存,在读取文件的过程中,内存映射先是从文件系统读入磁盘并存放在缓冲缓存中,如果与IO交互,则可以直接访问,但如果要与虚拟内存交流,就必须经过页面缓存,这样也就经历了双重缓存,效率降低。现在使用统一缓冲缓存,无论是内存映射还是IO读写,都仅经过统一缓冲缓存,这样效率上就大大提高了。
4、下面附上统一缓存的IO关系图:
在这里插入图片描述
恢复:
1、一致性检查:通过系统程序,将目录数据与磁盘数据块相比较,并试图纠正所发现的不一致。分配算法和空闲空间管理算法决定了系统可以发现什么问题以及如何纠正问题。链接分配时,可以通过数据块之间的索引来重建;索引分配的话,一旦目录损坏,则很难修复了。
2、备份:在另一存储设备中备份,需要时从备份中恢复即可。第一天完全备份,第二天即以后采用增量备份。
3、日志:日志采用事务的形式来实现恢复,事务指完成任务的一组操作,日志中可以有多个事务,事务完成可以从日志中删除。如果出现程序的崩溃,那么就可以通过日志中的未完成的事务实现撤销操作,恢复文件系统的一致性。

大容量存储结构

磁盘、磁带:
1、磁盘:磁盘的结构通过如下一张图即可了解。
在这里插入图片描述
2、磁带:磁带与内存和磁盘相比访问速度太慢。磁带主要用于备份,存储不常使用的信息,作为系统之间信息传输的介质。
磁盘调度:
1、FCFS调度:先来先服务调度算法,它通常不提供最快的服务。
2、SSTF调度:最短寻道时间优先算法,基本上是一种SJF调度。这种算法会优先选择最近的位置,和FCFS相比虽然有很大的改善,但也容易导致某些偏远的节点一直得不到访问。
3、SCAN:磁臂来回扫描。
4、C-SCAN:和上者的区别是它移到一端后会回到磁盘的开始再进行扫描,但是这个过程不处理请求。
磁盘管理:
1、引导块:一般位于第一个分区的第一个扇区,其中存在引导代码,用于加载各种子系统和系统服务。
2、坏块:如果搜索到坏块,一般会在FAT中写上特殊值以通知分配程序不要使用坏块。坏块也会被备用块来逻辑地替换。

I/O输入系统

轮询和中断:
1、轮询:轮询是指通过轮询和忙位来实现的。这是主机和控制器之间的交互,控制器拥有控制寄存器,主机拥有命令寄存器。主机会不断读取控制寄存器的忙位,直到该位被清除;主机设置命令寄存器的写位并向数据输出寄存器中写入一个字节;主机设置命令就绪位;当控制器检测到命令就绪位已被设置,则设置自己的控制寄存器相应位为忙位;控制器读取命令寄存器,并看到命令(如:写命令)它从数据输出寄存器中读取一个字节,执行I/O操作;控制器清除命令就绪位,清除状态寄存器的故障位表示设备I/O成功,清除忙位表示成功。主机处于忙等待或轮询。
2、中断:I/O中断后执行中断处理程序,结束后中断返回。这个过程中不需要主机忙等待,节省CPU资源。
阻塞与非阻塞:
阻塞I/O发出命令后不能立即返回,需要等待I/O结束。非阻塞I/O发出命令后立即返回,数据传输结束后会返回处理结果。
I/O调度过程:
1、一个进程对已打开文件调用read()系统调用,进程进入等待队列。
2、如果数据在高速缓存中,则立即返回并完成I/O请求。
3、否则执行物理I/O请求,监控设备,等待中断。
4、DMA完成后内核内存得到数据,产生中断。
5、内核将数据传递给请求进程的地址空间。
6、进程移到就绪队列,等待CPU调度,继续执行。
缓冲、高速缓存、假脱机:
1、缓冲:两个设备之间或者设备和内存之间所传输数据的内存区域。作用是处理生产者和消费者之间的内存差异、协调传输数据不一致的设备、支持应用程序I/O复制语义。
2、高速缓存:保留数据副本的高速存储器。
3、假脱机:设备输出的缓冲区。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值