计算机底层原理杂谈(白话文) (4)

  段的长度是可以改变的,我们先假定它大小固定这样好说明,假如我内存一共能容纳10个段,然后我硬盘能容纳1000个段,我段表就记录我内存中的这10个段对应着硬盘中的哪段数据。然后呢我编程的时候,地址范围写成硬盘那样大,然后有个专门的应将mmu用来把我程序中的地址通过查表翻译成内存中的地址,如果没有,那就把硬盘中的那个地址的数据放在内存中,最终翻译成的还是内存中的地址。这里就用到了虚拟地址的概念,我程序中的地址是虚拟地址,帮我查表翻译娜硬盘到内存的装置叫MMU,最终翻译成的内存地址是物理地址。用段的方式来管理这个虚拟内存就叫做段式内存管理。就酱。

  段式的管理好处是长度可变比较灵活,不好的地方是你比如你A段和C段原来是B段,大小是1000,现在不用了这个地方挪出来了,你新来个从硬盘调来的数据,大小是1001,是不是很膈应人。看着放进去正好却偏偏差一个,于是乎你只能把整个C段往前娜。要是心来个数据是900,其他地方都放不下只能放在这,那剩下的100就很尴尬。这个尴尬的100就叫做内存碎片。根据角度不同,如果你说这个100是由于那个900挤进来了剩下的空间,那就叫内部碎片,如果你说这个100太小新来的程序放不进来,那就叫外部碎片。这块我觉得通过段式叫外部页式叫内部不好,希望大家来讨论下。那为了解决这个问题就有了页式管理,页就是个概念而已,你愿意叫他不变的段也行。硬盘被分为固定大小的物理页,操作系统逻辑上页分为了同等数量同等大小的逻辑页,然后同样有个叫页表的东西记录了逻辑页和物理页的对应关系,然后和段一样当请求的一个页不在页表中,准确说是页表中标志了这个页不在内存,那就把硬盘中的页调进来,这个过程就叫缺页中断。这个页式当然页有好有坏,然后又有个和稀泥的办法就是段页式管理。一句话,怎么的都行,现在操作系统基本都是页,完事。

  再说说进程的部分,哎不说了,这块是在连入门都不算,完全不懂就不bb了,留在下一篇吧。

  其实上面从某个地方突然就从计算机组成原理的画风转成操作系统了,下面简单说说操作系统为啥出现。当然一开始那个cpu和外设已经可以做想做的任何事了,你完全可以纯手工的方式去把内存中的一块区域一个个地写入代码嘛,然后程序计数器搞一个初值,电一通跑起来。但这太恶心了,于是有了卡片机,再来个卡片机读入的程序事先写好,这样你就不用手工操作内存了,你制作好卡片就好,反正是方便了一点,但本质一样。这叫做手工操作系统,也可以叫没有操作系统。后来发现即使是完全相同的工作,仍然需要每次取出纸片再放进去,比如有两个卡片1和2,有个程序是执行1122121这种顺序,那就需要一个人来来回回放纸,这不科学。于是有了批处理操作系统,人可以事先把1和2加载到内存,然后弄一个c卡片来负责调用这个1和2卡片,这就是调度程序,也可以叫监督程序。这就叫做批处理操作系统。再后来可以交替执行多个任务,一个任务遇到io操作就切换,这叫多道程序系统。但一个作业扔进去之后就不受用户管了,没有交互,于是有了分时操作系统,可以有多个终端使用cpu通过命令的方式并得到响应。但如果某些特别操作需要立刻相应可能就没法做到,于是通过引入中断和严格的中断时间控制做到了实时操作系统。再后来就是我们现在的操作系统啦。其实对这些叫法和定义我并不是特别理解,所以你可以发现我讲的其实挺乱的,这里也希望有大佬给个好的解释。

  今天就写到这吧,想着这些天好像学了很多东西,但自己写出来发现把所有肚子里东西吐出来就这么点,没什么系统就是想到哪写到哪能串的尽量串一下了,工作之余偷偷溜走写的。再有这里面的地址呀数据呀好多就是举例,不是准确的值,为了方便理解而已,主要我也不愿意花时间搞个准确的放在这样一篇随便写的文章,以后会把某些地方具体拿出来讲。希望各位大佬给出批评指正或者吐槽探讨,感激不尽!  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxfsw.html