系统调用
来源:互联网 发布:淘宝买家2钻厉害吗 编辑:程序博客网 时间:2024/06/14 09:26
本次实验的主要内容就是实现系统调用,了解系统调用的实现方式!
系统调用:是操作系统为用户态进程与硬件设备进行交互提供的一组接口,系统调用通过软中断向内核发送一个明确的请求,一般每个系统调用对应一个封装例程,库在用这些例程定义出给用户的API
API:API俗称应用编程接口(application program interface),只是一个函数定义
Linux系统调用需要三个步骤:
(1) 调用包含系统调用的API
(2)每个系统调用对应一个中断向量,执行中断向量system_call
(3)中断服务程序执行
system_call:system_call是linux中所有系统调用的入口点,每个系统调用至少有一个参数,即由eax传递系统调用号
下面实现用c代码实现20号getpid系统调用:
代码:
#include <stdio.h>#include <unistd.h>int main(){ pid_t pid; pid=getpid(); printf("pid=%d\n",pid); return 0;}
接下来是用汇编实现的同一功能代码:
对于嵌入式汇编语句实现的详解:
__asm__ volatile( "movl $0,%%ebx\n\t" //将ebx清0 "movl $0x14,%%eax\n\t" //将20号系统调用参数传递给eax "int $0x80\n\t" //执行system_call "movl %%eax,%0\n\t" //将eax的值传递给pid :"=m"(pid) );
总结:当用户态通过int 0x80调用一个系统调用时,会进入中断程序。中断程序会SAVE_ALL,保存用户态进程(保存用户态栈顶地址,当时的状态字,当时的cs:eip的值),通过系统调用号决定调用哪个系统调用,系统调用号保存在eax中(也可以传递参数,但是参数不能超过6,超过6个会会把某个寄存器作为指针传入)。进入内核态,中断服务完成,系统调用会返回调用结果到eax寄存器。
陈思宇 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
0 0
- 系统调用
- 系统调用
- 系统调用
- 系统调用
- 系统调用
- 系统调用
- 系统调用
- 系统调用
- 系统调用
- 系统调用
- 系统调用
- 系统调用
- 系统调用
- 系统调用
- 系统调用
- 系统调用
- 系统调用
- 系统调用
- Spring3.1.2与Hibernate4.1.8整合
- 03-百思不得姐(第三天)
- JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释
- 三种循环语句
- 【Java】Java网络编程TCP与UDP
- 系统调用
- JavaWeb实现文件上传 / 下载
- 浅谈C++类的继承与派生的关系
- jdk的主要配置
- C++作业2
- 人脸识别数据库,转过来的,备用
- Maximum Product of Word Lengths
- UML语言简介以及在测试流程中的使用和思考
- 【bzoj4196】[Noi2015]软件包管理器 树链剖分