当前位置: 技术问答>linux和unix
系统调用,如何看见?
来源: 互联网 发布时间:2015-05-02
本文导语: 看书时,讲到系统调用,用“进管指令”调用系统提供的服务接口。 具体,如何操作? 1、在Shell中输入命令,由Shell去调用?多数Shell命令需要调用操作系统提供的系统调用吗? 2、在C中、在Perl中,如何系统调用?C...
看书时,讲到系统调用,用“进管指令”调用系统提供的服务接口。
具体,如何操作?
1、在Shell中输入命令,由Shell去调用?多数Shell命令需要调用操作系统提供的系统调用吗?
2、在C中、在Perl中,如何系统调用?C中,printf()就是系统调用?
我想看见系统调用是个什么样子?
具体,如何操作?
1、在Shell中输入命令,由Shell去调用?多数Shell命令需要调用操作系统提供的系统调用吗?
2、在C中、在Perl中,如何系统调用?C中,printf()就是系统调用?
我想看见系统调用是个什么样子?
|
"
看书时,讲到系统调用,用“进管指令”调用系统提供的服务接口。
具体,如何操作?
1、在Shell中输入命令,由Shell去调用?多数Shell命令需要调用操作系统提供的系统调用吗?
2、在C中、在Perl中,如何系统调用?C中,printf()就是系统调用?
我想看见系统调用是个什么样子?
"
一、访管指令其实就是一个中断。还记得DOS下的系统调用吗?就是int+功能号。Linux下为int 0x80
二、shell是与系统调用并列的,就是OS原理课上讲的OS提供给用户的两个接口。不过每个shell命令最终都是通过系统调用来实现的,因为shell是运行在用户空间的。
三、printf不是系统调用,而是库函数。
四、常见的fork、clone是系统调用,现以clone为例,看看“系统调用是什么样子”
......
__asm__ volatile(
"int 0x80nt" //linux 系统调用
"testl %0,%0nt"
"jne lfnt"
"call *%3nt" //在线程中启动线程函数fn
"movl %2,%0nt"
"int 0x80nt"
"l:t"
:"=a"(retval)
:"0"(NR_clone)/*具体功能在内核中实现*/,
"i"(NR_exit),"r"(fn),"b"(CLONE_VM|...),"c"(nstack)
);
......
楼主可能在学习OS原理课程吧,我正在准备考计研,有兴趣可以交流一下,我的mail:conke@163.com
看书时,讲到系统调用,用“进管指令”调用系统提供的服务接口。
具体,如何操作?
1、在Shell中输入命令,由Shell去调用?多数Shell命令需要调用操作系统提供的系统调用吗?
2、在C中、在Perl中,如何系统调用?C中,printf()就是系统调用?
我想看见系统调用是个什么样子?
"
一、访管指令其实就是一个中断。还记得DOS下的系统调用吗?就是int+功能号。Linux下为int 0x80
二、shell是与系统调用并列的,就是OS原理课上讲的OS提供给用户的两个接口。不过每个shell命令最终都是通过系统调用来实现的,因为shell是运行在用户空间的。
三、printf不是系统调用,而是库函数。
四、常见的fork、clone是系统调用,现以clone为例,看看“系统调用是什么样子”
......
__asm__ volatile(
"int 0x80nt" //linux 系统调用
"testl %0,%0nt"
"jne lfnt"
"call *%3nt" //在线程中启动线程函数fn
"movl %2,%0nt"
"int 0x80nt"
"l:t"
:"=a"(retval)
:"0"(NR_clone)/*具体功能在内核中实现*/,
"i"(NR_exit),"r"(fn),"b"(CLONE_VM|...),"c"(nstack)
);
......
楼主可能在学习OS原理课程吧,我正在准备考计研,有兴趣可以交流一下,我的mail:conke@163.com