• 20135320赵瀚青LINUX第五章读书笔记


    第五章——系统调用

    5.1 与内核通信

    作用

    • 1.为用户空间提供一种硬件的抽象接口
    • 2.保证系统稳定和安全
    • 3.除异常和陷入,是内核唯一的合法入口。

    API、POSIX和C库

    关于Unix接口设计:提供机制而不是策略
    

    5.3 系统调用

    5.3.1系统调用号

    • 当用户空间的进程执行一个系统调用,就用系统调用号指明到底执行哪个系统调用。
    • sys_ni_syscall():错误号,负责“填补空缺”,返回-ENOSYS,专门针对无效的系统调用。
    • 存在sys_call_table。

    5.3.2系统调用的性能

    • 设计原则:简洁、高效
    • 原因:很短的上下文切换时间

    5.4系统调用处理程序

    • 通知内核的机制是软中断实现的:通过引发一个异常来促使系统切换到内核态去指向异常处理程序,而此时的异常处理程序就是系统调用的处理程序。
    • x86系统上的软中断是由int $0x80指令触发128号软中断。

    5.4.1指定恰当的系统调用

    eax寄存器传递系统调用号给内核。

    5.4.2参数传递

    • x86系统,ebx,ecx,edx,esi,edi按顺序存放前五个参数。
    • 需要6个及以上参数,应用一个单独的寄存器存放指向这些参数在用户空间地址的指针。
    • 返回值存放在eax。

    5.5系统调用处理程序

    通知内核

    • 用户程序无法直接执行内核代码,由于内核驻留在受保护的地址空间上,不能直接调用内核空间中的函数。
    • 应用程序以某种方式通知系统,告诉内核自己需要执行一个系统调用,希望系统切换到内核态,内核就可以代表应用程序在内核空间执行系统调用。
    • 通知内核的机制是靠软中断实现的:通过引发异常来粗来系统切换内核态执行异常处理程序(系统调用处理程序)。
    • 用户空间引起异常或陷入内核

    指定恰当的系统调用

    eax寄存器:将系统调用号传递给内核
    system_call():与NR_syscall比较,检查有效性
    call *sys_call_table(,%rax,8):执行相应的系统调用
    

    参数传递

    x86系统,ebx,ecx,edx,esi,edi按顺序存放前五个参数。
    需要6个及以上参数,应用一个单独的寄存器存放指向这些参数在用户空间地址的指针。
    返回值存放在eax
    

    5.6 系统调用上下文64

    5.6.1 绑定一个系统调用的最后步骤

    • 首先,在系统调用表的最后加入一个表项。每种支持该系统调用的硬件体系都必须做这样的工作
    • 对于所支持的各种体系结构,系统调用号都必须定义于<asm/unistd.h>中。

    5.6.2 从用户空间访问系统调用

    • 通常,系统调用靠C库支持。
      Linux本身提供了一组宏。

    5.6.3 为什么不通过系统调用的方式实现

    建立一个新的系统调用的好处

    • 系统调用创建容易且使用方便。
    • Linux系统调用的高性能显而易见。

    心得与体会

    本周的学习内容是系统调用,在网易云课堂中这门课分为了两个部分,所以对这一章的理解也比较容易,系统调用基本上就分为三个部分,总的来说就是靠中断实现系统调用,三个部分为,API,中断向量,中断服务程序。这门课也进行了一半了,基本上也找到了模式,希望以后能够更加顺利地进行学习

  • 相关阅读:
    jwplayer
    jwPlayer为js预留的回调方法
    Java的内存--内存溢出vs内存泄露(2)
    java:LeakFilling(Hibernate)
    java:Hibernate框架1(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态,增删查改)
    java:struts框架(网路静态U盘项目)
    java:struts框架5(Converter,Validation,Tags(Object-Graph Navigation Language))
    java:struts框架4(Ajax)
    java:struts框架3(自定义拦截器,token令牌,文件上传和下载(单/多))
    java:struts框架2(方法的动态和静态调用,获取Servlet API三种方式(推荐IOC(控制反转)),拦截器,静态代理和动态代理(Spring AOP))
  • 原文地址:https://www.cnblogs.com/5320zhq/p/5303727.html
Copyright © 2020-2023  润新知