课程咨询 :025-84812726

  • linux-系统调用

    发布:linux培训      来源:linux培训      

  • 南京达内linux培训专家带大家了解一下linux-系统调用

    系统调用的作用:从用户太陷入内核态三种方式之一,系统调用、中断、异常。

    系统调用是os向上的接口,一般应用程序不会直接使用系统调用,而是使用标准的库api,因为标准库的api一般是一致的,但是具体的系统调用有具体系统而定。

    linux一大亮点:机制(提供什么功能)和策略(怎样实现功能)的区分,关心前者

    www.2cto.com  

    实现机制:

    int 0x80终端号->系统调用//问题:这个中断是怎么产生的?怎么识别系统调用?

    1、用户程序为系统调用设置参数(含系统调用号)

    2、触发软中断 int0x80 导致异常

    3、执行异常事件(--->)会导致处理器切换到内核态并转到一个新的地址,执行异常处理函数(系统调用函数)

    4、找到执行哪一个系统调用

    5、返回用户状态,将控制权返回给用户//怎么做?

    ==========  www.2cto.com  

    1/系统调用号非常关键,一旦分配便不能更改,系统调用号是通过eax传递给内核,返回值也放在eax中。其他参数可放在ebx。ecx。edx。esi。edi中,过多就将参数放在用户空间的一段内存,然后将该地址存在制定寄存器中。

    2/系统调用必须检查所有参数是否有效,用户提供指针是否有效**比如一个进程给内核的指针是其他用户的那就完了,内核帮他拷贝了是吧。。。

    3/用户进程空间的访问严格::两个函数调用 copy——from——user和copy——to_user  这两个有可能由于缺页中断而阻塞

    4/系统调用的返回值,区别于正常返回值(例如写文件返回个数),所以系统调用都使用一个全局的errno来保存错误码(相关接口 perror)。errno很容易改变,所以处理时先存上。

    5/系统调用只能被编译进内核

    6/系统调用表entry。h

    7/实现放在 kernel/sys.c 一般系统调用好实现,但是一般模块可以替代系统调用

    *8/系统调用上下文处于进程上下文中,current引发系统调用的进程可获得,在进程上下中内核可抢占可休眠。*****可抢占说明新的进程会使用同样的系统调用,系统调用是可重入,那么不能有静态变量之类。********可休眠说明内核绝大部分的功能都可用?

    ??此话怎讲???系统调用返回,控制权在syscall中,他负责将返回给用户进程。

    9/系统调用访问内核:&(sys_call_table + num*wordsize(4))获取系统调用表项的函数地址-》执行完-》ret——from——sys检查返回用户空间前需要完成的任务。

    10/系统调用访问用户:1、靠c库的支持  2、linux提供了一组宏,会设置好寄存器并调用陷入指令 _syscalln() n从0到6表示参数个数

    例如: open(const char*filename, int flag int mode)

    直接调用open的话需要定义

    #define NR open 5 _syscall3(long, open, const char *, filename, int, flag, int, mode)

    新增系统调用:

    1、添加源代码:asmlinkage sys_系统调用名(){。。。} 、kernel/sys.c

    2、连接系统调用(使内核其余部分知道该系统调用的存在):1//usr/src/linux/include/asm-i386/unistd.h #define _NR_callname NNN //系统调用对应的号 (内核我才)

    2//usr/src/linux/arch/i386/kernel/entry.S  //.long SYMBOL_NAME(sys_mycall)   sys_call_table中增加(用户我才)

    重新编译 使用:_syscall1(int,mycall,int,ret)

上一篇:LINUX设定开机挂载

下一篇:Linux内存占用过高的问题解决方案

最新开班日期  |  更多

 Linux--零基础全日制班

Linux--零基础全日制班

开班日期:04-28

Linux--全日制班

Linux--全日制班

开班日期:04-28

Linux--零基础周末班

Linux--零基础周末班

开班日期:04-28

Linux--周末班

Linux--周末班

开班日期:04-28

  • 地址:南京市龙蟠中路30号东来商务中心A座5楼
  • 课程培训电话:025-84812726     全国服务监督电话:400-111-8989
  • 服务邮箱 tousu@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56