热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

虚拟存储器--虚拟地址与物理地址

虚拟存储器--虚拟地址与物理地址计算机在运行程序时,需将代码加载入内存中,CPU读取内存中的代码并执行。早期的计算机在没有引入虚拟存储器之前,需将整个待运行的程序加载到内存中,因为内存空间有限,当
 

虚拟存储器--虚拟地址与物理地址

计算机在运行程序时,需将代码加载入内存中,CPU读取内存中的代码并执行。

早期的计算机在没有引入 虚拟存储器之前,需将整个待运行的程序加载到内存中,因为内存空间有限,当待加载的程序过大时就会出现问题(多进程,则需要占用更多的内存空间)。

现代计算机引入虚拟存储器的概念,通过将对内存进行抽象,将其作为存储在硬盘上数据的高速缓存,只将当前进程部分代码缓存到主存中(当前进程的程序较少时,可以全部缓存在主存中),从而提高了主存的利用率,使其同时可以容纳更多的进程同时运行。

简述
虚拟存储器是一个抽象概念,它为每个进程提供一个假象,即每个进程都在独立的使用主存。
每个进程看到的是一致的存储器,称为虚拟地址空间。
地址空间最上面的区域是为操作系统中的代码和数据保留的,对所有的进程一样。底部存放用户进程定义的代码和数据。
进程的虚拟地址空间如下图:


虚拟存储器是对主存的的一种抽象,基本思想:把一个进程虚拟存储器的数据存储在磁盘中,用主存作磁盘的缓存。即虚拟地址空间维护的是 磁盘中的数据,通过将要使用的数据缓存在主存中,使操作系统误以为数据一直在主存中(其实,只是在需要是在被缓存在主存中,如果长时间不需要则可能被swap出主存,存在磁盘中。ps:没有VM概念之前,运行的程序必须全部存储在主存中,引入之后,只需保证此时正被执行的代码在主存中即可。VM大大提高了,主存的利用率,是同时可以有更多的进程可以运行)。




寻址方式:物理和虚拟寻址
早期通过 物理寻址的方式访问主存,即主存中每个字节有一个唯一的物理地址,通过该物理地址,寻找该字节。
现在操作系统,通过虚拟寻址。CPU通过一个 虚拟地址来访问主存,该地址在访问主存之前被转换为一个物理地址。其中,转换过程由 位于CPU中的MMU单元,通过访问存储在主存中的页表完成。


地址空间的概念
线性地址空间:地址空间的数据是连续的
物理地址空间
虚拟地址空间
主存中每一个字节都有一个选自物理地址空间的物理地址和一个选自虚拟地址空间的虚拟地址。


数据映射:虚拟存储器与物理存储器中间的数据传输
虚拟存储器 (VM) 被组织为一个由存在在磁盘上的N个连续的字节大小单元组成的数组。每个字节都有一个唯一的虚拟地址作为到数组的索引。
磁盘上的内容被缓存在主存中。通过将地址空间的数据进行分块,利用块大小作为磁盘和主存之间的传输单元。其中,VM系统将VM(指被虚拟化的磁盘)分割为称为虚拟页(virtual page )大小的块,物理存储器(指主存)被分割为称为物理页(也成为页帧)大小的块。物理页与虚拟页等大,通常为4k, 从而完成数据映射。
虚拟存储器将主存作为缓存:


VM需要判断一个虚拟页是否被缓存在DRAM中;如果是,需确定存在哪个物理页中。
如果不命中,需判断这个虚拟页存在磁盘的哪个位置,在物理存储器中选择一个牺牲页,将虚拟页从磁盘拷贝到DRAM中,并替换该牺牲页,如果该牺牲页数据发生了改变,则需要将该牺牲页写回磁盘。 该过程称为swap。


上述功能有操作系统,MMU,以及存放在物理存储器中的页表(每一个进程都有一个页表,用于完成 虚拟地址到物理地址的映射)来完成。


页命中与缺页
即物理地址指数据在主存中的真实地址,虚拟地址是对主存的一种抽象,将存储在磁盘的数据,缓存在主存上。


页命中
CPU通过虚拟地址读取在VP2中的虚拟存储器中的数据(通过地址翻译将虚拟地址作为一个索引定位到PTE2,读取VP2相关信息),VP2被缓存在DRAM中,使用PTE中的物理存储器地址(该地址指向PP1缓存页的起始地址),构造这个字的物理地址。


缺页
DRAM缓存不命中称为缺页,触发缺页异常,调用内核中的缺页异常处理程序。在磁盘和存储器之间传送页的活动称之为交换(swapping)或页面调度.




参考:虚拟页 virtual page 物理页 百度


推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文主要讨论了在xps15上安装双系统win10和MacOS后,win10无法正常更新的问题。分析了可能的引导问题,并提供了解决方法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 树莓派Linux基础(一):查看文件系统的命令行操作
    本文介绍了在树莓派上通过SSH服务使用命令行查看文件系统的操作,包括cd命令用于变更目录、pwd命令用于显示当前目录位置、ls命令用于显示文件和目录列表。详细讲解了这些命令的使用方法和注意事项。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 乐视手机S1 Pro发布,声称手机真不卡,外观酷似iPhone
    乐视宣布即将发布乐视手机S1 Pro,搭载虎贲T7510芯片,声称手机真不卡。该手机外观与iPhone 14 Pro相似,采用居中药丸式挖孔屏和方形三摄模组。官方定位该手机为便宜的5G手机,售价预计在千元价位。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
author-avatar
mobiledu2502912677
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有