当前位置: 首页 > news >正文

网站首页html代码金溪网站建设推广

网站首页html代码,金溪网站建设推广,wordpress插件存放地址,甘肃建设厅网站执法局MMU 现代操作系统普遍采用虚拟内存管理#xff08;Virtual Memory Management#xff09;机制#xff0c;这需要处理器中的MMU#xff08;Memory Management Unit#xff0c;内存管理单元#xff09;提供支持#xff0c;本节简要介绍MMU的作用。 首先引入两个概念… MMU  现代操作系统普遍采用虚拟内存管理Virtual Memory Management机制这需要处理器中的MMUMemory Management Unit内存管理单元提供支持本节简要介绍MMU的作用。 首先引入两个概念虚拟地址和物理地址。如果处理器没有MMU或者有MMU但没有启用CPU执行单元发出的内存地址将直接传到芯片引脚上被内存芯片以下称为物理内存以便与虚拟内存区分接收这称为物理地址Physical Address以下简称PA如下图所示。 图 17.5. 物理地址   如果处理器启用了MMUCPU执行单元发出的内存地址将被MMU截获从CPU到MMU的地址称为虚拟地址Virtual Address以下简称VA而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上也就是将VA映射成PA如下图所示。 图 17.6. 虚拟地址   如果是32位处理器则内地址总线是32位的与CPU执行单元相连图中只是示意性地画了4条地址线而经过MMU转换之后的外地址总线则不一定是32位的。也就是说虚拟地址空间和物理地址空间是独立的32位处理器的虚拟地址空间是4GB而物理地址空间既可以大于也可以小于4GB。 MMU将VA映射到PA是以页Page为单位的32位处理器的页尺寸通常是4KB。例如MMU可以通过一个映射项将VA的一页0xb7001000~0xb7001fff映射到PA的一页0x2000~0x2fff如果CPU执行单元要访问虚拟地址0xb7001008则实际访问到的物理地址是0x2008。物理内存中的页称为物理页面或者页帧Page Frame。虚拟内存的哪个页面映射到物理内存的哪个页帧是通过页表Page Table来描述的页表保存在物理内存中MMU会查找页表来确定一个VA应该映射到什么PA。 操作系统和MMU是这样配合的 操作系统在初始化或分配、释放内存时会执行一些指令在物理内存中填写页表然后用指令设置MMU告诉MMU页表在物理内存中的什么位置。 设置好之后CPU每次执行访问内存的指令都会自动引发MMU做查表和地址转换操作地址转换操作由硬件自动完成不需要用指令控制MMU去做。 我们在程序中使用的变量和函数都有各自的地址程序被编译后这些地址就成了指令中的地址指令中的地址被CPU解释执行就成了CPU执行单元发出的内存地址所以在启用MMU的情况下程序中使用的地址都是虚拟地址都会引发MMU做查表和地址转换操作。那为什么要设计这么复杂的内存管理机制呢多了一层VA到PA的转换到底换来了什么好处All problems in computer science can be solved by another level of indirection.还记得这句话吗多了一层间接必然是为了解决什么问题的等讲完了必要的预备知识之后将在第 5 节 “虚拟内存管理”讨论虚拟内存管理机制的作用。 MMU除了做地址转换之外还提供内存保护机制。各种体系结构都有用户模式User Mode和特权模式Privileged Mode之分操作系统可以在页表中设置每个内存页面的访问权限有些页面不允许访问有些页面只有在CPU处于特权模式时才允许访问有些页面在用户模式和特权模式都可以访问访问权限又分为可读、可写和可执行三种。这样设定好之后当CPU要访问一个VA时MMU会检查CPU当前处于用户模式还是特权模式访问内存的目的是读数据、写数据还是取指令如果和操作系统设定的页面权限相符就允许访问把它转换成PA否则不允许访问产生一个异常Exception。异常的处理过程和中断类似不同的是中断由外部设备产生而异常由CPU内部产生中断产生的原因和CPU当前执行的指令无关而异常的产生就是由于CPU当前执行的指令出了问题例如访问内存的指令被MMU检查出权限错误除法指令的除数为0等都会产生异常。 图 17.7. 处理器模式   通常操作系统把虚拟地址空间划分为用户空间和内核空间例如x86平台的Linux系统虚拟地址空间是0x00000000~0xffffffff前3GB0x00000000~0xbfffffff是用户空间后1GB0xc0000000~0xffffffff是内核空间。用户程序加载到用户空间在用户模式下执行不能访问内核中的数据也不能跳转到内核代码中执行。这样可以保护内核如果一个进程访问了非法地址顶多这一个进程崩溃而不会影响到内核和整个系统的稳定性。CPU在产生中断或异常时不仅会跳转到中断或异常服务程序还会自动切换模式从用户模式切换到特权模式因此从中断或异常服务程序可以跳转到内核代码中执行。事实上整个内核就是由各种中断和异常处理程序组成的。总结一下在正常情况下处理器在用户模式执行用户程序在中断或异常情况下处理器切换到特权模式执行内核程序处理完中断或异常之后再返回用户模式继续执行用户程序。 段错误我们已经遇到过很多次了它是这样产生的 用户程序要访问的一个VA经MMU检查无权访问。 MMU产生一个异常CPU从用户模式切换到特权模式跳转到内核代码中执行异常服务程序。 内核把这个异常解释为段错误把引发异常的进程终止掉。 http://learn.akae.cn/media/ch20s05.html 我们知道操作系统利用体系结构提供的VA到PA的转换机制实现虚拟内存管理。有了共享库的基础知识之后现在我们可以进一步理解虚拟内存管理了。首先分析一个例子 $ psPID TTY TIME CMD 29977 pts/0 00:00:00 bash 30032 pts/0 00:00:00 ps $ cat /proc/29977/maps 08048000-080f4000 r-xp 00000000 08:15 688142 /bin/bash 080f4000-080f9000 rw-p 000ac000 08:15 688142 /bin/bash 080f9000-080fe000 rw-p 080f9000 00:00 0 09283000-09497000 rw-p 09283000 00:00 0 [heap] b7ca8000-b7cb2000 r-xp 00000000 08:15 581665 /lib/tls/i686/cmov/libnss_files-2.8.90.so b7cb2000-b7cb3000 r--p 00009000 08:15 581665 /lib/tls/i686/cmov/libnss_files-2.8.90.so b7cb3000-b7cb4000 rw-p 0000a000 08:15 581665 /lib/tls/i686/cmov/libnss_files-2.8.90.so ... b7e15000-b7f6d000 r-xp 00000000 08:15 581656 /lib/tls/i686/cmov/libc-2.8.90.so b7f6d000-b7f6f000 r--p 00158000 08:15 581656 /lib/tls/i686/cmov/libc-2.8.90.so b7f6f000-b7f70000 rw-p 0015a000 08:15 581656 /lib/tls/i686/cmov/libc-2.8.90.so ... b7fbd000-b7fd7000 r-xp 00000000 08:15 565466 /lib/ld-2.8.90.so b7fd7000-b7fd8000 r-xp b7fd7000 00:00 0 [vdso] b7fd8000-b7fd9000 r--p 0001a000 08:15 565466 /lib/ld-2.8.90.so b7fd9000-b7fda000 rw-p 0001b000 08:15 565466 /lib/ld-2.8.90.so bfac5000-bfada000 rw-p bffeb000 00:00 0 [stack] 用ps命令查看当前终端下的进程得知bash进程的id是29977然后用cat /proc/29977/maps命令查看它的虚拟地址空间。/proc目录中的文件并不是真正的磁盘文件而是由内核虚拟出来的文件系统当前系统中运行的每个进程在/proc下都有一个子目录目录名就是进程的id查看目录下的文件可以得到该进程的相关信息。此外用pmap 29977命令也可以得到类似的输出结果。 图 20.4. 进程地址空间   在第 4 节 “MMU”讲过x86平台的虚拟地址空间是0x0000 0000~0xffff ffff大致上前3GB0x0000 0000~0xbfff ffff是用户空间后1GB0xc000 0000~0xffff ffff是内核空间在这里得到了印证。0x0804 8000-0x080f 4000是从/bin/bash加载到内存的访问权限为r-x表示Text Segment包含.text段、.rodata段、.plt段等。0x080f 4000-0x080f 9000也是从/bin/bash加载到内存的访问权限为rw-表示Data Segment包含.data段、.bss段等。 0x0928 3000-0x0949 7000不是从磁盘文件加载到内存的这段空间称为堆Heap以后会讲到用malloc函数动态分配内存是在这里分配的。从0xb7ca 8000开始是共享库的映射空间每个共享库也分为几个Segment每个Segment有不同的访问权限。可以看到从堆空间的结束地址0x0949 7000到共享库映射空间的起始地址0xb7ca 8000之间有很大的地址空洞在动态分配内存时堆空间是可以向高地址增长的。堆空间的地址上限0x09497000称为Break堆空间要向高地址增长就要抬高Break映射新的虚拟内存页面到物理内存这是通过系统调用brk实现的malloc函数也是调用brk向内核请求分配内存的。 /lib/ld-2.8.90.so就是动态链接器/lib/ld-linux.so.2后者是前者的符号链接。标有[vdso]的地址范围是linux-gate.so.1的映射空间我们讲过这个共享库是由内核虚拟出来的。0xbfac 5000-0xbfad a000是栈空间其中高地址的部分保存着进程的环境变量和命令行参数低地址的部分保存函数栈帧栈空间是向低地址增长的但显然没有堆空间那么大的可供增长的余地因为实际的应用程序动态分配大量内存的并不少见但是有几十层深的函数调用并且每层调用都有很多局部变量的非常少见。总之栈空间是可能用尽的并且比堆空间更容易用尽在第 3 节 “递归”讲过无穷递归会用尽栈空间最终导致段错误。 虚拟内存管理起到了什么作用呢可以从以下几个方面来理解。 第一虚拟内存管理可以控制物理内存的访问权限。物理内存本身是不限制访问的任何地址都可以读写而操作系统要求不同的页面具有不同的访问权限这是利用CPU模式和MMU的内存保护机制实现的。例如Text Segment被只读保护起来防止被错误的指令意外改写内核地址空间也被保护起来防止在用户模式下执行错误的指令意外改写内核数据。这样执行错误指令或恶意代码的破坏能力受到了限制顶多使当前进程因段错误终止而不会影响整个系统的稳定性。 第二虚拟内存管理最主要的作用是让每个进程有独立的地址空间。所谓独立的地址空间是指不同进程中的同一个VA被MMU映射到不同的PA并且在某一个进程中访问任何地址都不可能访问到另外一个进程的数据这样使得任何一个进程由于执行错误指令或恶意代码导致的非法内存访问都不会意外改写其它进程的数据不会影响其它进程的运行从而保证整个系统的稳定性。另一方面每个进程都认为自己独占整个虚拟地址空间这样链接器和加载器的实现会比较容易不必考虑各进程的地址范围是否冲突。 继续前面的实验再打开一个终端窗口看一下这个新的bash进程的地址空间可以发现和先前的bash进程地址空间的布局差不多 $ psPID TTY TIME CMD 30697 pts/1 00:00:00 bash 30749 pts/1 00:00:00 ps $ cat /proc/30697/maps 08048000-080f4000 r-xp 00000000 08:15 688142 /bin/bash 080f4000-080f9000 rw-p 000ac000 08:15 688142 /bin/bash 080f9000-080fe000 rw-p 080f9000 00:00 0 082d7000-084f9000 rw-p 082d7000 00:00 0 [heap] b7cf1000-b7cfb000 r-xp 00000000 08:15 581665 /lib/tls/i686/cmov/libnss_files-2.8.90.so b7cfb000-b7cfc000 r--p 00009000 08:15 581665 /lib/tls/i686/cmov/libnss_files-2.8.90.so b7cfc000-b7cfd000 rw-p 0000a000 08:15 581665 /lib/tls/i686/cmov/libnss_files-2.8.90.so ... b7e5e000-b7fb6000 r-xp 00000000 08:15 581656 /lib/tls/i686/cmov/libc-2.8.90.so b7fb6000-b7fb8000 r--p 00158000 08:15 581656 /lib/tls/i686/cmov/libc-2.8.90.so b7fb8000-b7fb9000 rw-p 0015a000 08:15 581656 /lib/tls/i686/cmov/libc-2.8.90.so ... b8006000-b8020000 r-xp 00000000 08:15 565466 /lib/ld-2.8.90.so b8020000-b8021000 r-xp b8020000 00:00 0 [vdso] b8021000-b8022000 r--p 0001a000 08:15 565466 /lib/ld-2.8.90.so b8022000-b8023000 rw-p 0001b000 08:15 565466 /lib/ld-2.8.90.so bff0e000-bff23000 rw-p bffeb000 00:00 0 [stack] 该进程也占用了0x0000 0000-0xbfff ffff的地址空间Text Segment也是0x0804 8000-0x080f 4000Data Segment也是0x080f 4000-0x080f 9000和先前的进程一模一样因为这些地址是在编译链接时写进/bin/bash这个可执行文件的两个进程都加载它。这两个进程在同一个系统中同时运行着它们的Data Segment占用相同的VA但是两个进程各自干各自的事情显然Data Segment中的数据应该是不同的相同的VA怎么会有不同的数据呢因为它们被映射到不同的PA。如下图所示。 图 20.5. 进程地址空间是独立的   从图中还可以看到两个进程都是bash进程Text Segment是一样的并且Text Segment是只读的不会被改写因此操作系统会安排两个进程的Text Segment共享相同的物理页面。由于每个进程都有自己的一套VA到PA的映射表整个地址空间中的任何VA都在每个进程自己的映射表中查找相应的PA因此不可能访问到其它进程的地址也就没有可能意外改写其它进程的数据。 另外注意到两个进程的共享库加载地址并不相同共享库的加载地址是在运行时决定的而不是写在/bin/bash这个可执行文件中。但即使如此也不影响两个进程共享相同物理页面中的共享库当然只有只读的部分是共享的可读可写的部分不共享。 使用共享库可以大大节省内存。比如libc系统中几乎所有的进程都映射libc到自己的进程地址空间而libc的只读部分在物理内存中只需要存在一份就可以被所有进程共享这就是“共享库”这个名称的由来了。 现在我们也可以理解为什么共享库必须是位置无关代码了。比如libc不同的进程虽然共享libc所在的物理页面但这些物理页面被映射到各进程的虚拟地址空间时却位于不同的地址所以要求libc的代码不管加载到什么地址都能正确执行。 第三VA到PA的映射会给分配和释放内存带来方便物理地址不连续的几块内存可以映射成虚拟地址连续的一块内存。比如要用malloc分配一块很大的内存空间虽然有足够多的空闲物理内存却没有足够大的连续空闲内存这时就可以分配多个不连续的物理页面而映射到连续的虚拟地址范围。如下图所示。 图 20.6. 不连续的PA可以映射为连续的VA   第四一个系统如果同时运行着很多进程为各进程分配的内存之和可能会大于实际可用的物理内存虚拟内存管理使得这种情况下各进程仍然能够正常运行。因为各进程分配的只不过是虚拟内存的页面这些页面的数据可以映射到物理页面也可以临时保存到磁盘上而不占用物理页面在磁盘上临时保存虚拟内存页面的可能是一个磁盘分区也可能是一个磁盘文件称为交换设备Swap Device。当物理内存不够用时将一些不常用的物理页面中的数据临时保存到交换设备然后这个物理页面就认为是空闲的了可以重新分配给进程使用这个过程称为换出Page out。如果进程要用到被换出的页面就从交换设备再加载回物理内存这称为换入Page in。换出和换入操作统称为换页Paging因此 系统中可分配的内存总量  物理内存的大小  交换设备的大小 如下图所示。第一张图是换出将物理页面中的数据保存到磁盘并解除地址映射释放物理页面。第二张图是换入从空闲的物理页面中分配一个将磁盘暂存的页面加载回内存并建立地址映射。 图 20.7. 换页 转载于:https://www.cnblogs.com/cnland/archive/2013/03/21/2972571.html
http://www.sadfv.cn/news/92265/

