许式伟的架构课
许式伟
七牛云 CEO
84945 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 89 讲
许式伟的架构课
15
15
1.0x
00:00/00:00
登录|注册

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

OS Shell 程序
OS 引导程序
引导区引导程序
BIOS 程序
如何运行外置存储上的软件
如何分配内存
最大化内存使用效率
在外置存储上执行指令
软件“感觉”自己独占整个计算机的资源
每个进程有独立的虚拟地址空间
缺页中断
CPU 访问虚拟内存地址
内存分成多个连续的内存页
浮动地址固定
软件从外置存储读入内存
内存管理功能设计为中断请求
内存管理函数地址放到公认的地方
计算机完整的 “计算” 过程
由多个软件共同完成
关机
执行 BIOS 程序的第一条指令
计算机加电启动
内存管理的核心问题
虚拟内存解决的核心需求
内存分配
虚拟内存
运行外置存储上的软件
内存分配方法
操作系统视角
CPU 视角
结语
架构思维
保护模式下的内存管理
实模式下的内存管理
计算机运行全过程
计算机运行机制及内存管理

该思维导图由 AI 生成,仅供参考

你好,我是七牛云许式伟。
操作系统的核心职能是软件治理,而软件治理的一个很重要的部分,就是让多个软件可以共同合理使用计算机的资源,不至于出现争抢的局面。
内存作为计算机最基础的硬件资源,有着非常特殊的位置。我们知道,CPU 可以直接访问的存储资源非常少,只有:寄存器、内存(RAM)、主板上的 ROM。
寄存器的访问速度非常非常快,但是数量很少,大部分程序员不直接打交道,而是由编程语言的编译器根据需要自动选择寄存器来优化程序的运行性能。
主板上的 ROM 是非易失的只读的存储。所谓非易失,是计算机重新启动后它里面的数据仍然会存在。这不像内存(RAM),计算机重新启动后它上面的数据就丢失了。ROM 非易失和只读的特点,决定了它非常适合存储计算机的启动程序(BIOS)。
所以你可以看到,内存的地位非常特殊,它是唯一的 CPU 内置支持,且和程序员直接会打交道的基础资源。
内存有什么用?前面我们在 “02 | 大厦基石:无生有,有生万物” 一讲中介绍冯·诺依曼结构的时候,画过一个图:
从图中可以看出,存储的作用有两个:一个是作为 “计算” 的操作对象,输入和输出数据存放的所在;另一个是存放 “计算” 本身,也就是程序员写的程序。
这里说的存储,主要指的就是内存。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

保护模式下的内存管理是计算机操作系统中的核心功能之一,通过虚拟内存和缺页中断机制,实现了对多个软件的合理分配和运行。在保护模式下,每个软件都有独立的虚拟地址空间,使得软件“感觉”自己在独占整个计算机的资源,解决了实模式下的安全性和复杂性问题。虚拟内存的分页机制和缺页中断巧妙地解决了软件越来越大和同时运行的软件数量增加的挑战,使得内存的使用效率最大化。通过引入虚拟内存及其缺页机制,CPU 很好地解决了操作系统和软件的配合关系,实现了对内存的动态加载和合理分配。这些技术特点使得读者能够快速了解文章内容,对计算机内存管理有更深入的理解。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《许式伟的架构课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(104)

  • 最新
  • 精选
  • coder
    我觉得许大大的这个专栏写的挺好的。从计算机底层的角度去思考和总结架构的观点,让人觉得眼前一亮。 btw,看到评论区有人问cache的事情,补充一下自己的看法。 cache一般对programmer和软件来说确实是透明的,但是它也有缺点,比如说占用了大量的芯片面积[50%左右,因为要维护tag RAM和一致性],它也导致程序的行为难以分析。所以在实时的嵌入式场景和目前流行的AI专用加速器中都不采用Cache,目前大量采用的是scratchpad memory,它是一种对程序员可见的片上存储,需要programmer自己显式地来管理,e.g. GPU的shared memory,TPU的local buffer等

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

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

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

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

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

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

    作者回复: 挺好的分析

    2019-05-12
    25
  • 刘冲
    分离变化点和不变点,把不变点做成回调,预留了变化,这种思路其实就是架构的核心,如何区分和管理变与不变

    作者回复: 👍

    2019-06-27
    2
    16
  • keshawn
    表面上是在讲技术,实际上是在分析需求

    作者回复: 😊

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

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

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

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

    2019-05-08
    2
    11
  • 请问老师内存管理作为操作系统的一个重要且基本的功能,其本身就是一段程序需要在启动时加载在内存中并且永远不被交换到外置存储对吗?那么这段程序在保护机制下是如果一直停留在物理内存中的呢?是写入特定的内存页,永远不会被交换出去,还是由于内存管理功能总是被所以程序调用,由于访问频繁因此永远不会被换出去?另外,操作系统是如何管理内存和寄存器之间的数据交换呢?有点儿想象不出来这个接口。比命令将内存地址1中存放的数据放入2号寄存器,将寄存器3中存储的数据输出至内存地址4,这是一个怎样的过程呢?谢谢。

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

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

    作者回复: 👍

    2019-05-17
    2
    7
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部