一、什么是内存
内存就是用来存放数据的,跟硬盘一样,都是一个硬件,只不过硬盘不能直接被cpu访问,而内存可以被cpu访问,别问,问就是冯诺依曼机的设定
二、内存有什么作用
- 程序执行前需要先放到内存中才能被cpu处理,缓和cpu与硬盘之间的速度矛盾
- 在多道程序环境下,即操作系统中并发运行QQ应用程序和微信应用程序,这两个程序数据都需要放在内存中,我们需要要给内存的每个存储单元编上地址,用来区分不同程序的数据
三、进程运行的基本原理
-
指令的工作原理
代码->编译->生成指令->创建进程->指令放入内存->处理机调度->按序执行指令(操作码+地址码) -
逻辑地址VS物理地址
逻辑地址是相对进程起始地址而言的地址
物理地址是内存里的数据真实存放的地址 -
从写程序到程序运行
- 编写代码
- 编译
由源代码文件生成目标模块 - 链接
由目标模块生成装入模块,链接后形成完整的逻辑地址 - 装入
将装入模块装入内存,装入后形成物理地址
-
如何实现地址转换
-
绝对装入,编译时产生绝对地址,绝对装入方式只允许目标模块装入到内存指定位置,适用单道程序环境
-
静态重定位装入,装入时将逻辑地址转换为物理地址,适用多道程序环境,缺点需要分配整块内存,而且内存地址需要连续
-
动态重定位装入(dynamic runtime loading),运行时将逻辑地址转换为物理地址,需要有重定位寄存器作辅助。优点是目标模块装入内存无需任何修改,保留逻辑地址,在执行过程中结合寄存器转换成物理地址,允许程序在内存中移动
-
-
三种链接
-
静态链接,在程序运行之前,生成好一个完整的可执行文件,包含用到的宏、用到的库函数,这个可执行文件也叫装入模块
-
装入时动态链接,去掉装入模块概念,直接将目标模块转入内存时,再链接用到的宏、库函数,这个是解释型编程语言?
-
运行时动态链接,在程序运行中需要执行目标模块时,才对它进行链接。优点是便于修改和更新,利于实现对目标文件的共享
-
四、补充
- 存储单元和内存地址关系
内存比喻酒店
内存地址就好比酒店房间
存储单元就好比房间能睡几个人(放多少比特数据) - 按字节编址
酒店房间能睡8个人 - 按字编址
不同酒店,他房间大小不一样,得具体分析
若计算机存储字长16位,酒店房间能睡16个人