最近操作系统学到了存储管理这一章节,再加之前一段实验室的小伙伴刚分享了他对这方面的理解,现在回头看看很多困惑都想清楚了.
1.基本概念
逻辑地址:相对于程序(即进程)的偏移地址;
线性地址:逻辑地址到物理地址变换之间的中间层(即逻辑地址+段基址)
物理地址:出现在CPU外部地址总线上的寻址物理内存的地址
虚拟内存:指计算机呈现出要比实际拥有的内存大得多的内存量(给人的感觉)
MMU:中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。
分页存储管理:当代系统一般都采用的是页式管理内存,什么是页式管理,简单的来讲就是将内存分为固定大小的内存块,x86下一块大小是4k,一块我们称为为一页。抽象出的虚拟内存也是按页大小分配的,而物理内存的页一般称为页框(页帧或内存块),磁盘上的交换分区也是按页大小来组织的,这样我们能发现虚拟内存->物理内存->磁盘都是相同大小的结构来组织数据。
页表:分页系统中,允许将进程的每一页离散地存储在内存的任一物理块中,为了能在内存中找到每个页面对应的物理块,系统为每个进程建立一张页面映射表,简称页表。页表的作用是实现从页号到物理块号的地址映射。
页表项:页表项就是页表中的每一项,就和链表中的每一个节点,数组中的每一个元素一样.页表项有什么内容呢,首先肯定要有地址转换,也就是虚拟地址通过变换成物理地址,其次还有一些标记位.
快表:快表其实就是一个页表项的缓存,如果没有快表,我们需要多次访问内存才能得到我们需要的页表项,前面说过二八定理,我们将经常使用的页表项缓存到TLB快表中,由于快表也是硬件集成的,它是并行的来查找,所以速度非常快。
分段存储管理:将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。
段表:分段系统中,允许将进程的各段离散地存储在内存的任一物理块中,为了能在内存中找到每个段面对应的物理块,系统为每个进程建立一张页面映射表,简称段表。段表的作用是实现从逻辑段到物理块地址的映射。
段页存储管理:段页式内存管理有段表和页表,先通过段表来找到段,在通过段表的段内偏移其实是页框号加页内偏移,这样就再次索引页表来定位。因为段页式管理是段式管理的页式管理方案结合而成的,所以具有它们二者的优点。但反过来说,由于管理软件的增加,复杂性和开销也就随之增加了。另外,需要的硬件以及占用的内存也有所增加。
注:先大体有这么个印象,等到把这部分全部学完后,对这些概念的理解以及为什么会出现就理解了.
2.整体框架图
注:这是实验室小伙伴的理解图,下面我的理解可能会有些不同,但是大致思想大同小异.
3.整体思路
首先,程序想要运行必须加载进内存形成可执行的程序(即进程),每个进程都有自己独立的内存空间(物理内存和虚拟内存).物理内存会涉及到物理内存的划分,管理,分配以及回收;虚拟内存会涉及到调入和置换算法;两者之间的地址转换等等.另外磁盘也会涉及其结构,如何存取数据,磁盘调度的一些算法.
下面就开始一起仔细探讨了.