知识大搜罗创业程序员

操作系统简明-5.0:内存管理 干货整理

2017-06-12  本文已影响67人  Dongle聊测试

cache

cpu只能访问内存和处理器内部的寄存器,如果某些数据不在内存中,那么,必须要移到内存后才能供cpu访问,比如某些机器指令,数据
我们来看一组访问速度对比

|内置寄存器|寄存器|内存|
|-|-|
|极快|快|...|

但是,有句话叫做不作就不会死,内存越慢,我们越要频繁使用,为此需要在cpu与内存之间增加cache(高速缓存)

进程访问保护

除了增加内存访问速度,还确保操作系统不能被用户进程访问到,以及用户间不能相互访问,这里介绍一种硬件实现方案:

  1. 每个进程有独立的内存空间
  2. 确定进程可以访问的合法地址范围


硬件方案:我们用基地址寄存器以及界限地址寄存器确定这个范围,比如进程3,可访问的范围是300040~420940


不知少侠们对这个解决办法还满意否☺

连续内存管理

内存分为两个区域:操作系统与用户进程



通常来说,中断向量的位置决定了操作系统的位置,本来操作系统既可以驻留在低内存,又可以跑到高内存玩耍(中断向量在低内存)
如果将多个进程同时放在内存中,就需要考虑如何分配内存空间,因此采用连续内存分配--->每个进程处于一个连续内存区域内

连续的内存管理算法:best fit,first fit

但是面临的困难是:在极端情况下,可能总内存满足需求,但是由于内存碎片分布,因此实际无法满足需求
好比:这有100M内存,但是仅仅50M连续,剩下50M平均1k分布,这样的话就很尴尬了

非连续内存处理办法

分页管理

通常是把小碎片连在一起,便可以扩大内存,但是这么做总会消耗时间,因此不采用,下面我们来提出更好的办法:分页管理

每个座位是一个单位,我要100个座位(100M),因此我给你不连续或连续的座位都无所谓

对于进程来讲,看到的却是是单一,线性,连续的内存

页表:是一个线性数组,存放逻辑页与物理页的对应关系,从逻辑上来讲,是一个映射关系

有这么几个好处

有这么几个坏处

处理器速度是最快的(访问寄存器),而对应的,访问内存会比之慢两个数量级:飞机速度800公里/小时,两个数量级是8公里/小时

TLB:我们要设计高速缓存TLB解决上述问题,TLB是页表的子集

页表 物理页
xxx xxxx

如果页表不在TLB内,要持续更新页表和物理页

两个进程要通信,共享内存是一个很好的方法(页表指向同一个物理内存上,M(p)∩M(q)≠∅)

综上:页表的好处多多,无论从内存分配,还是地址保护,异或是内存共享都是一个完美的解决方案

分级页表

借鉴一位大神

虚拟内存

运行一个进程时,要把进程指定的数据,指令放到机器内部中,因为运行中要访问这些数据,指令。但是并不需要把全部的指令和数据都要放到机器中,有些并不会用到:比如代码的异常处理,只有异常出现时,才会做出应对

虚拟内存:做分页管理时,把某些页放到磁盘上,需要时再弄回来,也就是说,我可以把磁盘和内存整合到一起,内存不够时,调来磁盘假装为内存(让物理页指向磁盘)

磁盘块的大小与页的大小应该一致



早期时候,由于磁盘比较小,因此要留一些空间来存放页,如果要访问已经交换出去的页,操作系统要到磁盘上去,把他读回来

好处:

缺点:

cache

主存是备用存储器的cache,备用存储器是主存的拓展
好比书包与图书馆:两者是互补关系

静态变量就是全局变量,只不过静态变量有作用域

上一篇下一篇

猜你喜欢

热点阅读