许式伟的架构课
许式伟
七牛云CEO
立即订阅
20078 人已学习
课程目录
已更新 72 讲 / 共 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 | 服务治理篇:回顾与总结
架构思维篇 (9讲)
57 | 心性:架构师的修炼之道
用户故事 | 站在更高的视角看架构
58 | 如何判断架构设计的优劣?
59 | 少谈点框架,多谈点业务
60 | 架构分解:边界,不断重新审视边界
加餐 | 实战:“画图程序” 的整体架构
61 | 全局性功能的架构设计
62 | 重新认识开闭原则 (OCP)
63 | 接口设计的准则
许式伟的架构课
登录|注册

07 | 软件运行机制及内存管理

许式伟 2019-05-07
你好,我是七牛云许式伟。
操作系统的核心职能是软件治理,而软件治理的一个很重要的部分,就是让多个软件可以共同合理使用计算机的资源,不至于出现争抢的局面。
内存作为计算机最基础的硬件资源,有着非常特殊的位置。我们知道,CPU 可以直接访问的存储资源非常少,只有:寄存器、内存(RAM)、主板上的 ROM。
寄存器的访问速度非常非常快,但是数量很少,大部分程序员不直接打交道,而是由编程语言的编译器根据需要自动选择寄存器来优化程序的运行性能。
主板上的 ROM 是非易失的只读的存储。所谓非易失,是计算机重新启动后它里面的数据仍然会存在。这不像内存(RAM),计算机重新启动后它上面的数据就丢失了。ROM 非易失和只读的特点,决定了它非常适合存储计算机的启动程序(BIOS)。
所以你可以看到,内存的地位非常特殊,它是唯一的 CPU 内置支持,且和程序员直接会打交道的基础资源。
内存有什么用?前面我们在 “02 | 大厦基石:无生有,有生万物” 一讲中介绍冯·诺依曼结构的时候,画过一个图:
从图中可以看出,存储的作用有两个:一个是作为 “计算” 的操作对象,输入和输出数据存放的所在;另一个是存放 “计算” 本身,也就是程序员写的程序。
这里说的存储,主要指的就是内存。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《许式伟的架构课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(79)

  • coder
    我觉得许大大的这个专栏写的挺好的。从计算机底层的角度去思考和总结架构的观点,让人觉得眼前一亮。

    btw,看到评论区有人问cache的事情,补充一下自己的看法。
    cache一般对programmer和软件来说确实是透明的,但是它也有缺点,比如说占用了大量的芯片面积[50%左右,因为要维护tag RAM和一致性],它也导致程序的行为难以分析。所以在实时的嵌入式场景和目前流行的AI专用加速器中都不采用Cache,目前大量采用的是scratchpad memory,它是一种对程序员可见的片上存储,需要programmer自己显式地来管理,e.g. GPU的shared memory,TPU的local buffer等

    作者回复: 👍,挺好的补充

    2019-05-08
    19
  • 黄海峰
    这个专栏应该叫“计算机导论”而不是叫“架构”。。。

    作者回复: 不是的,这个是架构课。你看计算机基础只占了一章,而且我们是从架构角度来讲计算机基础,很多细节都被抽象掉了。

    2019-05-07
    14
  • 晓凉
    从“缺页中断”看架构设计的开闭原则,CPU是硬件,生产出来就不能修改,本身是封闭的,设计上要考虑的是扩展的开放性,缺页中断解决了开放性问题。软件的设计,因为源代码是对程序员开放的,可随便修改,封闭性不能物理上保证,所以需要同时考虑封闭性和开放性。服务化隔离不同的代码模块,一定程度上实现了类似物理上的封闭性。

    作者回复: 挺好的分析

    2019-05-12
    10
  • 川杰
    老师您好,有两个问题希望解答:1、淘汰的内存页数据保存在哪里?是保存在外置存储设备中吗?2、CPU加载对应程序的代码段到内存中,那么CPU是如何知道这个对应程序的代码段在什么位置的呢?

    作者回复: 1、是的,保存在外置存储中。对于unix系的系统往往是swap分区;windows则是一个隐藏属性的.swp文件。
    2、代码段在哪里,是操作系统约定的,因为负责加载的人是操作系统,它设计的程序文件的数据格式。

    2019-05-08
    10
  • 云学
    看前几篇还没共鸣,直到这篇才体会到了这种宏观视角解读的好处,精述每个模块的输入输出以及核心功能,怎么串联到一起,如果从头再来该怎么设计,真正构建出整个计算机知识脉络,看完这些再看其他专栏就如降维打击。
    2019-05-13
    9
  • 请问老师内存管理作为操作系统的一个重要且基本的功能,其本身就是一段程序需要在启动时加载在内存中并且永远不被交换到外置存储对吗?那么这段程序在保护机制下是如果一直停留在物理内存中的呢?是写入特定的内存页,永远不会被交换出去,还是由于内存管理功能总是被所以程序调用,由于访问频繁因此永远不会被换出去?另外,操作系统是如何管理内存和寄存器之间的数据交换呢?有点儿想象不出来这个接口。比命令将内存地址1中存放的数据放入2号寄存器,将寄存器3中存储的数据输出至内存地址4,这是一个怎样的过程呢?谢谢。

    作者回复: 1、内存管理模块负责内存页的淘汰规则,它当然不会自己把自己淘汰掉。
    2、内存和磁盘的数据交换吧?我们这里核心交代思想,要了解细节可以学习一下一些操作系统课程。我后面在第一章的总结与回顾中也会介绍一些参考资料。

    2019-05-07
    6
  • keshawn
    表面上是在讲技术,实际上是在分析需求

    作者回复: 😊

    2019-05-08
    5
  • Enthusiasm
    老师可以多加一些:按照历史发展的时间顺序来讲技术间因果关系,以便于构建完整的知识体系架构,而细节上可以用给出参考链接或书籍的方式来让我们自己去索骥。比如这一章,由于之前了解过汇编语言,我知道8086CPU一开始是不支持保护模式的,后来386之后才开始支持。明显CPU和操作系统是经历了一段磨合,不是一上来就采用了这种保护模式,CPU也不是一上来就支持保护模式,而操作系统厂商也不是一开始就想到要多任务(比如DOS),很想知道当中发展中经历了哪些尝试和妥协。还希望老师把知识体系描述的更完整一些,比如操作系统除了DOS,Windows,同时期的还有Unix,MacOS,关于这一章,很想知道这几条技术线是如何并行发展的,他们一定有相互竞争和借鉴的feature,很想听一听。原则上希望可以通过技术发展的逻辑,理清知识体系和脉络。不然的话,这片知识在我们脑中,依然是一座孤岛,觉着可能没用就当做垃圾给回收了。希望听到更多技术、思想历程,可以多用一些搜索引擎可以搜索到的“概念”减少篇幅,而把详细描述用在那些“搜索引擎难以搜索到的”知识来增加干货。

    作者回复: dos面临的个人市场刚开始资源太匮乏了,所以没有做多任务是很正常的决策

    2019-05-07
    5
  • 1900
    这里说的“虚拟内存”是内存还是磁盘啊?感觉应该还是内存。

    作者回复: 内存和磁盘的配合

    2019-05-07
    5
  • zhangtnty
    许老师, 您的文章很棒。有一点小小的建意, 能否您亲自录音频, 现在的音频老师录得也很好, 但总觉得少了点计算机、软件、架构的一丝丝底蕴(个人浅见)。有时音频对于读者也是很重要的,辛苦老师考虑一下。

    作者回复: 录音频我不太擅长,我给音频老师反馈一下您的意见。

    2019-05-08
    4
  • kirogiyi
    真的是很好的架构课程,这这里我们可以了解计算机的发展历史,解析计算机的基础原理,理清软件架构的原始脉络,一步步构建出属于自己的软件架构知识体系,并不会只知其然而不知其所以然,这样构建的软件架构才会更加坚实牢靠。
    2019-05-08
    4
  • 第二个问题是关于内存和寄存器(RAM和CPU)的数据交换。确实是如老师所说,有再学一学操作系统的冲动。学着老师的架构课感觉到本科时的课程设计是很好的,可惜当时见识太浅,每门课只是孤立的在学习,为了完成作业拿个好分数而学习,从未整体的去思考课程设计背后计算机的完整架构,真的是很有意思的事情。

    作者回复: 确实,整体去看信息科技世界,里面有太多精彩。非常值得从头再学一遍。加油💪

    2019-05-08
    4
  • 苟范儿
    从硬件架构到其上的操作系统。但是不得不佩服前人在这些层面给出的架构,BIOS 引导、OS、Shell 等系统级方案,仔细想象,每天都在用,各类软件的开发都在这些架构之上很好的运行。

    作者回复: 值得细细体会,感悟

    2019-05-07
    4
  • 逆流的鱼
    如果都是保护模式,比如Java进程,启动指定了堆或者内存大小为4G,那其实内存实际没有分配吗?linux服务器可用内存没有减少4G?运行实际占不到4G?!

    作者回复: 这种疑问,可以实际动手测试试试,验证你的推理对不对

    2019-05-07
    4
  • 松鼠君
    现代操作系统,通过内存管理机制的改变,提升了软件运行的安全性和效率。
    2019-05-07
    4
  • Geek_f026c5
    缺页异常思想上有点类似依赖注入
    2019-05-12
    1
    3
  • bachelor
    保护模式真是一个很有意思的想法,“争取让每个软件都认为自己独自占有整个cpu资源”,就像平行宇宙理论一样,彼此互不干扰,但又真实存在,不一样的是,前者是真实存在的。
    2019-07-24
    2
  • 刘冲
    分离变化点和不变点,把不变点做成回调,预留了变化,这种思路其实就是架构的核心,如何区分和管理变与不变

    作者回复: 👍

    2019-06-27
    2
  • 无野
    Cache都是SRAM,速度快但是集成度低,不适合集成容量特别大。其中1st level 和last level cache对性能影响最大,通过Instruction Read miss(I1mr,ILmr),Data read miss(D1mr,DLmr),L1的miss会有10个cpu cycle的惩罚期,LL的miss会有200个cpu cycle的惩罚。所以,虽说cache不可编程,但是为了降低惩罚,也就是提高命中率,反过来是要求你的代码具有效率,数据结构的合理性。比如基于cache加载内存数据的locality(局部性原理),当你循环遍历一个二维数组时,先行后列的性能远远高于先列后行,原因是前者的命中率远远高于后者。

    作者回复: 挺好的补充

    2019-05-26
    1
    2
  • 乘风
    架构思维上学到了什么?
      CPU虚拟空间设计思想:将外置系统做高度抽象,外置系统实现了虚拟空间的约定,CPU在运行时与虚拟空间进行数据交换,虚拟空间与外置系统进行交互,从而完成CPU的资源调度、管理功能。
      封装了变化点,外置存储结构的不确定性,建立统一规范,双方按照规范完成整个协作流程。

    作者回复: 👍

    2019-05-17
    2
收起评论
79
返回
顶部