内存管理知识点
- 存储器管理的功能:
- 内存分配
- 地址重定位(地址转换):把程序空间里的逻辑地址转换成内存空间里的物理地址
- 静态重定位:
- 动态重定位:在程序运行的时候完成的
- 内存空间的共享和保护
- 内存扩充(虚拟内存)
- 多种存储管理方式
- 单一连续分配:在单用户、单任务操作系统中,把内存分成系统区和用户区。系统区只给操作系统使用。
- 固定分区:除了分配给操作系统的系统区,将用户区划分成固定数量、固定大小的分区。每个分区只可装入一个作业。
- 可变分区:各个分区是在进程进入内存时才创建,大小刚好与进程大小适应。
- 可变分区有几种分法?
- 最先适应FF:空闲表按位置排列,找到第一个满足要求的空闲块分配它,并修改空闲表
- 最佳适应BF:空闲表从小到大排空闲区,找到第一个满足要求的空闲块,改表
- 循环适应CFF:最先适应的变种,从上次找的位置开始找(不从头开始找)
- 最差适应WF:找最大的分区分配
4. 分页存储:
- 把内存分成一页一页的固定大小,一个进程需要多少页就分配多少页,没有外部碎片的产生,也让比较大的程序可以在比它小的内存上运行了。
- 虚拟地址转换:将地址转换成二进制,前n位是页号(根据页面数计算,如32页就有5位),后面是页内偏移量,不变。将页号转换成对应的实际页号,接上页内偏移量就是物理地址了。
5. 分段存储:
- 按照用户程序的逻辑来分配内存,用户程序分几个函数、数据区、栈,那就分几段。
- 段的地址变换:
- 1 在系统中设置段表寄存器,存放段的起始位置和段长度
- 2系统将逻辑地址中的段号进行查表,如果没有则说明段号越界,产生越界中断
- 3如果没有产生越界中断,则看长度是否超出段的长度。
- 存取一条指令或者数据需要访问主存两次,一次访问段表,一次访问需要的指令或数据
- 页式虚拟内存管理(请求分页管理):
- 程序在运行时将部分页面调入内存即可,不全部调入。
- 段页式存储管理:
- 先分段,在段内分页。