操作系统-内存

一、内存

内存是用于存放数据的硬件,程序执行前需要放到内存才能被CPU处理
内存地址从0开始,每个地址对应一个存储单元
在这里插入图片描述


二、指令

高级语言编译后的代码,会形成对等的机器指令
在这里插入图片描述
内存中,变量存放在数据段,指令存放在程序段。CPU会依次执行指令,每个指令对应的有操作码和地址码,一般来说机器指令不知道该进程数据会存放在哪里,这里指令给出的地址参数一般是逻辑地址

进程在逻辑上由程序段数据段PCB组成

在这里插入图片描述


三、逻辑地址,相对地址

编译时产生的指令只关心 相对地址(逻辑地址),实际放入内存中根据起始位置得到 绝对地址(物理地址)

在这里插入图片描述


四、写程序到程序运行

在这里插入图片描述
编译:由程序将用户源代码编译成若干个目标模块(翻译为机器语言)
链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成完整的装入模块
装入:由装入程序将装入模块装入内存运行

在装入过程要先完成逻辑地址物理地址的转换,然后将程序和数据装入内存中指定的物理地址。根据逻辑地址到物理地址所采用的不同转换方法将装入分为三种方式,下面详细讲解这三种装入方式(逻辑地址转物理地址方式)


五、装入三种方式

5.1 绝对装入

定义:即在编译时,就已经知道程序将放到内存中的哪个位置,编译程序直接产生绝对地址(物理地址)的目标代码。装入程序按照装入模块中的地址,直接将程序和数据装入内存即可


在这里插入图片描述


这种方式只适用于单道程序环境,因为单道程序保证只有一个程序在访问内存,不会导致不同程序相互竞争占用同一块内存的情况。



5.2 静态重定位


定义:装入之前就必须分配其需要的全部内存空间,并且确定内存的起始位置,然后装入程序一次性完成所有指令的逻辑地址到物理地址的转换


在这里插入图片描述


静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间。

5.3 动态重定位

定义:这种方式就是在将逻辑地址转为物理地址推迟到了具体的程序运行时期,具体是通过一个系统设置的重定位寄存器实现的。重定位寄存器中存放了装入模块在内存中的起始地址,我们只需要将逻辑地址与寄存器中的起始地址相加就可以得到实际的物理地址

在这里插入图片描述
采用动态重定位时允许程序在内存中发生移动(只需要对应修改重定位寄存器中的起始位置就可以了)

5.4 总结

1、绝对装入和静态重定位装入的方式,都是一次性将程序全部装入到指定内存位置,
并且后续程序位置不能发生改变;
2、动态重定位装入方式是可以一部分一部分的装入内存,并且程序在内存中的位置并不固定,
可以发生移动(只需要对应修改重定位寄存器中的起始位置就可以了)

六、链接三种方式

链接是将编译为CPU可以识别的多个机器代码目标模块整合为一个完整的装入模块。根据链接的时期将其分为三种方式

6.1 静态链接

在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开
在这里插入图片描述

6.2 载入时动态链接

将各目标模块装入内存时,边装入边链接的链接方式(一次性依次将所有模块装入)
在这里插入图片描述

6.3 运行时动态链接

在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享
在这里插入图片描述

七、思维导图

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值