内存管理&&地址映射

先来简单的介绍下电脑的硬件,主要分为五个部分:
  1. 控制器(Control):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。
  2. 运算器(Datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。
  3. 存储器(Memory):存储器的功能是存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息。
  4. 输入(Input system):输入设备是计算机的重要组成部分,输入设备与输出设备合称为外部设备,简称外设,输入设备的作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据等信息输入到计算机。常见的输入设备有键盘、鼠标器、光电输入机、磁带机、磁盘机、光盘机等。
  5. 输出(Output system):输出设备与输入设备同样是计算机的重要组成部分,它把外机的中间结果或最后结果、机内的各种数据符号及文字或各种控制信号等信息输出出来。微机常用的输出设备有显示终端CRT、打印机、激光印字机、绘图仪及磁带、光盘机等。


       CPU是中央处理器,是控制器和运算器。
  内存和硬盘都是存储器,受CPU的指挥。一般是从硬盘中读取程序,在内存中处理,然后再写回到硬盘中。
  I/O是输入/输出的接口。硬盘就是通过I/O接口,把数据送到内存中供CPU处理的。

计算机简单体系为:                                          存储数据的几种设备

          

虚拟内存器:虚拟管理技术,不是一种技术;

为了屏蔽一些差异统一管理,我们使用进程来运行,让计算机来计算运行,我们不用在意cpu的计算,数据的读取等问题。

cpu计算的数据不直接放在I/O,先放在内存。

操作系统对内存的管理

1.内存分区

      1)固定分区

       分为两种:大小相等的固定分区大小不等的固定分区。

       缺点: 都存在内部碎片,不能执行太大的程序。

       大小不等的固定分区的两种放置策略:

       1.将程序放到能够容纳它的最小的分区;

       2.将程序放到当前能够容纳它的空闲的最小分区。

       2)动态分区

        三种方式

        a.首次适配:按分区在内存的先后次序,从上次分配的分区起查找(到最后{区时再从头开始},找到符合要求的第一个分区进行分配。

        b.临近适配: 从上一次放置的地方开始扫描,选择下一个合适的空闲分区进行分配。

        c.最佳适配:按分区在内存的先后次序从头查找,找到其大小与要求相差最小的空闲分区进行分配。从个别来看,外碎片较小;但从整体来看,会形成较多外碎片优点是较大的空闲分区可以被保留。

        缺点:产生外部碎片(太小了,无法分出去),可以进行碎片整理,压缩。

2.伙伴系统

      伙伴系统是一个结合了2的方幂个分配器和空闲缓冲区合并计技术的内存分配方案,

      其基本思想很简单:内存被分成含有很多页面的大块, 每一块都是2个页面大小的方幂.。如果找不到想要的块, 一个大块会被分成两部分, 这两部分彼此就成为伙伴。其中一半被用来分配, 而另一半则空闲。这些块在以后分配的过程中会继续被二分直至产生一个所需大小的块。当一个块被最终释放时, 其伙伴将被检测出来, 如果伙伴也空闲则合并两者。可以使用二叉树做映射,每个叶子节点对应一块内存区域,一分为二,合并的时候看左右兄弟。最终合并成一个。
3.分页

         首先操作系统把内存分区(系统区和用户区)。每个区里又分页,每个页里又分表。 一个进程可以占据多个页帧,加载的空间可以不连续。

        分页 是一种操作系统里存储器管理的一种技术,可以使电脑的主存可以使用存储在辅助存储器中的数据。操作系统会将辅助存储器(通常是磁盘)中的数据分区成固定大小的区块,称为“页”。当不需要时,将分页由主存(通常是内存)移到辅助存储器;当需要时,再将数据取回,加载主存中。相对于分段,分页允许存储器存储于不连续的区块以维持文件系统的整齐。分页是磁盘和内存间传输数据块的最小单位。

         通过访问页表寄存器得到外层页表的页号,根据页表寄存器得到对应的的偏移地址是内存页表的页号,再根据页号访问页表寄存器得到物理块。也可以在各个有页表寄存器的地方加快表减小开销。

简单分页的特点:

1:分页的内容少,产生的碎片少。

2:一个进程可以占有多个分页。

3:占用多个分页不需要连续。充分利用空闲分页。

4.分段

        分段也是类似分页的实现,一个进程所占的段有多个,段和段之间不需要连续。每个段和物理地址之间有一个映射关系,叫做段表。类似于页表。段表中记录了段的基址和段长。访问段表的时候先查看是否大于该段的长度,如果大於则越界。访问失败。如果小于,则用该段的始址加上段内地址得到对应的物理地址。

分页和分段的区别:

1:页是信息的物理单位,为了方便管理内存。对于用户来说是透明的。段是信息的逻辑单位,分段是逻辑的要求。对用户是可见的

2:页的大小是固定的,是由操作系统设计的。段的大小是不固定的,是由用户程序本身决定的。

3:分页的地址空间是一维的,分段的地址空间是二维的。
 

       页式和段式系统有许多相似之处。比如,两者都采用离散分配方式,且都通过地址映射机构来实现地址变换。但概念上两者也有很多区别,主要表现在:

      1)   需求:是信息的物理单位,分页是为了实现离散分配方式,以减少内存的碎片,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了更好地满足用户的需要。

    一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。

     2)   大小:页大小固定且由系统决定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的。段的长度不固定,且决定于用户所编写的程序,通常由编译系统在对源程序进行编译时根据信息的性质来划分。

     3)   逻辑地址表示:页式系统地址空间是一维的,即单一的线性地址空间,程序员只需利用一个标识符,即可表示一个地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。

     4)   段表比页表短,可以缩短查找时间,提高访问速度。

