• 内存概念,进程运行的基本原理(指令,逻辑地址与物理地址的转换,程序运行的过程)


    1.内存

    内存可存放数据。
    程序执行前需要先放到内存中才能被CPU处理:缓和CPU与硬盘之间的速度矛盾。

    1.内存地址

    内存地址从0开始,每个地址对应个存储单元。

    2.存储单元

    内存中也有一个一个的“小房间”,每个小房间就是一个“存储单元”。

    • 如果计算机“按字节编址”则每个存储单元大小为1字节,即1B,即8个二进制位。
    • 如果字长为16位的计算机“按字编址”,则每个存储单元大小为1个字;每字的大小为16个二进制位。

    3.数量单位

    一个字节等于八个比特位。
    1 B = 8 b 1B=8b 1B=8b
    2 10 = 1 K ( 千 ) 2^{10} = 1K(千) 210=1K()
    2 20 = 1 M ( 兆,百万 ) 2^{20} = 1M(兆,百万) 220=1M(兆,百万)
    2 30 = 1 G ( 十亿,千兆 ) 2^{30} = 1G(十亿,千兆) 230=1G(十亿,千兆)

    2.进程运行的基本原理

    1.指令的工作原理

    操作码+若干参数(可能包含地址参数)
    在这里插入图片描述
    指令的工作基于“地址”,每个地址对应一个数据的存储单元。

    可见,我们写的代码要翻译成CPU能识别的指令。
    这些指令会告诉CPU应该去内存的哪个地址读/写数据,
    这个数据应该做什么样的处理。
    在这个例子中,我们默认让这个进程的相关内容从地址#0开始连续存放,指令中的地址参数直接给出了变量x的实际存放地址(物理地址)。

    2.逻辑地址(相对地址)vs物理地址(绝对地址)

    程序经过编译、链接后生成的指令中指明的是逻辑地址(相对地址),
    即:相对于进程的起始地址而言的地址。

    3. 如何实现地址转换(三种装入方式)

    1.绝对装入

    绝对装入:
    在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。
    装入程序按照装入模块中的地址,将程序和数据装入内存。

    在这里插入图片描述
    编译、链接后得到的装入模块的指令直接就使用了绝对地址.
    绝对装入只适用于单道程序环境

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

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

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

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

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

    在这里插入图片描述

    4.从写程序到程序运行的过程

    在这里插入图片描述

    • 编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言)
    • 链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块。
    • 装入(装载):由装入程序将装入模块装入内存运行。

    5.三种链接方式

    1.静态链接:

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

    2.装入时动态链接:

    将各目标模块装入内存时,边装入边链接的链接方式。

    3.运行时动态链接:

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

  • 相关阅读:
    信息系统项目管理师---第十一章项目风险管理
    爬虫三大库
    MongoDB入门与实战-第一章-介绍
    PHP 实现 SHA256 with RSA 签名 (实例讲解)
    Redis面试题(五十六道)
    Java 如何将目录以数型结构Tree结构形式返回至前端展示?
    算法通关村第九关-白银挑战二分查找与高频搜索树
    Unity 图片相关
    MapReduce调优方案
    不同的子序列问题I
  • 原文地址:https://blog.csdn.net/qq_61888137/article/details/133779877