LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 981|回复: 3

多个任务的内存分配格局

[复制链接]
发表于 2005-11-18 21:17:38 | 显示全部楼层 |阅读模式
一直没弄明白,在多任务环境下,系统是为每个任务分配各自的堆栈/栈/数据区/代码区,还是数据区/代码区/堆栈区共享,只有各自的栈区是单独分配的? 如果是前者会不会产生内存碎片(因为各自的内存空间在物理上并不是连续的,这样理解对吗?
发表于 2005-11-18 21:41:22 | 显示全部楼层
为每个任务分配各自的堆栈/栈/数据区/代码区,系统部分共享(即高1G共享),内存碎片的产生和你物理内存分配方法有关。每个任务有独立的3G逻辑空间
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-20 13:45:56 | 显示全部楼层
下面仅属个人理解:
我想也差不多,如果多个任务共享栈,那么如何处理退栈呢。不过你说的碎片产生与物理分配的方法有关,这里说的物理分配方法是指页或静态划分(经典OS理论提到的方法)吗? 是不是按页来划分没有碎片呢?当今的OS在多任务小都是采用虚拟内存的按页来划分。每个任务都独立的3G逻辑空间不是很理解!
回复 支持 反对

使用道具 举报

发表于 2005-11-22 09:08:49 | 显示全部楼层
Post by sybaselu
下面仅属个人理解:
我想也差不多,如果多个任务共享栈,那么如何处理退栈呢。不过你说的碎片产生与物理分配的方法有关,这里说的物理分配方法是指页或静态划分(经典OS理论提到的方法)吗? 是不是按页来划分没有碎片呢?当今的OS在多任务小都是采用虚拟内存的按页来划分。


呵呵,lu兄好久不来了.

多任务使用的地址空间都是虚拟的,这个你已经知道了,那既然是虚拟地址,就不需要物理上连续,既然不需要物理上连续,自然就没有了碎片问题,因为OS给进程分配内存时都是以页为单位的.

每个任务都独立的3G逻辑空间不是很理解!

这个没什么不好理解呀,那每个进程总有自己的页表,这个页表就决定了当前进程的地址空间所在的页,也就是说,说白了每个进程有独立的3G逻辑空间,就是说每个进程有一套页表(还有页目录表),每个进程的同一个虚拟地址(如果没有分段就是逻辑地址)对应的物理地址就是不一样的,那自然就是独立的.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表