操作系统--内存

简介

内存适用于存放数据的硬件。程序执行前需要先放到内存中才能被CPU处理

image-20220807212301407


进程运行的原理--指令

例如:x=x+1的代码运行时内存地址的逻辑

image-20220807213708097

image-20220807213750887

image-20220807213830001

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


逻辑地址 与 物理地址

物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址。在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端

逻辑地址:CPU所生成的地址。逻辑地址是内部和编程使用的、并不唯一。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址(偏移地址),不和绝对物理地址相干

  • 一个逻辑地址空间是指CPU产生的所有逻辑地址的集合

EG:编译时只需确定变量x存放的相对地址是100(也就是说相对于进程在内存中的起始地址而言的地址)。CPU想要找到x在内存中的实际存放位置,只需要用进程的起始地址+100即可


从写程序到程序运行

链接三种方式

静态链接

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

img

装入时动态链接

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

image-20220807221504341

运行时动态链接

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

image-20220807221707513

装入模块到装入内存

image-20220807220001730

image-20220807220107130

绝对装入

image-20220807220323999

静态重定位

image-20220807220512376

动态重定位

image-20220807220711990

image-20220807220830543

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


内存管理

image-20220807222302838

存储保护

设置上下限寄存器

image-20220807222552380

越界检查

image-20220807222729066

地址转换

image-20220807222934842

内存空间扩充

覆盖技术

image-20220807223206997

例子如下B、C模块不是同时使用的

image-20220807223404277

必须由程序员声明覆盖结构,操作系统完成自动覆盖

缺点:对用户不透明,増加了用户编程负担

覆盖技术只用于早期的操作系统中,现在已成为历史

交换技术

image-20220807223640032

中级调度(内存调度),就是要决定将哪个处于挂起状态的进程重新调入内存

image-20220807224030374

内存空间分配与回收

image-20220807224254420

连续分配管理方式

单一连续分配

image-20220807224505515

固定分区分配

image-20220807224701776

image-20220807224837583

动态分区分配

image-20220807225026957

image-20220807225339969

image-20220807225718015

image-20220807225811734

image-20220807225854676

image-20220807230014048

image-20220807230231184

posted @   伊文小哥  阅读(113)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示