相关文章:

  • 红酒网站建设模板跨境电商官方网址
  • 牡丹江站江苏建设科技网站
  • 免费视频课程网站模板昆明企业建站模板
  • 请人做网站需要问哪些问题桂林网红餐厅
  • 网站建设深圳公司哪家好泗洪网站建设公司
  • 营销网站的渠道构成基本包括dz论坛做分类网站
  • 温州产品推广网站vps服务器10元一月
  • 网站改版提交 百度中国数据统计网站
  • 微商城网站建设阿里营销网站建设
  • 四站合一网站建设价格做网站上传图片
  • 合肥建设学校官方网站个人主页自助建站
  • 哪个网站可以做免费商业推广wordpress左右两栏
  • 网站后台被百度蜘蛛抓取佛山网站建设
  • 在家建设一个网站需要什么手续网页设计外文文献
  • 中国最大网站排名看网站的关键词
  • 开一个网站需要什么手续百度明令禁止搜索的词
  • 商城展示网站建设机关网站及新媒体建设实施方案
  • 域名与空间购买后怎么做网站网络营销推广的内容
  • 网站建设推广唯心磁遁8学校网站开发建设合同
  • 上海网站建设极简慕枫自己网站联系电话修改怎么做
  • 学校文化建设聚奇网站建设网站的法律可行性分析
  • 做soho的网站wordpress显示用户自定义菜单
  • 微信小程序 购物网站开发wordpress 所见即所得
  • 平面设计做画册用网站怎样自己搭建网站
  • 网站上那些兼职网页怎么做的网站源码网
  • 浙江省2012年7月自学考试网站建设与网页设计漳州鼎信
  • 做网上购物网站汽车网站建设制作费用
  • 分销系统网站建设电力网站怎么做
  • 电商网站开发用什么软件好phpmysql网站
  • jsp做的网站可以用的全球设计在线