操作系统-内存管理1(概述)

一、 逻辑地址与物理地址

逻辑地址:
程序指令的执行过程是,CPU根据指令码和内存地址找到要操作的数。但是我们在编写程序时,在程序加载进内存之前是不知道数据的实际物理内存地址的,所以生成的指令一般是使用逻辑地址(相对地址)。
物理地址:
数据在内存中的实际位置。一般我们知道一个进程在内存中的起始位置p,又知道变量x的相对位置,则x的实际物理地址就是起始位置p + 相对位置。

二、程序的链接与装入内存

2.1 链接
源代码首先会被编译器编译成目标文件,目标文件在装入内存之前首先会被链接成装入模块。链接有三种方式:静态链接、装入时动态链接。运行时动态链接。
2.1.1 静态链接
在序运行之前,先将各个目标模块和他们所需的库函数链接成一个完整的可执行文件(装入模块),之后不再拆开。

2.1.2 装入时动态链接
将目标模块一边装入内存,一边链接。

2.1.3 运行时动态链接
在程序执行中需要该模块时,才对他进行链接,其优点是便于修改和更新,便于实现对目标模块的共享。

2.2 装入
装入时将可执行文件装入内存,有三种装入方式:绝对装入、静态重定位、动态重定位。

2.2.1 绝对装入
在编译时,如果知道程序将放到内存中的哪个位置,编译程序将生成绝对地址的目标代码。这种方式只适用于单道程序环境。

2.2.2 静态重定位
又称可装入重定位,编译、链接后的目标模块都是从0开始的,指令中存放的地址也都是相对地址,但是在装入时,将逻辑地址更换为实际地址。这个操作是在装入时一次更换完成的。
特点:作业在装入内存时,必须分配其要求的全部空间,否则不能装入。

2.2.3 动态重定位
又称动态运行时装入,编译,链接后的目标模块都是从0开始。装入程序把装入模块装入内存后,并不会吧逻辑地址更换成物理地址,而是在运行指令时,才对逻辑地址进行转换。这时需要一个重定位寄存器,该寄存器记录的是该进程在内存的起始位置。那么实际的内存地址就是寄存器中的起始位置加上逻辑地址。
在这里插入图片描述

三、内存管理需要提供哪些功能

1、内存的分配与回收
2、内存地址的扩充(覆盖技术、交换技术、虚拟内存)
3、地址转换
逻辑地址到物理地址的转换,三种方式:绝对装入、可重定位装入、动态运行时装入。
4、进程保护(隔离)
保护进程只在自己的内存空间中运行。实现方式有两种:
1)设置上下限寄存器,确定进程的地址范围
2)利用重定位寄存器(保存进程起始位置)和界地址寄存器(保存进程最大长度)确定进程的地址范围。

3.1 覆盖技术
解决早期内存没有程序大,不够用的情况。内存分为覆盖区和固定区,将一个程序分成多个段,常用的放在固定区,不常用的放在覆盖区,需要使用是调入内存,不使用时调出内存。

优点:一个100M的程序,通过覆盖技术可能只需要50M就能满足,在逻辑上看似内存扩充变大了。
缺点:需要程序员显性的声明覆盖结构,增加了编程的难度。(该技术以退出历史舞台)

3.2 交换技术
当内存紧张时,将内存中的某些进程换入磁盘中,将外存中已经准备好的某些进程换入内存(进程在内存和磁盘之间动态调度)

总结:覆盖是在同一个进程之间进行的,交换是在不同进程之间进行的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值