Linux内核-系统调用
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内核-系统调用的更多相关文章
- 举例跟踪linux内核系统调用
学号351+ 原创作品转载请注明出处 + 中科大孟宁老师的linux操作系统分析: https://github.com/mengning/linuxkernel/ 实验要求: 编译内核5.0 qem ...
- Linux内核系统调用处理过程
原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 学号末三位:168 下载并编译Linux5.0 xz -d linux-.tar.xz . ...
- linux内核系统调用--sendfile函数
在apache,nginx,lighttpd等webserver其中,都有一项sendfile相关的配置,在一些网上的资料都有谈到sendfile会提升文件传输性能,那sendfile究竟是什么呢?它 ...
- Linux内核系统调用列表
一.进程控制: fork 创建一个新进程 clone 按指定条件创建子进程 execve 运行可执行文件 exit 中止进程 _exit 立即中止当前进程 getdtablesize 进程所能打开的最 ...
- linux内核系统调用和标准C库函数的关系分析
http://blog.csdn.net/skyflying2012/article/details/10044343
- LInux内核分析--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
实验者:江军 ID:fuchen1994 实验描述: 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3 ...
- 【内核】探究linux内核,超详细解析子系统
Perface 前面已经写过一篇<嵌入式linux内核的五个子系统>,概括性比较强,也比较简略,现在对其进行补充说明. 仅留此笔记,待日后查看及补充! Linux内核的子系统 内核是操作系 ...
- 2019-2020-1 20199310《Linux内核原理与分析》第六周作业
1.问题描述 在前面的文章中,学习了系统调用的相关理论知识,并使用库函数API和C代码中嵌入汇编代码两种方式使用getpid()系统调用.本文将内容围绕系统调用system_call的处理过程,在Me ...
- 2019-2020-1 20199325《Linux内核原理与分析》第五周作业
第五周作业主要是选择一个系统调用(13号系统调用time除外),使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用,在实验楼Linux虚拟机环境下完成实验. 系统调用的列表参见 http ...
随机推荐
- jQuery扩展extend一
把这个扩展写在这里,以后要是忘了可以回头查看. (function(j) {// 这里的j是一个形参,表示传入的jQuery对象,j可以任意填写 j.extend({// 相当于给jQuery对象加上 ...
- codeforces 464B Restore Cube
题目链接 给8个点, 判断这8个点能否组成一个正方体, 如果能, 输出这8个点. 同一个点的x, y, z可以交换. 每一个点有6种排列方式, 一个8个点, 暴力枚举出所有排列方式然后判断能否组成正方 ...
- [LeetCode]题解(python):017-Letter Combinations of a Phone Number
题目来源: https://leetcode.com/problems/letter-combinations-of-a-phone-number/ 题意分析: 这道题是输入一段数字字符digits, ...
- python类继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过 继承 机制.继承完全可以理解成类之间的 类型和子类型 关系. 假设你想要写一个程序来记录学校之中的教师和学生情况.他们有一些 ...
- 数据结构——二叉搜索树(Binary Search Tree)
二叉树(Binary Tree)的基础下 每个父节点下 左节点小,右节点大. 节点的插入: 若root==NULL则root=newnode 否则不断与节点值比较,较小则向左比较,较大则向右比较. 完 ...
- 高级爬虫工程师(Spider)-美团网-拉勾网-最专业的互联网招聘平台
高级爬虫工程师(Spider)-美团网-拉勾网-最专业的互联网招聘平台 高级爬虫工程师(Spider)
- 11997 - K Smallest Sums(优先队列)
11997 - K Smallest Sums You’re given k arrays, each array has k integers. There are kk ways to pick ...
- C# Setup package Uninstaller
安裝的部分就不介紹了,網上一搜一大堆,這裡只介紹下卸載的部分. 1.在C:\Windows\System32 目录下找到 msiexec.exe 拷贝到相应的地方,可修改名称为 Uninstall.e ...
- 瑞星杀毒软件、奇虎360杀毒软件、360卫士、百度卫士联手,搞不定弹出广告 & 恶意广告图标
一位网友说他的电脑近期出了问题:开机后桌面和任务栏上的高速启动栏会出现恶意图标.删除了下次开机又会出现:使用电脑过程中每分钟都会弹出广告.他为电脑安装了瑞星杀毒软件.奇虎360杀毒软件.360卫士.百 ...
- jvm Classload method介绍
1,jvm Classload默认几个重要方法介绍 findClass:Finds and loads the class with the specified name from the URL s ...