+ -
当前位置:首页 → 问答吧 → 几个linux问题,不懂,求赐教

几个linux问题,不懂,求赐教

时间:2010-07-22

来源:互联网

本帖最后由 gqbfree 于 2010-07-22 15:26 编辑

有几个问题不懂,请大家帮忙解答。查了很多资料,但前篇一律,中间很多疑点只能靠自己理解,怕有误:

(1)内核线性映射是896M,而且对应的物理地址已经确定,是0-896M。 那么用户进程空间分配地址的时候是不是优先考虑大于896M的物理地址页面?
     
(2)有没有大侠帮忙把一个进程可能有的vm_area_struct结构对应的段列举一下,比如堆栈对应一个vm_area_struct(是不是只对应一个?)堆对应一个,代码段对应一个,还有mmap啥的 等等。还有malloc时,是否有新的vm_area_struct生成呢?还是扩展堆对应的vm结构?
     
(3)发生缺页异常时,如果需要从磁盘上把相应的内容读进内存,那么如何定位需要读入哪些内容?我知道vm_area_struct结构里有对应文件的句柄和offsize,需要把整个都读进来吗?还是只读一个页面?如何确定读多少?
     
(4)能不能提供以下情形: 只有preem_disable能实现,而信号量无法实现的情形。(premm_disable主要用在哪里)

(5)帮忙确认一下我自己理解的观点是否正确:

     1. 用户空间 切 内核空间,压当前的用户空间的ss,sp入内核栈,然后取值TSS中的ss0/sp0赋给SS,ESP,完成切换; 然后把返回值cs/eip和其它一些现场寄存器压入内核栈(即pt_regs)。(很多资料都写先赋值SS,SP,然后压用户空间的ss,sp入内核栈, 我疑问此时的ss/sp从哪里来啊,还有pt_regs是不是只是用来存储用户空间时寄存器内容的?有没有情况是对内核现场存储?)
        
     2. 我认为的TSS是这样的:linux没有按照X86设计,采用了一个CPU使用一个的方式。这样只要变换里面的SS,SP,就可以完成进程的堆栈切换。而其它寄存器现场信息,在task_struct->thread_info里存储。(请补充和批判)    TSS和thread_info的关系,和寄存器的关系是什么?     
       请帮忙列出tread_info全部作用,谢谢;

作者: gqbfree   发布时间: 2010-07-22

(1)内核线性映射是896M,而且对应的物理地址已经确定,是0-896M。 那么用户进程空间分配地址的时候是不是优先考虑大于896M的物理地址页面?

这个不是用户进程决定的,是内核决定的
而且一般是NORMAL ZONE范围的(低于896M)

作者: openspace   发布时间: 2010-07-22

热门下载

更多