一、概述

二、什么是内存?有何作用?

内存是用于存放数据的硬件。程序在执行之前,需要先放到内存中才能被CPU处理
平时,我们各种各样的软件都是存储在外存(辅存)里。电脑的话,一般是存储在硬盘里,但是硬盘是一种慢速的设备,而CPU是一种超快速的设备。所以,如果CPU要处理的程序、数据直接从硬盘(外存)当中存取的话,CPU会有大量的时间在等待外存的存取操作的完成。这里就出现了外存与CPU的速度矛盾,因此引入了内存。

三、几个常用的数量单位

四、进程的运行原理——指令


可见,我们写的代码要翻译成CPU能识别的指令。这些指令会告诉CPU应该去内存的哪个地址存/取数据,这个数据应该做什么样的处理。在这个例子中,指令中直接给出了变量x的实际存放地址物理地址)。
实际在生成机器指令的时候并不知道该进程的数据会被放到什么位置。所以编译生成的指令中一般是使用逻辑地址相对地址

五、逻辑地址 VS 物理地址

六、从写程序到程序的运行流程


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

但是,如果我们把装入模块放入了起始内存地址为100的存储单元中时,这些指令中包含的地址参数其实就是错误的。比如下图中的80应该该为180。

如何解决这个问题呢?

这里引入了装入的三种方式(用三种不同的方法完成逻辑地址到物理地址的转换):

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

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

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

七、链接的三种方式

  1. 静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
  2. 装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。
  3. 运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。

八、总结

五、操作系统——内存相关基础知识 和 进程运行的基本原理(详解)相关推荐

  1. 计算机中的光学知识,科学网—光学基础知识大讲堂 ——第3期:详解电磁辐射 - 何卓铭的博文...

    光学基础知识大讲堂 --第3期:详解电磁辐射 何卓铭 电磁辐射作为一种看不见.摸不着的场,是电磁波能量传递的一种方式.而我们生活着的地球环境中,便充斥着大量的电磁辐射,不过不用害怕,只有当电磁辐射达到 ...

  2. 网络基础知识-TCP/IP协议各层详解

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  3. 二十五、内存的基础知识

    一.知识总览 二.什么是内存,有何作用 内存可以存放数据,程序执行前需要先放到内存中才能被CPU处理-----缓和CPU与硬件之间的速度矛盾. 三.链接的三种方式 四.总结

  4. 操作系统—内存的基础知识

    建议将思维导图保存下来观看,或点击这里在线观看

  5. 计算机excel函数基础知识,《计算机基础知识复习资料》Excel函数详解.doc

    目 录 一.函数应用基础1 (一)函数和公式1 1.什么是函数1 2.什么是公式1 (二)函数的参数1 1.常量2 2.逻辑值2 3.数组2 4.错误值2 5.单元格引用2 6.嵌套函数3 7.名称和 ...

  6. 【NGUI基础知识】—Scroll View(滚动视图)详解

    下面给大家分享下NGUI中Scroll View(滚动视图)中的各功能属性,帮助大家去理解及使用. ScrollView属性 1.Content Origin: 控制 panle 相对的 Scroll ...

  7. linux dd入门,Linux基础知识:Linux中DD命令详解

    1.dd命令简介 功能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换.可以用该命令实现DOS下的diskcopy命令的作用.先用dd命令把软盘上的数据写成硬盘的一个寄存文件 ...

  8. Android基础知识 — 1.3-ARM和Thumb指令详解1

    Thume指令可以理解为ARM指令集的一个子集 1. 指令格式 ARM指令的基本格式: <opcode>{<cond>}{S}{.W|.N}<Rd>,<Rn& ...

  9. 操作系统之内存管理:1、内存管理基础知识(指令工作原理、地址转化、程序运行过程)

    1.内存管理基础知识(指令工作原理.地址转化.程序运行过程) 思维导图 什么是内存? 指令的工作原理 装入模块的三种实现 绝对装入 可重定位装入 动态重定位 程序的运行过程 链接的三种方式 思维导图 ...

最新文章

  1. jupyter notebook出现cannot import name 'create_prompt_application'问题(Died Kernel)
  2. 解决go包管理代理网址无法访问:proxy.golang.org 换成goproxy.cn
  3. Dubbo学习总结(2)——Dubbo架构详解
  4. 【Java】Object基类
  5. java jar apktool,ShakaApkTool.jar v3.0.0(反编译显示中文的apktool)下载
  6. 力扣46. 全排列(JavaScript)
  7. mysql 编码种类_MySQL 编码
  8. hadoop1 hadoop2 fair-schduler 配置和使用
  9. MP-Ukagaka伪春菜插件扩展:在对话框用iframe显示链接
  10. Google Play市场考察报告-2
  11. mysql中的事务_mysql中的事务,你理解嘛?
  12. base64与图片互换
  13. 重读《从菜鸟到测试架构师》--构建测试
  14. Android精仿淘宝/QQ空间标题栏渐变效果
  15. Multisim BLUE14.0使用介绍
  16. CLEAR: Contrastive Learning for Sentence Representation
  17. DenseTNT翻译
  18. MarkMan – 马克鳗 IU好伙伴啊
  19. 工程项目失败案例_失败工程
  20. 联发科、联芯TD合作后期走势分析

热门文章

  1. 计算机系统的部件名称作用,电脑配件与每个配件作用详细完整的解释
  2. 计算机如何添加管理员权限,电脑使用代码如何添加管理员权限
  3. 如何获取option的下标和值_数智化时代下,如何获取企业增长密码?
  4. windows无法访问指定设备路径或文件_完全免费的文件数据恢复工具:Microsoft Windows File Recovery...
  5. Python的Django框架中forms表单类的使用方法详解
  6. Linux环境下Mysql的安装教程及安装过程常见问题的解决方法
  7. Linux:守护进程解析、如何实现守护进程
  8. python更新es数据_python操作es增删改查
  9. c语言编程题目(一)
  10. linux-0.11内核 调试教程+GCC源代码