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

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

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

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

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

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

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

    
     13
  • 云学
    2019-05-13
    看前几篇还没共鸣,直到这篇才体会到了这种宏观视角解读的好处,精述每个模块的输入输出以及核心功能,怎么串联到一起,如果从头再来该怎么设计,真正构建出整个计算机知识脉络,看完这些再看其他专栏就如降维打击。
    
     12
  • 晓凉
    2019-05-12
    从“缺页中断”看架构设计的开闭原则,CPU是硬件,生产出来就不能修改,本身是封闭的,设计上要考虑的是扩展的开放性,缺页中断解决了开放性问题。软件的设计,因为源代码是对程序员开放的,可随便修改,封闭性不能物理上保证,所以需要同时考虑封闭性和开放性。服务化隔离不同的代码模块,一定程度上实现了类似物理上的封闭性。

    作者回复: 挺好的分析

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

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

    
     8
  • keshawn
    2019-05-08
    表面上是在讲技术,实际上是在分析需求

    作者回复: 😊

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

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

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

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

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

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

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

    作者回复: 👍

    
     4
  • 涵
    2019-05-08
    第二个问题是关于内存和寄存器(RAM和CPU)的数据交换。确实是如老师所说,有再学一学操作系统的冲动。学着老师的架构课感觉到本科时的课程设计是很好的,可惜当时见识太浅,每门课只是孤立的在学习,为了完成作业拿个好分数而学习,从未整体的去思考课程设计背后计算机的完整架构,真的是很有意思的事情。

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

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

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

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

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

    
     4
  • 松鼠君
    2019-05-07
    现代操作系统,通过内存管理机制的改变,提升了软件运行的安全性和效率。
    
     4
  • 乘风
    2019-05-17
    架构思维上学到了什么?
      CPU虚拟空间设计思想:将外置系统做高度抽象,外置系统实现了虚拟空间的约定,CPU在运行时与虚拟空间进行数据交换,虚拟空间与外置系统进行交互,从而完成CPU的资源调度、管理功能。
      封装了变化点,外置存储结构的不确定性,建立统一规范,双方按照规范完成整个协作流程。

    作者回复: 👍

    
     3
  • Geek_f026c5
    2019-05-12
    缺页异常思想上有点类似依赖注入
     1
     3
  • 晓明
    2019-05-08
    请问老师怎么保证不同进程通过独立的映射表得到的物理地址相互之间不冲突呢?

    作者回复: 操作系统保证的,只有操作系统内核才能修改地址映射表。

    
     3
  • bachelor
    2019-07-24
    保护模式真是一个很有意思的想法,“争取让每个软件都认为自己独自占有整个cpu资源”,就像平行宇宙理论一样,彼此互不干扰,但又真实存在,不一样的是,前者是真实存在的。
    
     2
我们在线,来聊聊吧