免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3847 | 回复: 12
打印 上一主题 下一主题

linux内核问题(存储管理/进程切换),求赐教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-22 15:14 |只看该作者 |倒序浏览
本帖最后由 gqbfree 于 2010-07-26 10:12 编辑

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

(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全部作用,谢谢;
   这个问题不用回答了。

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
2 [报告]
发表于 2010-07-22 15:59 |只看该作者
(1)内核线性映射是896M,而且对应的物理地址已经确定,是0-896M。 那么用户进程空间分配地址的时候是不是优先考虑大于896M的物理地址页面?

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

论坛徽章:
0
3 [报告]
发表于 2010-07-22 17:23 |只看该作者
回复 2# openspace

请问为什么先考虑896M吗? 我老觉得896M优先给内核使用更合理,用户空间先使用高端内存。(因为毕竟这896M还是比较特殊的,是线性映射可以得到)


其它的问题也帮忙回答一下哈!!

论坛徽章:
0
4 [报告]
发表于 2010-07-22 18:12 |只看该作者
内核可以直接访问0-896M的内存,内核不可能全部用到。

论坛徽章:
0
5 [报告]
发表于 2010-07-23 00:10 |只看该作者
最好说下什么版本的LINUX, 从 0.11 到 2.6.31 变化大了去了. LINUX 版本是个大问题, 这个和WINDOWS差别很大.

关于 (5).2  老的 LINUX 用TSS, 后来新的已经不用了,我记得.

论坛徽章:
0
6 [报告]
发表于 2010-07-23 09:11 |只看该作者
本帖最后由 gqbfree 于 2010-07-23 09:12 编辑

回复 5# accessory


    就先说说2.4的吧。 我原理清楚后,2.6的可以自己去琢磨。   当然如果有人只研究2.6的,也可以讲出来。谢谢各位!!!!

论坛徽章:
0
7 [报告]
发表于 2010-07-23 10:59 |只看该作者
那学习 0.11 ,和 0.12 有什么作用

论坛徽章:
0
8 [报告]
发表于 2010-07-23 12:12 |只看该作者
楼上兄弟说详细点啊,不懂啥意思?
我刚刚开始看linux内核的东西,所以很多东西不是很明白。 是不是我一口气说的问题太多,大家不想耐心看。
那我分成5.6个帖子?

论坛徽章:
0
9 [报告]
发表于 2010-07-23 22:54 |只看该作者
回复 7# 0vk0

有些东西没变.不过还得自己找出来到底哪些变了. 所以我懒得看老的版本.....

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
10 [报告]
发表于 2010-07-24 09:53 |只看该作者
回复 1# gqbfree
没看内核代码,能回答的回答吧

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

(1)内核线性映射是896M,而且对应的物理地址已经确定,是0-896M。 那么用户进程空间分配地址的时候是不是优先考虑大于896M的物理地址页面?
     >>Windows 98将内核Map到所有进程中,但这不表示所有的OS都会这样做,内核并不从用户程序更加特别(从CPU的角度看),CPU甚至不会知道当前运行的是用户代码或是内核代码(当然,一般来说,内核可以执行特权指令,而用户代码不可以,不过,如果OS的设计者喜欢的话...)。
(2)有没有大侠帮忙把一个进程可能有的vm_area_struct结构对应的段列举一下,比如堆栈对应一个vm_area_struct(是不是只对应一个?)堆对应一个,代码段对应一个,还有mmap啥的 等等。还有malloc时,是否有新的vm_area_struct生成呢?还是扩展堆对应的vm结构?
     >>没看过内核,无法回答,从系统设计的角度看,这种结构应当只有一个。
(3)发生缺页异常时,如果需要从磁盘上把相应的内容读进内存,那么如何定位需要读入哪些内容?我知道 vm_area_struct结构里有对应文件的句柄和offsize,需要把整个都读进来吗?还是只读一个页面?如何确定读多少?
     >>一般的OS都会有预读功能,所以会一般也会读入相邻的页面,读交换页是通过文件系统进行的,如果把整个分页文件都读进入,内存足不足够不用说,分页的意义也没有了。
(4)能不能提供以下情形: 只有preem_disable能实现,而信号量无法实现的情形。(premm_disable主要用在哪里)
    >>PV信号量、Spin_lock、或是Preem_disable的任何一种互斥方式,都可单独实现所有功能(区别仅是代价和实现难度)。
(5)帮忙确认一下我自己理解的观点是否正确:

     1. 用户空间 切 内核空间,压当前的用户空间的ss,sp入内核栈,然后取值TSS中的ss0/sp0赋给SS,ESP,完成切换; 然后把返回值cs/eip和其它一些现场寄存器压入内核栈(即pt_regs)。(很多资料都写先赋值SS,SP,然后压用户空间的ss,sp入内核栈, 我疑问此时的ss/sp从哪里来啊,还有pt_regs是不是只是用来存储用户空间时寄存器内容的?有没有情况是对内核现场存储?)
     >>当前的SS,SP没有入内核栈的必要的,不过,非要这样做也可以
     >>用户态的ss/sp本来就有的...据说Linux不使用X86CPU的TSS,如何还有TSS,不懂中,什么时候看代码去吧
     >>内核现场没有存储的价值,因为内核不会从“上次的执行点”开始执行,如果非要说有(可能被其它内核部件中断),那么无论被中断多少次,现场保存在当前的用户进程的内核线程中...(就像是80x86是单程序环境中一样),当然,前提是内核态代码不应当被Swtch中断(这样也未必不可,只是系统变得更复杂了)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP