Linux内核-系统调用

1.与内核通信

#系统调用在用户空间进程和硬件设备之间添加了一个中间层

作用:1.为用户空间提供了一种硬件的抽象接口

2.系统调用保证了系统的稳定和安全

3.出于每一个进程都执行在虚拟系统中的考虑

#系统调用是用户空间訪问内核的唯一手段

2.API、POSIX和C库

#应用程序通过API而不是直接系统调用来编程

#一个API定义了一组应用程序使用的编程接口

3.系统调用

#内核必需提供系统调用所希望完毕的功能。但它全然能够依照自己的方式去实现,仅仅要最后结果正确

#全部的系统调用都要asmlinkage限定词

#为保证32/64位兼容,系统调用在用户空间返回值时int,内核空间为long

1.系统调用号:

#在Linux中每一个系统调用被赋予一个系统调用号

#系统调用号一旦分配不可改变,否则编译好的应用会崩溃

#Linux上有一个“未实现”的系统调用sys_ni_syscall()。它除了返回-ENOSYS外不做其它不论什么工作

假设一个系统调用被删除,或变的不可用,这个函数去填补空缺

2.系统调用的性能

#Linux系统调用比其它操作系统要快,原因:

1.Linux非常短的上下文切换时间

2.系统调用处理程序和每一个系统调用很简洁

4.系统调用处理程序

#通知内核的机制靠软中断实现,通过引发异常来促使系统切换到内核态去运行异常处理程序(系统调用处理程序)

#指定恰当的系统调用:

在x86上通过eax寄存器将系统调用号传递给内核

system_call()函数通过将给定的系统调用号与NR_syscalls()作比較来检查其有效性

#參数传递:在x86-32系统上,ebx,ecx,edx,esi,edi依照顺序存放前五个參数

给用户空间的返回值通过eax寄存器传递(x86)

5.系统调用的实现

#实现系统调用:

每一个系统调用都有一个明白的用途

系统调用的接口力求简洁。參数尽可能少

设计接口的时候要尽量为将来多做考虑

#參数验证:

#系统调用必须验证他们全部的參数是否合法有效。最重要的检查时检查用户提供的指针是否有效

#在接受一个用户空间的指针之前,内核必须保证:

1.指针指向的内存区域属于用户空间,进程决不能让内核去读取内核空间的数据

2.指针指向的内存区域在进程的地址空间。进程决不能让内核去读取其它进程的数据

3.假设是读,内存标记为可读。假设是写,标记为可写;假设标记为可运行。进程决不能绕过内存訪问限制

6.系统调用上下文

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

1.首先,在系统调用表的最后增加一个表项

2.系统调用号定义于<asm/unistd.h>中

3.系统调用必须被编译进内核映像(不能编译为模块)

#建立新的系统调用的利与弊:

利:#系统调用创建easy且使用方便

#Linux系统调用高性能

弊:#须要一个系统调用号,由官方分配

#系统调用增加稳定内核后被固化,它的接口不同意修改

#须要将系统调用分别注冊到每一个须要支持的结构体系去

#在脚本中不easy调用。也不能从文件系统直接訪问系统调用

#在主内核树之外非常难维护和调用系统调用

