【内存管理】

无存储器管理的缺点

  1. 用户程序可以寻址内存中的每个字节,容易破坏操作系统
  2. 难以同时运行多个程序,因为都会采用绝对物理地址,类似跳转指令在程序装载后,会运行到意想不到的地址去。

要使多个程序同时处于内存中并且不互相影响,需要解决两个问题:保护和重定位

地址空间

要解决上述问题,先引入地址空间的概念。
地址空间概念:一个进程可用于寻址内存的一套地址集合
特点:每个进程都有自己的地址空间
例如,程序①的地址28对应的物理地址和程序②的地址28对应的物理地址不一致

动态重定位

利用每个程序拥有自己的地址空间,将不同的程序映射到不同的物理内存,这就叫动态重定位
具体实现方式是采用基址寄存器和界限寄存器,这种方法的缺点在于,每次访问内存都需要做加法和比较运算,加法运算由于进位传递,会十分消耗时间

处理内存超载的方法

所有进程所需的RAM数量通常是会超过内存大小,所以内存超载是很常见的现象,有两种解决方法:交换技术虚拟内存
交换:把进程完整地调入内存中运行一段时间,然后再把它存回到磁盘。(或者周期性唤醒以完成相关工作)
虚拟内存:把进程部分调入内存中运行

虚拟内存

每个程序有自己的地址空间,该空间被分割为页(page),每页有连续的地址范围。
当程序引用到一部分在物理内存中的地址空间时,由硬件立即执行必要的映射。
当程序引用到一部分不在物理内存的地址空间时,由操作系统将缺失的部分装入物理内存并重新执行失败的指令

跟踪内存使用的方法

位图空闲区链表

位图:将内存划分为分配单元,每个分配单元对应位图的一位。0表示空闲,1表示占用

当需要把占用k个分配单元的进程调入内存时,先搜索位图,找到有k个连续0的串,而查找的这个过程是比较耗时的操作,这是位图的缺点。

空闲区链表:维护一个链表,该链表记录了已分配内存段和未分配内存段,通常采用双向链表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值