超链接到网站怎么做视频文件,如何制作自己的微信小程序,网络营销工具包括,现在去横琴会变黄码吗物理寻址
主存#xff08;内存#xff09;
计算机主存也可以称为物理内存#xff0c;内存可以看成由若干个连续字节大小的单元组成的数组每个字节都有一个唯一的物理地址#xff08;Physical Address#xff09;CPU访问内存前#xff0c;先拿到内存地址#xff0c;然后…物理寻址
主存内存
计算机主存也可以称为物理内存内存可以看成由若干个连续字节大小的单元组成的数组每个字节都有一个唯一的物理地址Physical AddressCPU访问内存前先拿到内存地址然后通过内存地址访问内存中数据指令 总线的分工
数据总线负责传输实际数据的地址总线负责传输数据地址的用来确定到底把数据传输到哪里去是内存的某个位置还是某一个 I/O 设备控制总线负责传输控制信号的用于控制对于总线的访问 分段寻址 虚拟寻址 虚拟寻址Virtual Addressing:
CPU 通过虚拟地址 Virtual AddressVA来访问主存虚拟地址比如段选择子 段内偏移 在送到内存之前先转换成适当的物理地址将一个虚拟地址转换为物理地址的过程称为地址转换Address Translation 使用虚拟寻址的方式可以起到内存保护的作用使得每个程序的内存相互隔离一个程序的内存不会被其他的程序破坏从而可以实现在内存中同时存储多个程序。
当然虚拟寻址不止这一点优点它还可以降低用户程序对内存使用的复杂度 如果用户自己管理物理内存太过于复杂容易出现内存冲突问题引入虚拟地址后不同用户程序的虚拟地址是相互独立隔离的用户只需要关心如何分配虚拟地址即可由操作系统负责管理物理内存。
地址空间
地址空间 address space是一个非负整数地址的有序集合比如0, 1, 2, 3, 4…
一个程序拥有的虚拟地址也是一个非负整数地址的有序集合所以我们可以称为虚拟地址空间。 相对虚拟地址空间还有一个物理内存地址空间物理内存地址空间的大小就是物理内存的容量 M 个字节所以物理地址空间为:0, 1, 2, 3…M-1
主存中的每个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。 ELF 文件最后留下的两个问题
问题一如果说32位系统的话最大内存容量为4G这个其实还好但是64位系统的最大内存容量为256T这个也太恐怖了根本都没见过这么大的内存那为什么可以支持这么大的内存地址呢
解决方案使用虚拟地址
问题二所有的用户空间的内存被一个程序占据了吗那其他程序需要内存的话怎么办
两个程序可以使用相同的虚拟地址虚拟地址可以被随便使用最终由操作系统做内存映射转换为物理地址。 分页寻址
分段寻址的缺点 外部碎片导致内存利用率降低假如有60M内存的碎片没有被使用此时如果有一个程序需要50M内存就会放不下 分段机制并不是一个高效管理内存的机制
分段寻址出现的原因 当时在8086处理器引入分段的目的是为了解决 16位 CPU 寻址 20位内存的问题 32 位处理器可以寻址 4G 内存 64 位处理器可以寻址更大的内存
分页 虚拟内存分成若干个大小相同的虚拟页Virtual Page, VP 物理内存分成若干个大小相同的物理页Physical Page, PP也可以称为页帧(PF) VP的大小 PP的大小, PP的大小可以是4KB、8KB、16KB…一般是 2 的幂 地址翻译 页表MMU 如何确定某个虚拟页存放在哪一个物理页
页表页表维护了虚拟页到物理页的映射关系页表中的每一项叫页表项 PTE一个虚拟地址被分成两部分其中低 X 位用来表示页内偏移 VPO页大小2^X剩余的部分用来表示虚拟页号 VPN在页表中查找虚拟页号 VPN 对应的物理页号 PPN然后由物理页号 PPN 页内偏移VPOPPO得到对应的物理地址 分页寻址的地址翻译工作主要由硬件软件配合实现
MMU内存管理单元专用硬件MMU单元负责虚拟地址到物理地址的翻译页表由操作系统软件来维护 地址翻译工作主要是由MMU内存管理单元硬件到页表基址寄存器中查找页表后根据虚拟地址翻译成物理地址
需要注意的是MMU是一个位于CPU中的硬件单元而页表是位于操作系统软件中的程序数据它并不在CPU中。
多级页表 - 压缩页表占用内存的大小 多级页表如何寻址 通过每一级虚拟页表目录找到下一级页表项中的物理位置最终找到对应的物理页号再加上页内偏移得到物理地址虚拟页内偏移等于物理页内偏移 分页寻址总结 每个程序都有自己的虚拟页表当 CPU 执行程序 2 的时候CR3 寄存器会切换到对应程序 2 的虚拟页表的基地址MMU 负责将程序代码段或数据段的虚拟地址通过多级页表翻译成对应的物理地址不同的应用程序可以使用相同的虚拟地址但是最终经过MMU翻译之后会得到不同的物理页号PPN, 分配的是不同的物理地址