Linux内核-系统调用的更多相关文章

  1. 举例跟踪linux内核系统调用

    学号351+ 原创作品转载请注明出处 + 中科大孟宁老师的linux操作系统分析: https://github.com/mengning/linuxkernel/ 实验要求: 编译内核5.0 qem ...

  2. Linux内核系统调用处理过程

    原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 学号末三位:168 下载并编译Linux5.0 xz -d linux-.tar.xz . ...

  3. linux内核系统调用--sendfile函数

    在apache,nginx,lighttpd等webserver其中,都有一项sendfile相关的配置,在一些网上的资料都有谈到sendfile会提升文件传输性能,那sendfile究竟是什么呢?它 ...

  4. Linux内核系统调用列表

    一.进程控制: fork 创建一个新进程 clone 按指定条件创建子进程 execve 运行可执行文件 exit 中止进程 _exit 立即中止当前进程 getdtablesize 进程所能打开的最 ...

  5. linux内核系统调用和标准C库函数的关系分析

    http://blog.csdn.net/skyflying2012/article/details/10044343

  6. LInux内核分析--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    实验者:江军 ID:fuchen1994 实验描述: 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3 ...

  7. 【内核】探究linux内核,超详细解析子系统

    Perface 前面已经写过一篇<嵌入式linux内核的五个子系统>,概括性比较强,也比较简略,现在对其进行补充说明. 仅留此笔记,待日后查看及补充! Linux内核的子系统 内核是操作系 ...

  8. 2019-2020-1 20199310《Linux内核原理与分析》第六周作业

    1.问题描述 在前面的文章中,学习了系统调用的相关理论知识,并使用库函数API和C代码中嵌入汇编代码两种方式使用getpid()系统调用.本文将内容围绕系统调用system_call的处理过程,在Me ...

  9. 2019-2020-1 20199325《Linux内核原理与分析》第五周作业

    第五周作业主要是选择一个系统调用(13号系统调用time除外),使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用,在实验楼Linux虚拟机环境下完成实验. 系统调用的列表参见 http ...

随机推荐

  1. Python之美[从菜鸟到高手]--urlparse源码分析

    urlparse是用来解析url格式的,url格式如下:protocol :// hostname[:port] / path / [;parameters][?query]#fragment,其中; ...

  2. HTML5 总结-表单-表单元素

    HTML5 表单元素 HTML5 的新的表单元素: HTML5 拥有若干涉及表单的元素和属性. 本章介绍以下新的表单元素: datalist keygen output 浏览器支持 Input typ ...

  3. 深夜,用canvas画一个时钟

    深夜,用canvas画一个时钟 查看demo 这几天准备阿里巴巴的笔试,可以说已经是心力交瘁,自从阿里和蘑菇街的内推被刷掉之后,开始越来越怀疑起自己的能力来,虽然这点打击应该是微不足道的.毕竟校招在刚 ...

  4. python--data type

    1.Python中常见的数据类型有: 数据类型    内建函数 整型    int(),long() 浮点型    float() 字符串型    str() 列表    list() 元组    t ...

  5. Qt探秘——谈ui文件的用法

    转载自:点击打开链接http://blog.csdn.net/luo_isaiah/article/details/5794973 相信用过Qt Designer的朋友,对Qt Project中的.u ...

  6. 用200行Python代码“换脸”

    介绍 本文将介绍如何编写一个只有200行的Python脚本,为两张肖像照上人物的“换脸”. 这个过程可分为四步: 检测面部标记. 旋转.缩放和转换第二张图像,使之与第一张图像相适应. 调整第二张图像的 ...

  7. 基于visual Studio2013解决C语言竞赛题之0204实数求值

     题目

  8. 有n个数(两两不同),对于这n个数的每个连续子序列,把其中最大的一个数标记一次,问最后每个数被标记次数

    今天在qq群了看到了这个题目,觉得用单调栈的解法挺好,可以在o(n)内搞定,特意记录下来 首先明确单调栈的含义: 栈是FILO的,栈的所有操作都是在栈顶进行. 单调性指的是当前栈中存储的元素是严格的递 ...

  9. 【JUnit4.10源码分析】5 Statement

    假设要评选JUnit中最最重要的类型.或者说核心,无疑是org.junit.runners.model.Statement.Runner等类型看起来热闹而已. package org.junit.ru ...

  10. 键盘过滤第一个例子ctrl2cap(4.1~4.4)汇总,测试

    键盘过滤第一个例子ctrl2cap(4.1~4.4)汇总,测试 完整源代码 /// /// @file ctrl2cap.c /// @author wowocock /// @date 2009-1 ...