zoukankan      html  css  js  c++  java
  • 《内核设计与实现》第五章读书笔记

    《内核设计与实现》第五章读书笔记


    第五章:系统调用

    用户进程与内核的接口:是用户进程与内核的使者。
    

      


    5.1 与内核通信

    用户空间进程和硬件设备之间中间层——系统调用

    作用:    1为用户空间提供一种硬件的抽象接口;
             2保证系统的稳定安全(对权限访问等的裁决)
             3是用户空间访问内核的唯一手段(出异常和陷入),是内核唯一的合法入口。
    

      

    5.2 API,POSIX和C库

    5.3 系统调用

        访问系统调用,通过C库中定义的函数调用进行。
        系统调用在出错时,C库会把错误码写入errno全局变量。
        为保证32位和64位系统的兼容,系统调用在用户空间和内核空间有不同的返回值类型。
    

      

    5.3.1系统调用号

        每个系统调用一个系统调用号。,用来关联系统滴啊用。
        进程不会提及系统调用的名称。
        专门针对无效的系统调用:sys_ni_syscall()
    

      

    5.3.2系统调用性能

        比其他操作系统执行得快。
        原因:很短的上下文切换时间
    

      

    5.4 系统调用的实现

        应用程序应该以某种方式通知系统,告诉内核自己需要执行一个系统调用,希望系统切换到内核态。内核就可以代表应用程序在内核空间执行系统调用。
        通知内核的机制是靠软中断实现的:通过引发异常来粗来系统切换内核态执行异常处理程序(系统调用处理程序)。
    

      

    5.4.1制定恰当的系统调用

        系统调用号通过eax传递给内核。
    

      

    5.4.2参数传递
        ebx,ecx,edx,esi,edi按照顺序存放前五个参数。
        需要六个或六个以上参数时,应用一个单独的寄存器存放指向所有参数在用户空间地址的指针。
        返回值用eax
    

      

    5.5系统调用的实现

    5.5.1实现系统调用

    明确用户,确定调用参数,返回值和错误码。
    

      

    5.5.2参数验证
        接收用户空间的指针前,内核保证:
        指针指向的内存区域属于用户空间
        指针指向的内存区在进程的地址空间里
        进程不能绕过内存访问限制
    

      

    5.6系统调用上下文

        内核在执行系统调用时处于进程上下文。
        进程上下文中,内核可休眠(系统调用阻塞或显式调用schedule()时)并可以被抢占。
        系统调用返回时,控制权仍在system_call(),最终负责切换到用户空间,并让用户进程继续执行下去。
    

      

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

        系统调用表加入一个表项
        系统调用号定义<asm/unistd.h>
        必须编译进内核映象
    

      

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

        系统调用靠C库支持。
        Linux提供一组宏,用户直接对系统调用进行访问。每个宏都有2+2*n个参数。
    

      

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

  • 相关阅读:
    重新开发四则运算器
    结对编程
    四则运算 个人项目整理
    DAY 012--dict(增、删、改、查、合并)
    001--面向对象 V.S 面向过程
    DAY 011--Tuple使用方法汇总
    001--二分法(Binary search)
    DAY 006--查找某个值是否在列表中(二分法)
    DAY 009--str(替换三种方法)
    DAY 008--str(常见判断条件)
  • 原文地址:https://www.cnblogs.com/zhengwei0712/p/5285370.html
Copyright © 2011-2022 走看看