当前位置: 技术问答>linux和unix
请教linux 0.11中关于sys_call的问题
来源: 互联网 发布时间:2015-09-17
本文导语: 1,linux 0.11在system_call.s文件 L89 有movl $0x10,%edx mov %dx,%ds mov %dx,%es L92有movl $0x17,%edx mov %dx,%fs 请问为什么ds,es跟fs中用到的选择符不一样? 2,在system_call.s文件中的 _sys_fork: 209 call _find_empty_process 210 ...
1,linux 0.11在system_call.s文件
L89 有movl $0x10,%edx mov %dx,%ds mov %dx,%es
L92有movl $0x17,%edx mov %dx,%fs 请问为什么ds,es跟fs中用到的选择符不一样?
2,在system_call.s文件中的
_sys_fork:
209 call _find_empty_process
210 testl %eax,%eax
211 js lf
212 push %gs
213 push %esi
214 push %edi
215 push %ebp
216 push %eax
217 call _copy_process
218 addl $20,%esp
2191: ret
请问218行为什么要抛弃20个压栈,copy_process中的参数才17个呀,他们有什么关系?抛弃20*4个自己之后程序返回时要返回到哪里去?
3:fork.c文件中的com_mem函数L52行有new_data_base=new_code_base=nr*0x4000000,这是个什么地址?明显比16M大得多阿,难道这就是虚拟地址?不明白!在该函数中有set_base(p->ldt[1],new_code_base);为什么只有基地址,而没设置G,D,DPL和段厂等
刚开始学linux,请各位大虾多原谅!
L89 有movl $0x10,%edx mov %dx,%ds mov %dx,%es
L92有movl $0x17,%edx mov %dx,%fs 请问为什么ds,es跟fs中用到的选择符不一样?
2,在system_call.s文件中的
_sys_fork:
209 call _find_empty_process
210 testl %eax,%eax
211 js lf
212 push %gs
213 push %esi
214 push %edi
215 push %ebp
216 push %eax
217 call _copy_process
218 addl $20,%esp
2191: ret
请问218行为什么要抛弃20个压栈,copy_process中的参数才17个呀,他们有什么关系?抛弃20*4个自己之后程序返回时要返回到哪里去?
3:fork.c文件中的com_mem函数L52行有new_data_base=new_code_base=nr*0x4000000,这是个什么地址?明显比16M大得多阿,难道这就是虚拟地址?不明白!在该函数中有set_base(p->ldt[1],new_code_base);为什么只有基地址,而没设置G,D,DPL和段厂等
刚开始学linux,请各位大虾多原谅!
|
1、什么选择符?
2、20是字节数……
不知道你那个gs是几个字节的……按照你的说法,我推断gs就是一个字节的长度,但是要考虑到字节对齐的话,1个字节变成4个,那么最后就是20字节了……
3、进程空间地址为什么要小于16M?没道理的……
2、20是字节数……
不知道你那个gs是几个字节的……按照你的说法,我推断gs就是一个字节的长度,但是要考虑到字节对齐的话,1个字节变成4个,那么最后就是20字节了……
3、进程空间地址为什么要小于16M?没道理的……
|
linux 0.11是init进行占0---0x4000000,进程1占0x4000000到0x8000000....
|
学协.