地址空间、地址生成
地址空间定义
1、物理地址空间:硬件支持的地址空间,起始地址 0,到地址MAXsys,由硬件管理、控制
2、逻辑地址空间:一个运行程序所拥有的内存范围:起始地址 0,到地址 MAXprog,指向物理地址空间
逻辑地址生成
1、生成过程
(1)编译:高级语言 -> 汇编语言
(2)汇编:汇编语言 -> 机器语言
(3)链接:linker 将需要的文件拼接起来
(4)加载:即重定位,程序加载到内存,程序此时在内存中仍然是逻辑地址
(5)例,一个 C 程序中的函数位置、变量名是一种逻辑地址,将 C 语言编译成汇编语言,汇编语言中依然使用变量和函数名等来进行编写,将汇编语言进行汇编形成 .o 程序,.o 程序的起始地址都是从 0 开始的,将之前汇编程序的变量和函数符号名称转变为相应的连续逻辑地址空间,之后将多个 .o 程序通过 linker 进行链接为单一的可执行程序 .exe 文件,.exe 文件是一种存放在硬盘中,且可以在内存中进行执行的程序,最终硬盘中的 .exe 文件通过 loader 载入内存中执行,相对于原始硬盘中的 .exe 文件,载入内存中的 .exe 文件的地址有一定的偏移量,有了这个偏移量,所有的.exe文件中的功能,都能够对应找到相应的文件和数据
2、生成时间
(1)编译:假定起始地址已知,那么编译时就可以生成逻辑地址,但是当起始地址改变时,必须重新编译
(2)加载:编译时起始位置未知时,编译器需要生成可重定位的代码,等到加载时重定位,生成绝对地址,通常在可执行文件的前面有一个重定位表,加载的时候改成绝对地址
(3)执行:当执行到一条具体指令的时候,才知道它确切访问的地址,这种情况出现在使用虚拟存储的系统里,优点:在程序执行过程中就可以将代码移动,而前面两种生成时机都不可以,但是需要地址转化硬件支持
物理地址生成
1、CPU
(1)ALU(计算逻辑单元):需要逻辑地址中的内存内容(读或写)
(2)MMU(内存管理单元):寻找在逻辑地址和物理地址之间的映射,转换:逻辑地址 -> 物理地址
(3)控制器:通过总线,发送物理地址请求,到主存
2、内存:发送物理地址的内存内容到 CPU,或者将 CPU 给的数据存储到物理地址
3、OS:建立逻辑地址(LA)和物理地址(PA)之间的映射
4、生成过程
(1)OS:建立逻辑地址和物理地址的映射关系表,同时确保每一个程序访问的地址空间是合法的(界限寄存器、基准寄存器:设置逻辑地址空间基准、界限),不能产生交叉干扰的情况
(2)当 CPU 要执行某条指令时,其 ALU 部件会发出请求指令(发送逻辑地址)
(3)CPU 中的 MMU 部件会根据逻辑地址和物理地址的映射表,查找到 ALU 发送来的逻辑地址对应的物理地址
(4)若没有,则会转移到内存中继续查找物理地址,若找到,则 CPU 的控制器会给主存发出请求,需要某物理地址的内容
(5)主存会将物理地址中的内容,通过总线传递到 CPU
(6)最后 CPU 拿到指令内容,开始进行执行
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战