您的位置:首页 > 其它

【内存分配系列】之系统分配进程内存(内存篇 第1节)

2009-11-23 13:40 211 查看
学习编程的同学都知道,如果只学别人封装好的一些类,无疑太边缘,我们可能只能做填代码的人。只有了解了程序内存分配情况,才能设计出更高效、更安全、更节省资源的程序。所以抱着这个想法,我自己在网上学习了一下,本着服务大众的心态把我知道的都发上来,希望对大家以后的学习有点用。前期写的可能更注重基础概念,只是作为了解之用。

进程,作为系统进行资源分配和调度的一个独立单位,它解决了单进程系统执行效率低的问题。操作系统通过进程调度算法对当前正在运行的进程分配处理机、I/O操作权限或者内存资源。当然,我只谈内存分配的问题。我按照进程的产生、消亡过程来谈这个问题,因为这样符合我们正常地逻辑思维,有助于理解。

当我们双击一个图标,或者在DOS命令行里敲一个命令,我们就启动了一个进程。当进程启动时,WINDOWS就给这个进程分配4G的空间。是的,你没有看错,是4G,我知道你的内存说不定只有512M,但是只要你的CPU是32位的,那就是4G。我说是4G空间,可我没有说是4G内存空间啊,呵呵,所以不要误解。我们的内存估计都没有4G,可是为什么要分配那么大呢,因为我们的CPU是32位,那么CPU的寻址空间就是4G(用地址线的位数计算,详解看计算机组成原理)。所以我们可以表示出4G的地址。但是由于内存有限,不得不把4G分开放。把经常调用的数据放到内存中,把不经常用的放到外存上,这样一块为存放进程数据的外存空间被称为虚拟内存。

空间不足的问题解决了,或许你会问,有必要么,直接都放内存里吧。呵呵,如果你的内存足够大当然没问题。可是如果你的一个魔兽有5G,我想请问,你怎么把它都加载到内存?呵呵,这样是不是很容易想通了,虽然这样效率变低了,可是我们可以执行更大的程序了。所以这样设计的实际价值是很大的。

为什么和是什么都解决了。你可能又不禁要问,我的内存只有512M,那我512M之后的地址空间访问的不是内存了。我想说的真相是:其实我们程序里使用的内存地址通通不是物理内存地址!啊?丫咩歹!呵呵,是的。不管是指针,还是其他的什么地址,都使用一种被称作逻辑地址的东西。由CPU里的一个叫MMU的东西把他们解析成物理地址进行访问。那么MMU又是什么呢?Memory Management Unit,内存管理单元,是CPU的一个内嵌模块。INTEL处理器都带。

既然每个进程都分配4G,那么N多个进程要分配4NG个地址空间?呵呵,别NG了。这又是操作系统给我们玩的把戏。我给你讲个故事。我现在对A说,我有1000块钱,你帮我做个事,如果你做得好全给你。然后我跟B说,我有1000块钱,你帮我做个事,如果你做得好全给你。然后我又跟C说,我有1000块钱,你帮我做个事,如果你做得好全给你。哈哈,每个人都在心里想,好了,有1000块赚了,可是我只有1000块,我又没说真的会全给你,高兴个鸟啊!哈哈...等实际做完了,我给了A200,给了B200,又给了C300。同学们,我还结余了300耶!知道操作系统怎么搞我们了吧?

至此,操作系统如何为一个进程分配内存空间,各位都应该大致了解了吧?呵呵,我只讲个大概,想了解细节,就去网上自己看吧,希望我们都成专家!

分配是知道了,那么进程执行完了,怎么回收已分配的内存空间呢,进程内部怎么规划内存呢?请看下节《【内存分配系列】之进程内部内存分配(内存篇 第2节)》!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