目录
1动态重定位
作用
把每个进程的地址空间映射到物理内存的不同部分
实现
每个CPU配置2个特殊的硬件寄存器,叫作基址寄存器和界限寄存器,当一个程序运行时,程序的起始物理地址装载到基址寄存器中,程序的长度装载到界限寄存器中,每次一个进程访问内存,取一条指令,读或写一个数据字,CPU硬件会在把地址发送到内存总线之前,自动把基址值加到进程发出的地址值上,同时,它检查程序提供的地址是否等于或大于界限寄存器里的值,如果地址超出界限,则产生错误并中止访问
缺点
每次访问内存都需要进行加法和比较运算,加法由于进位传递时间的问题,在没有使用特殊电路的情况下会显得很慢
2分段
把一个程序分成好几个段,每个段有各自的特点,各自的用途,分别放入内存
如何定位具体指令?<段号,段内偏移>,寻址的时候要地址要加上对应的段的基址,原来的PCB中只需要放整个程序的基址,分段后,PCB中要放每一个段的基址,这个称为进程段表(LDT)。操作系统的进程对应的段表就是GDT表
3虚拟内存
虚拟内存的基本思想
每个程序拥有直接的地址空间,这个空间被分割成多个块,每一块称作一页或者页面,这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序
当程序引用到一部分在物理内存中的地址空间时,由硬件理科执行必要的映射
当程序引用到一部分不在物理空间内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的命令
分页
右程序产生的地址称为虚拟地址,它们构成了一个虚拟地址空间
在没有虚拟内存的计算机上,系统直接将虚拟地址怂到内存总线上
在有虚拟内存的计算机上,虚拟地址先被送到MMU(内存管理单元)上,MMU把虚拟地址映射为物理内存地址
虚拟地址按照固定大小(一般是4K,或者是2的整数次幂)划分成被称为页面的若干单元,在物理内存中对应的单元称为页框
在执行一条指令时,当MMU找不到虚拟地址的映射时,就会发生缺页中断,使CPU陷入到操作系统中,操作系统会找到一个很少使用的页框,且把它的内存写入到磁盘,然后把需要访问的页面读到刚才回收的页框中,修改映射关系,然后重新执行指令
MMU操作过程
页表
虚拟地址被分为虚拟页号和偏移量
虚拟页号用作页表的索引,以找到虚拟页面对应的页表项
页表项的结构
加速分页过程
①转换检测缓冲区
为计算机设置一个小型的硬件设备,将虚拟地址直接映射到物理地址,而不必再访问页表,这种设备称为转换检测缓冲区(TLB)或相联存储器或快表
②软件TLB管理
针对大内存的页表
①多级页表
避免把全部页表一直保存在内存中
②倒排页表