• 4th.关于MMU中的虚拟映射


     
    简述
            教材中提到,MMU主要有两大功能:一为权限管理,二为地址映射。具体摘录几段文字。供参考。
     
     
    MMU映射地址具体流程
     
            6cc1c52dha7878ea75347&690.jpg
     
     
     
    关于虚拟映射
     
     既然虚拟地址最终要转换为物理地址,那么为何还需要虚拟地址呢?这有以下几个原因: 
    1. 虚拟地址还提供了权限检查功能:在虚拟地址被转换为物理地址访问设备之前,要先进行权限检查。比如我们设置虚拟地址和物理地址之间的映射关系时,可以设置某块地址是只读的、只写的、只有CPU处于管理模式时才能访问等。这些功能可以让系统的内核、用户程序的运行空间相互独立:用户程序即使出错,也无法破坏内核;用户程序A崩溃了,也无法影响到用户程序B。 

    2. 设想这种情况:系统同时运行用户程序A、B时,它们都保存在内存中,切换到哪个程序就从哪块内存中取指执行。如果没有虚拟地址,就像ucos一样,A、B程序的运行地址是不一样的,这使得编译程序时需要程序员自己分配运行地址。但是有虚拟地址后,A、B程序的运行空间都是一样的,至于它们对应哪块实际的地址,这通过设置不同的地址映射关系来确定。这使得我们编程时,无需理会这类繁锁的问题:A程序放在这里、B程序放在那里。 
    虚拟地址的引入,不仅使得用户程序可以运行在同样的虚拟地址上,还使得用户程序“看起来”能够使用的内存很大:一个程序在运行之前,没有必要全部装入内存,而仅需要将那些当前要运行的部分先装入内存,其余部分在用到时再从磁盘调入,而当内存耗光时再将暂时不用的部分调出到磁盘。这使得一个大程序可以在较小的内存空间中运行,也使得内存中可以同时装入更多的程序并发执行,从用户的角度看,该系统所具有的内存容量,将比实际内存容量大得多.
     
     
    疑问:
    不是很能理解  虚拟地址怎么使得“内存看起来比较大”
    程序A在运行后要换程序B运行,那之前程序A的一些数据要保存到哪里?他不是要腾出物理空间给程序B了吗?
     



  • 相关阅读:
    HDU 1229 还是A+B(A+B陶冶情操)
    WINDOWS API ——CREATETOOLHELP32SNAPSHOT——查找进程
    WinAPI: GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId
    创建线程后马上CloseHandle(threadhandle)起什么作用
    CloseHandle(),TerminateThread(),ExitThread()的区别
    WinAPI: OpenProcess、GetExitCodeProcess、TerminateProcess (测试强制关闭 OICQ)
    GetVersion和GetVersionEx
    WinAPI: GetModuleFileName、GetModuleHandle
    C# 获取窗口句柄并且关闭应用程序
    IsWindow,findwindow
  • 原文地址:https://www.cnblogs.com/asam/p/6351855.html
Copyright © 2020-2023  润新知