许式伟的架构课
许式伟
七牛云CEO
立即订阅
19946 人已学习
课程目录
已更新 71 讲 / 共 77 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 怎样成长为优秀的软件架构师?
免费
基础平台篇 (21讲)
01 | 架构设计的宏观视角
02 | 大厦基石:无生有,有生万物
03 | 汇编:编程语言的诞生
04 | 编程语言的进化
05 | 思考题解读:如何实现可自我迭代的计算机?
06 | 操作系统进场
07 | 软件运行机制及内存管理
08 | 操作系统内核与编程接口
09 | 外存管理与文件系统
10 | 输入和输出设备:交互的演进
11 | 多任务:进程、线程与协程
12 | 进程内协同:同步、互斥与通讯
13 | 进程间的同步互斥、资源共享与通讯
14 | IP 网络:连接世界的桥梁
15 | 可编程的互联网世界
16 | 安全管理:数字世界的守护
17 | 架构:需求分析 (上)
18 | 架构:需求分析 (下) · 实战案例
19 | 基础平台篇:回顾与总结
加餐 | 我看Facebook发币(上):区块链、比特币与Libra币
加餐 | 我看Facebook发币(下):深入浅出理解 Libra 币
桌面开发篇 (16讲)
20 | 桌面开发的宏观视角
21 | 图形界面程序的框架
22 | 桌面程序的架构建议
23 | Web开发:浏览器、小程序与PWA
24 | 跨平台与 Web 开发的建议
25 | 桌面开发的未来
26 | 实战(一):怎么设计一个“画图”程序?
27 | 实战(二):怎么设计一个“画图”程序?
28 | 实战(三):怎么设计一个“画图”程序?
29 | 实战(四):怎么设计一个“画图”程序?
30 | 实战(五):怎么设计一个“画图”程序?
31 | 辅助界面元素的架构设计
课外阅读 | 从《孙子兵法》看底层的自然法则
加餐 | 想当架构师,我需要成为“全才”吗?
32 | 架构:系统的概要设计
33 | 桌面开发篇:回顾与总结
服务端开发篇 (14讲)
34 | 服务端开发的宏观视角
35 | 流量调度与负载均衡
36 | 业务状态与存储中间件
37 | 键值存储与数据库
38 | 文件系统与对象存储
39 | 存储与缓存
40 | 服务端的业务架构建议
41 | 实战(一):“画图”程序后端实战
42 | 实战(二):“画图”程序后端实战
43 | 实战(三):“画图”程序后端实战
44 | 实战(四):“画图”程序后端实战
45 | 架构:怎么做详细设计?
46 | 服务端开发篇:回顾与总结
加餐 | 如何做HTTP服务的测试?
服务治理篇 (11讲)
47 | 服务治理的宏观视角
48 | 事务与工程:什么是工程师思维?
49 | 发布、升级与版本管理
50 | 日志、监控与报警
加餐 | 怎么保障发布的效率与质量?
51 | 故障域与故障预案
52 | 故障排查与根因分析
53 | 过载保护与容量规划
54 | 业务的可支持性与持续运营
55 | 云计算、容器革命与服务端的未来
56 | 服务治理篇:回顾与总结
架构思维篇 (8讲)
57 | 心性:架构师的修炼之道
用户故事 | 站在更高的视角看架构
58 | 如何判断架构设计的优劣?
59 | 少谈点框架,多谈点业务
60 | 架构分解:边界,不断重新审视边界
加餐 | 实战:“画图程序” 的整体架构
61 | 全局性功能的架构设计
62 | 重新认识开闭原则 (OCP)
许式伟的架构课
登录|注册

09 | 外存管理与文件系统

许式伟 2019-05-14
你好,我是七牛云许式伟。
在 “07 | 软件运行机制及内存管理”中,我们已经聊了内存管理,这一讲我们聊聊外置存储设备的管理。

外存的分类

