LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: Ruzi

内存管理的两个问题

[复制链接]
发表于 2006-6-29 11:59:48 | 显示全部楼层
>>是系统调用的代码使用的
其实不一定分的这么细,可以笼统的称为内核代码使用的。要细分的话,如果使用8k kernel stack,那么中断服务例程使用current的kernel stack;如果使用4k kernel stack,那么中断服务例程使用专用的interrupt kernel stack。

>>那么怎么传递参数的?
系统调用的参数是放在寄存器里的, eax, ebx, ecx,……

>>我觉得不会引起内存碎片。
碎片是相对的。如果运行时间很长了,难免会出现一些散布在内存里的单独的页。如果你要分配两页给一个新的进程作为内核堆栈,那么这些单独的页就是碎片了,是不能被直接利用的。
回复 支持 反对

使用道具 举报

发表于 2006-7-1 00:34:12 | 显示全部楼层
Post by ifree
谢谢zhllg回答。

这样说的意思是内核堆栈是系统调用的代码使用的。用户态代码陷入内核时会发生一次堆栈的切换。那么怎么传递参数的?
你说4K的好处可以减少内存碎片,可是Linux使用伙伴系统分配的内存,这个算法以2^k分配内存的。我觉得不会引起内存碎片。

传说中的callgate是自动拷贝参数的
回复 支持 反对

使用道具 举报

发表于 2006-7-1 02:35:53 | 显示全部楼层
Post by hendric
传说中的callgate是自动拷贝参数的


这两天看书的收获是:
Linux在x86体系结构上没有使用call gate,系统调用使用的是中断门,int 0x80。进程切换时从tss段中取出内核堆栈的指针ss:esp,貌似没有通过内存传递参数。所以我相信楼上zhllg所说,是通过eax、ebx等寄存器传递参数的。
回复 支持 反对

使用道具 举报

发表于 2006-7-2 14:27:19 | 显示全部楼层
Post by ifree
这两天看书的收获是:
Linux在x86体系结构上没有使用call gate,系统调用使用的是中断门,int 0x80。进程切换时从tss段中取出内核堆栈的指针ss:esp,貌似没有通过内存传递参数。所以我相信楼上zhllg所说,是通过eax、ebx等寄存器传递参数的。


呵呵我只是提示说硬件有这么一种自动拷贝参数的机制,并没有说Linux使用他。事实上Linux很多复杂特性都没有用。算了我不诡辩了,潜水一会。
回复 支持 反对

使用道具 举报

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

本版积分规则

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