5.段页式

      现在通常用的是段页式管理,就是将段页两者结合,提高了更高的效率。

1.  段页式存储管理的基本思想

段页式存储组织是分段式和分页式结合的存储组织方法,这样可充分利用分段管理和分页管理的优点。

   (1) 用分段方法来分配和管理虚拟存储器。程序的地址空间按逻辑单位分成基本独立的段,而每一段有自己的段名,再把每段分成固定大小的若干页。

     (2) 用分页方法来分配和管理实存。即把整个主存分成与上述页大小相等的存储块,可装入作业的任何一页。程序对内存的调入或调出是按页进行的。但它又可按段实现共享和保护。

     想要了解段页式,得先明白地址映射的一个问题。

2.地址映射

      从我们计算机的发展来看,在x86体系之前我们是16位地址空间,也就是2^16 = 64k,但是在x86之后,变成了20位地址空间,为了兼容过去的16位,我们将段的大小规定为16的倍数,段的起始位置也是16的倍数,段的大小范围就是0--64k。因为从16开始,低4位没有使用,因此只使用高16位就可以记录段的大小,如下图图:

       同时我们使用16位的寄存器:CS(代码段寄存器)、DS(数据段寄存器)、SS(堆栈段寄存器)、ES(附加段寄存器),以及指令指针寄存器IP的值(偏移寄存器),来进行物理地址的计算。

      这也就出现了我们最早的实地址模式

       

       在段的机制中,我们需要记录段的起始地址,段的长度以及权限但是在32位系统中,16位的寄存器就不够记录信息了,这时候我们就引入了32位的两个寄存器:GDTR全局段描述符表寄存器,LDTR局部段描述符表寄存器。虽说是个表格,但它的保存方式是一个数组。如下图:

   而16位的寄存区,其中段选择子为2^13 = 8192,操作系统用12项,用户就只能用8180项了,如下图:

  我们再来看一下这些段的起始位置,段的长度,和权限是怎么存储的?这就需要段描述符表项的定义表了,如下:

    这时就形成了我们的保护地址模式,结合下图: 

       

    

        那什么叫二级映射呢?举例:0x080480fe;

         因为PT是4M比较大,没必要放在内存中,这时候我们就可以放在交换分区里,它是磁盘上开辟空间以内存管理方式来管理,作为对于内存空间的补充。用的时候放在内存上,不用的时候可以放在交换分区,当发送缺页异常的时候,我们可以依靠MMU,进行页面置换。常见的页面置换算法有:OPT、LRU。但多次置换会发生系统抖动。还有我们要知道:程序中变量的虚拟地址在是程序的时候就有地址啦,在磁盘中保存

         上图就是我们的二级映射,也就是我们的段页式的映射方法。

         在段页式系统中,为了获得一条指令或数据,须三次访问内存。第一次访问是访问内存中的段表,从中取得页表始址;第二次访问是访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理空间;第三次访问才是真正从第二次访问所得的地址中,取出指令或数据

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章