zoukankan      html  css  js  c++  java
  • [OS] 进程的虚地址空间

    我在书上看到说,32位地址线的进程虚拟地址空间是2GB,这里说的地址空间就是可以容纳这个进程大小的最大空间的意思么? 那么如果这个程序很大,超过2GB了怎么办?

    还有内存是由操作系统管理的,用户程序没法直接访问的是吗?
    所以说我们运行用户程序的时候,程序最初都是存放在磁盘上的,要等到操作系统的调入才能放到内存上去执行,而存放在磁盘上的程序就是所谓的可执行映像文件,是这样吗?

    32位地址线就说明有32根地址线,那么可以表达数据是在0~2的32次方之间,也就是4GB,只不过User Mode使用的只有2GB,其中的2GB由Window kernel使用(根据CPU体系结构的不同而不同),User Mode区域的代码要Call window kernel之间的Code的话要透过WINDOW APIs,实际上是透过中断来实现.
    如果程序很大,大于4GB,原则上没有这么大的程序,即使有也没有关系,由于地址空间只有4GB,应用程序并没有一次把所有的代码加载到地址空间中,只有把部分的加载到地址空间中,但是如果访问到的Code没有加载到地址空间上哪这么办呢?这样会透过中断的方式把要访问的代码加载到地址空间中,暂时不需要访问的可以写会磁盘.

    还有内存是由操作系统管理的,用户程序没法直接访问的是吗?
    ================
    当然可以访问,但是访问的都只是User Mode的内存,如: char *p = new char[2];
    *p = 2;这样就是访问内存呀,只不过不能访问Kernel Mode中的内存,如果硬去访问,那么会导致访问违规错误提示. 如: char *p = NULL, *p = 10;

    存放在磁盘上的程序就是所谓的可执行映像文件,是这样吗?
    ================
    存放在磁盘上的dll,exe...程序就是所谓的可执行映像文件.
  • 相关阅读:
    【leetcode】Pascal's Triangle
    [bxd学习java基本点]10.set元素不重复,取元素顺序会变的。TreeSet取值时,是安顺序来的。
    cocos2dx 学习点滴(4) cocos2dx 架构和引擎目录
    VC 2008编译libxml22.7.6
    程序猿的九重天
    使用批处理文件设置环境变量
    删除指定目录下除开指定文件外所有文件的批处理命令
    关于永动机的思考
    程序员的九阳真经
    上帝的归上帝,程序的归程序 (卓有成效的程序员)
  • 原文地址:https://www.cnblogs.com/robbychan/p/3786728.html
Copyright © 2011-2022 走看看