09 | 外存管理与文件系统-笔记

上一讲专栏作者描述了如何管理内存,这一讲的笔记主要是关于外置存储设备的管理

外存分类:

磁带、光盘、硬盘、U 盘、SSD 等

随着技术科技的发展 外置存储的设备存储容量会越来越大 功耗会越来越小 存储最小单元单位会原来越小 更高的访问性能

那么操作系统如何管理这些外置存储设备呢?

存储设备原理改变的是质量而不是它的功能

分类:

顺序读写:磁带

随机只读:光盘

    软件、娱乐媒体、MTV、音乐

随机读写:U盘 SSD 等

    所有称得上是电脑的设备上都可以见到

    PC、笔记本、手机,还是手表、汽车

外存的数据格式

外置存储和内存的最大区别在于?

持久存储

内存为CPU准备

软件进程同时使用这些设备怎么才能不乱?

文件系统的来源:

写到存储中的数据是“自描述”的某种数据格式

文件系统把存储设备中的数据组织成为了一棵树

节点可以是文件夹 也可以是文件

树的根节点为目录,我们称其为 根目录

每个节点

    名称

    创建时间

    最后编辑时间

    最后访问时间

    操作日志

文件系统的实现


几乎所有文件系统的接口一致 但是实现的方式不同

随机只读型的外置存储(如光盘



它的数据格式通常偏向于读优化


随机读写型的存储(如硬盘


他的架构关联性不大

数据结构与算法的问题

不是基于内存的数据结构

基于外存的数据结构


大部分现在OS基于日志来改善文件系统的防灾能力

基于B树 B+树组织元数据

DOS的FAT文件系统将目录作为一个单一的特殊文件

如果目录树深、目录里的子节点数量多,都会大幅降低文件系统的性.能


一般的 拿到一块存储硬件

第一步 分区

第二步 分区格式化

第三步 把该分区挂载(mount)到操作系统管理的文件系统名字空间中

外存的使用接口

简单的方式:操作系统提供的 CLI

更语义化的方式:编程语言的封装:

例如GO语言中的:os.Mkdir, os.Rename, os.Remove

早期:操作系统将所有的输入和输出设备接口统一使用了 文件 的方式来封装,即一切皆文件

图形界面的到来,文件系统的接口进行了大调整

有了文件系统的接口,我们可以在不同的进程中去使用这些外置设备,一般的不需要去感知其他进程的存在,除非有文件、目录冲突

冲突可以避免,但是进程间的通信可以基于这个路径冲突机制实现


虚拟内存的支持

物理内存不足的时候 我们常常会使用物理空间将长时间不用的内存页数据转移到外置存储

UNIX操作系统为此分配了一块叫做swap的分区,用于内存页的保存和恢复

windows 系统使用具有隐藏属性的 .swp 文件来实现

缺页的情况发生之后,会经常性的发生保存和恢复的情况,这个时候会发生大量的IO磁盘操作,导致电脑性能下降。


结语

整体来说,外存管理从架构角度来说比较简单,复杂性主要集中在外存数据格式,也就是文件系统的设计上




极客时间版权所有: https://time.geekbang.org/column/article/94991


有疑问、勘误、请您在下方留言,感谢您的支持 ღ( ´・ᴗ・` )!

感谢您阅读,这篇文章归 极客点子版权所有.
如果转载,请注明出处: 极客点子版权所有(/page/940.html) 知识共享许可协议
本网站使用 创作共用 归属 - 非商业用途 - 共享4.0国际许可协议的相同方式 许可.

关于作者:

    作者:

    reverse()

    简介:

    nodejs 全栈工程师 、作家、github 开源爱好者
    研究方向:数据分析、 深度学习、 服务器架构、 系统原理

    著作:

    最爱的编程语言:

    Javascript
    Python