首页 > 编程知识 正文

linux系统工作原理,系统调用的执行过程

时间:2023-05-04 07:28:01 阅读:153737 作者:2567

Linux % E6 % 9c % 8d % E5 % 8a % a1 % E5 % A8 % E5 % BC % 80 % E5 % 8f % E7 % 9b % b8 % E5 % 85 % b8 % E8 % a7 % 86 % 20 % B9 6 % 20 E4 % BD % A0 % E5 % AE % 9e7% B0 % E4 % b8 % E4 % b8 % aa Linux % E5 % 86 % E6 % A0 % b8 % E6 % 96 % ee7 % ee % 20 % % 208 % E6 % 98 % af % E7 % B3 % bb % E7 % bb % 9f % E8 % B0 % 83 % E7 % 94 % A8 % 20 % E7 % B3 % bb % E7 % bb % E8 % bb0 % 83 7 % BD % E6 % 25 % 20b0% 83 % E7 % 94 % A8 % 20 % E8 % BF % 90 % E8 % a1 % 8c % E5 % A8 % E5 % 85 % E6 % A0 % b8 % E6 % 80 % E6 % 80 % A8 % E6 % 80 % 80 % b8 % b8 % b8 % b8 % b8 % AE % E6 % 97 % B6 % e9 % 92 % 9f % E3 % 81 % E5 % 85 % B3 % e9 % 97 % ad % 2f % E6 % 89 % 93 % E5 % BC % 80 % E4 % b8 % 25 % b8 % 25 % b % E4 % b8 % E7 % a7 % E8 % 83 % BD % E5 % a4 % BF % E8 % E5 % 85 % a5 % E6 % A0 % 25 % 20e7% 94 % A8 % 20 % E5 % B0 % B1 % 86 % E6 % A0 % b8 % E6 % 8f % 90 % be9b % E7 % 9a 84 % E4 % b8 % E6 % ae5 % 25 % 20e5% AE % 9e % E7 % 8e % B0 % E4 % ba % 86 % ba % E4 % b8 % ad % E6 % 96 % ad % ef % BC % 88 x86 % 20 CPU % ef % BC % 89 % E6 % 88 % 96 % E8 % 80 % 85 % 25 % 20b0% 83 % E7 % 93 0c % E6 % 96 % 87 % E4 % b8 % bb % E8 % a6 % 81 % E4 % bb % 8b % E7 % 9a % 84 % E6 % 98 % af % 20 x86 % 20 CPU % 4 % b8 % ad % E6 % 96 % 2085 % a5 % 20 % E7 % B3 % bb % E7 % bb % 9f % E8 % B0 % 83 % E7 % 94 % A8 % ef % BC % 8c % E6 % 88. % BF % 87 % E7 % A8 % 8b % ef % 208 syscall _ vector % 2c % 20 system _ call % 29 % 3b % 20 . % 7d % 20 % E7 % B3 % B7 % B7 % bb % 20 % E4 % b8 % ad % E6 % ad % E5 % a4 % 25 % 20be % E7 % BD % ae5 % 85 % B6 % E4 % b8 % ad % E6 % 96 % ad % a4 % 84 % ed af % E8 % A8 % E7 % BC % 96 % E5 % 86 % 96 % 25 % 205 % 85 % B3 % e9 % 94 % ae9 % e9 % 83 % A8 % E5 % 88 % ef % BC % 8c % E5 % % 29 % 20 % 23 % 20 save % 20 the % 20 return % 20 value % 20 . % 25 % 20 % 87 % E7 % BC % 96 % E6 % B9 % E5 % 86 % E6 % 88 % 20 A8 % 20 eax % 20 % E5 % af % 84 % E5 % ad % 98 % E5 % A8 % E7 % 9a % 20ys call % 28 % 29 % 3b % 20 . % 7d % 20 sys _ call _ tad % 85 % E7 % B4 % A0 % E4 % bb % a3 % E8 % a1 % A8 % E4 % b8 % b8 % 80 % E4 % b8 % aa % 20 % 20 % E5 % 85 % B6 % E5 % ae9a % E4 % b9. ble % 29 % 20.long % 20 symbol _ name % 28 sys _ ni _ syscall % 29 % 20.long % 20 symbol _ 20 % 20 % 20 symbol _ name % 20

asmlinkagelongsys _ open (const char * filename,int flags,int mode )…}典型的系统调用必须使用asmlinkage编译选项。 asmlinkage编译选项指示编译器从堆栈中读取参数,实际上是使用asmlinkage编译选项

# defineasmlinkagecpp _ asmlinkage _ _ attribute _ ((regparm (0) ) ) http://www.Sina.com/((regparm ) ) ) )

但是,由于寄存器只能传递32位整数值(x86 CPU ),所以参数一般只能传递指针或整数值。 要获取与指针相对应的结构的数据,必须从用户空间(如sys_open )获取要在复制到内核空间的系统调用中打开的文件路径。

asmlinkagelongsys _ open (const char * filename,int flags,int mode ) { char * tmp; tmp=getname(filename ); } getname (函数用于将数据从用户空间复制到内核空间。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。