【计算机操作系统】内存的基础知识

内存的基础知识

内存的概念与作用

内存是用来暂存CPU 中的运算数据或与硬盘等外部存储器交换数据的计算机硬件
是外部存储器与内部CPU 信息交换的媒介程序执行前都需要先放到内存之中才能被CPU 处理作用:缓和CPU与硬盘之间的速度矛盾
CPU 会将需要运算的数据调度到内存中运算,运算结束后再传送出去,因此内存的性能决定了计算机运算的速度和稳定性
【摘自 什么是内存?

内存由一个一个的 “存储单元” 构成,内存地址从 0 开始,每个地址对应一个存储单元
如果计算机 “按字节编址” 则每个存储单元的大小为 1 字节(8 个二进制位)
*如果字长为16位的计算机 “按字编址” 则每个存储单元的大小为 1 个字(16 个二进制位)

进程运行的基本原理

指令的工作原理

之前介绍过,我们编写的程序经过编译之后会形成与之对应的等价的指令,每一条指令就是让CPU做一件具体的事情,当程序运行的时候,系统会为它建立相应的进程,一个进程在内存中会有程序段、数据段等区域

其实CPU在执行这些一条一条指令的过程当中,就是在处理内存或寄存器当中的一些数据,而指令的工作基于 “地址”(通过地址找到数据存放位置),每一个地址对应一个数据的存储单元

逻辑地址 vs 物理地址

编译后,每个目标模块都从0号单元开始编址,这称为该目标模块的相对地址(或逻辑地址),即:相对于进程的起始地址而言的地址

物理地址空间是指内存中物理单元的集合,它是地址转换的最终地址,进程在运行时执行指令和访问数据,最后都要通过物理地址从主存中存取

地址转换的实现

当装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成物理地址,这个过程称为地址重定位

下面将介绍实现逻辑地址(相对地址)和物理地址(绝对地址)之间的转换的三种装入方式

  1. 绝对装入

    绝对装入是一种最简单的内存管理技术,即把程序直接装入到内存中的某个固定位置。这种方式要求程序在编译时就已经确定了在内存中的位置,运行时不会进行任何内存重定位

    在这里插入图片描述

    绝对装入只适用于单道程序环境,灵活性很差
    单道程序环境:在任意时刻,内存中只装入并执行一个程序(程序的内存地址是固定的,不会与其他程序冲突)

  2. 可重定位装入(静态重定位)

    编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行 “重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)

    在这里插入图片描述

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

  3. 动态运行时装入(动态重定位)

    编译、链接后的装入模块的地址都是从0开始的,装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持

    在这里插入图片描述

    采用动态重定位时允许程序在内存中发生移动
    并且可将程序分配到不连续的存储区中,在程序运行前只需装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存;
    便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间

程序编写到程序运行的过程

在这里插入图片描述

编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言

链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块

装入(装载):由装入程序将装入模块装入内存运行

之前已经介绍过编译和装入,下面我们将介绍三种链接方式

  1. 静态链接

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

    在这里插入图片描述

  2. 装入时动态链接

    程序运行之前,将各目标模块装入内存时,边装入边链接的链接方式

    在这里插入图片描述

  3. 运行时动态链接

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

    在这里插入图片描述


计算机操作系统】 专栏的文章 均有参考 《王道计算机考研 操作系统》 课程视频

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值