计算机有非常多样化的外置存储设备,比如:磁带、光盘、硬盘、U 盘、SSD 等等。外置存储设备的种类是不可穷尽的。随着科技的发展,新的存储设备会不断涌现,有着更低的单位能耗(存储量 / 每日能源消耗成本),更低的单位存储成本(存储量 / 可存储的时间 / 设备价格),或者更高的访问性能。
但不管这些存储设备内部如何存储数据的原理怎么变,改变的主要是质量,而不是它的功能。对操作系统来说,管理它们的方式是非常一致的。这些外置存储设备依据其功能特性不同,简单可以分为如下三类。
顺序读写型。如:磁带。
随机只读型。更准确说是单次完整写入多次读取型,也就是每次写数据都是整个存储介质一次性完整写入数据。如:光盘(含可擦写光盘)。
随机读写型。如:软盘、硬盘、U 盘、SSD 等等。
顺序读写型的外置存储(如磁带)我们日常并不常见,它的主要应用场景是归档,也就是数据备份。今天我们略过不提。
随机只读型的外置存储(如光盘)我们日常有较多应用,常见的应用场景是资料分发和归档。资料发布的内容很广泛,比如:软件、娱乐媒体包括电影、MTV、音乐等等。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《许式伟的架构课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(39)

  • Enthusiasm
    关于外存管理,有个问题从之前就困扰我:磁盘的IO是由CPU完成的吗?但之前见到的说法是“CPU只能操作内存”。既然今天又提到了这个问题,文中提到“大量的磁盘 IO 操作,非常占用 CPU 时间”,那这两种说法是否矛盾?还想知道磁盘中的数据是怎么被加载到内存上来的呢?另外,更多的文章是说,“CPU的速度远远大于磁盘IO,CPU经常需要‘等待’磁盘IO”,这明显也是一种将CPU和外存割舍开的一种说法,而且按这种说法,CPU不光无需分配很多时间片给IO,而且还有很多“等待”时间。这也和本文中“非常占用CPU时间”相矛盾吧?

    作者回复: 所有外设cpu都统一基于数据交换(io)的方式操作。cpu并不知道数据的含义,但是设备的使用方和设备知道。这种情况下你可以简单理解cpu只是一根网线,但是很重要的一点是它让设备使用方和设备可以交互。cpu并不负责磁盘io,但是它要等它结束以接收数据。这方面当然也有一些新技术出现改善这一点,可以想一想可能的优化路径,这里不表。

    2019-05-14
    2
    11
  • 开放(深度学习学者)
    太简单了感觉,基本没有怎么说清楚,第一硬盘存储其中一个文件他是怎么存放的数据块和元数据是怎么结构,inode是什么,还有数据和元数据的索引表,甚至作为文件系统ext3的多层表索引和12个直接链接,一个单层,和多层索引等等都没说,文件系统的整体架构,特别是到底怎么优化等等也没说,还有虚拟内存,具体程序段怎么映射到物理内存,空余内存怎么管理,虚链表,对应的两难性能问题怎么解决?

    作者回复: 文件系统主要我觉得从架构上理解比较容易,所以没有特别交代太多。可能后面 review 的时候会适当重构一下这一篇。

    2019-05-27
    6
  • DaDo Wang
    想到了HDFS(Hadoop Distributed File System ),文中说的文件系统和HDFS应该不属于一个层吧?个人理解,HDFS应该全是更上层的应用软件层文件系统,它在外置存储的文件系统上,做了对分布式的文件进行管理的功能还请老师解答~😁

    作者回复: 不是一个层面,后面服务端开发部分会讨论分布式文件系统

    2019-05-15
    4
  • 82
    多个进程去访问修改相同的外存地址文件时,谁来控制并发修改是操作系统还是外设驱动程序?
    如果提高外存的访问速度是否可以减少缺页的处理时间,进而一定程度缓解卡顿的情况?

    作者回复: 1、操作系统;2、对的,以前用机械硬盘作为swap,有时候慢比较显著;现在电脑基本上都用固态硬盘做swap,慢的感觉基本上完全消失了。

    2019-05-14
    4
  • 陈光
    老师,能否简单介绍一下基于内存的数据结构和基于外存的数据结构有何不同?我们平时所说的“数据结构和算法”是不是偏向于内存?另外,“路径冲突”是不是指多个进程同时访问同一个文件?

    作者回复: 1、外存的数据结构的特征是io是很费时的操作,所以外存数据结构+算法的优化方向是减少io次数,这个和内存很不一样。
    2、平常数据结构大部分是内存;但一般数据结构书最后有几章会谈到外存数据结构+算法。
    3、是的。

    2019-05-14
    4
  • 瞧,这个人
    怎么越来越像计算机组成原理了。希望更多的软件架构知识

    作者回复: 第一章会更偏基础体系,结合体系谈架构

    2019-05-17
    3
  • lckfa李钊
    看回复 ,很多人和我一样,对"Unix的一切皆是文件不是最佳实践"这个论点,有困惑.如果在图形界面时代的一切皆文件这样的架构设计不再适宜,为何类unix的设计者不改变这种设计,或者说,从架构的角度说,这样的设计定型了,是不是就不好改了?本课的主题其实是外设的统一接口是文件系统,那么把外设都当做文件进行抽象化处理,不出很合适么?

    作者回复: 这种统一给我的感觉就像很多面向对象的类库,所有的类统一从Object类继承一样,是一个过度设计。

    2019-05-15
    3
  • 庆增
    再深入一点就好了,比如文件系统是如何恢复数据的。

    作者回复: 日志里面记录的是元数据的变更历史,所以可以恢复的是元数据破坏。如果文件内容坏了就没办法了

    2019-05-14
    3
  • 大糖果
    老师好,有个问题,就是关于Windows自带的文件搜索,我们都知道那东西很慢,但是有一款everything的软件却可以做到很快,微软的技术是不用质疑的,他们为什么不把这个文件搜索做快点呢?还是这样的软件会有别的损耗?

    作者回复: 确实不一样,一个有建立搜索的索引,有额外的存储成本;一个是遍历(挨家挨户问过去)。

    2019-05-14
    3
  • 猴子请来的救兵
    对于外部设备,我觉得从架构角度来说,重点应该介绍设备驱动程序这一块,驱动程序封装了不同设备的实现细节,而提供预定义的接口与操作系统通信
    2019-06-13
    2
  • 诗泽
    请问,分区的格式化是由操作系统的文件系统管理程序完成的吗?比如Linux 支持ext3和ext4两种格式那么操作系统会内置两种文件系统管理程序吗?文件系统管理程序从某种角度可以理解为是一种“驱动”吗?谢谢!

    作者回复: 分区格式化其实一个普通的用户态应用程序就可以完成。文件系统管理程序不是驱动程序。

    2019-05-15
    2
  • 傲娇的小宝
    因为很多东西没学过,或者没这么深入,感觉自己要学习的还很多很多。

    作者回复: 能够在头脑中把整体串起来就可以了,然后对某些东西有兴趣想进一步了解的,后面可以继续研究

    2019-05-15
    2
  • ༀ醉里挑灯看剑༄
    缺页产生是因为长时间没有用的内存地址淘汰所以需要写入swap中进行保存,频繁的产生是说很多内存地址长时间没有用么?那这是怎么产生的呀

    作者回复: 频繁缺页说明活跃的内存页超过物理内存大小,导致一个页刚刚换进来又要换出去,就比较折腾

    2019-05-14
    2
  • 靠人品去赢
    这个外存的数据格式NTFS我也是装系统的时候见到过,没有去考虑过这是一个什么东西。这个格式是有日志的,想问一下数据恢复可不可以借助日志,可以的话为什么数据恢复,机械盘可以固态盘就很大概率凉凉?

    作者回复: 固态盘为何凉凉没有了解过

    2019-05-14
    2
  • 刘文坛
    老师您好,对于“一切皆文件”很多时候不是最佳实践,能举个例子吗?不是很理解

    作者回复: 键盘和显示器就是很好的例子。stdin和stdout虽然能够用,但是实际上除了古老的命令行程序谁也不用他们。

    2019-05-14
    2
  • 宝宝疯
    简单明了,如果能再深入些就更好了👍🏼

    作者回复: 希望增加什么方面的内容?

    2019-05-14
    2
  • Liber
    许老师,把你的知识掌握了去七牛应聘会不会so easy?

    作者回复: 真掌握了去哪里都easy ^_^

    2019-09-28
    1
  • 张sir
    许老师,我有两个疑问, 1.如果操作系统的swap占用过高,会直接影响cpu性能吗。2.路径的冲突检查机制,是不是就是像mysql服务那样,当服务运行起来后,就会创建xxx.pid文件保存进程的pid,来保证进程的互斥

    作者回复: 1、会,swap访问越频繁,cpu呈现出来的性能越低,其实是因为访问存储的速度低,数据读写速度低,纯粹的计算是不影响的,但是这个世界没有脱离存储的计算。所有的计算你可以想象成从存储读出来数据,进行纯粹的计算得到结果,然后再把结果写回存储中去。所以计算的性能和存储性能密切相关。2、对的,这是非常常见的一种互斥手法。

    2019-07-13
    1
  • Sam.Ye
    “检查文件是否存在,不存在就创建它”,这个语义在保证原子性的前提下,就可以用于做进程间的互斥。例如,我们希望一个软件不要运行多个进程实例,就可以基于这个机制来实现。
    不是很理解这句话,怎么做进程间的互斥?又是怎么基于这个机制来避免运行多个进城实例?

    作者回复: 第二个进程创建文件失败就知道进程已经运行,自己选择退出去

    2019-05-20
    1
  • cnanlnanc
    迫不及待地想听听有关架构重构的知识,毕竟这些才是几乎每个程序员每天都会面临的问题吧

    作者回复: 重构的确是个有意思的话题,后面我们会谈到重构的一些常见思路

    2019-05-20
    1
收起评论
39
返回
顶部