收藏 分销(赏)

第四章 Linux系统调用.ppt

上传人:s4****5z 文档编号:13964792 上传时间:2026-05-18 格式:PPT 页数:12 大小:208.50KB 下载积分:10 金币
下载 相关 举报
第四章 Linux系统调用.ppt_第1页
第1页 / 共12页
第四章 Linux系统调用.ppt_第2页
第2页 / 共12页


点击查看更多>>
资源描述
Click to edit Master title style,中文,Click to edit Master text styles,中文,Second level,中文,Third level,中文,Fourth level,中文,Fifth level,中文,*,第四章:,Linux,系统调用,目标,:,本章旨在向学员介绍系统调用的基本原理及如何在,Linux,中添加系统调用,时间:,3,小时,教学方法:讲述,4.1 Linux,内核开发的特点,内核编程不能访问,C,库,内核编程是必须使用,GNU C,内核编程缺乏像用户空间编程的内存保护机制,内核只有很小的定长栈,由于内核支持异步中断、,smp,和抢占,因此必须时刻注意同步和并发,可移植性,不要轻易在内核中使用浮点数,4.2,系统调用的概念,操作系统做为计算机的资源管理者,需要一种手段为用户进程提供一种手段用来访问计算机资源,这一手段就是系统调用。,通过系统调用,应用程序可以安全、有效的访问和使用计算机的资源,4.2,系统服务接口的种类,系统调用接口,系统调用是内核向用户进程提供服务的唯一手段,用户进程只能直接或间接的通过系统调用访问系统资源,系统调用涉及系统状态的改变,在用户进程通过系统调用访问系统资源时,系统会从用户态切换到内核态,执行相应的内核态函数,完成相应的任务后放回内核态。,应用编程接口,API,接口,,Linux API,遵循,POSIX,标准,C,库函数,系统调用的高级封装,4.3,系统调用访问方法,使用,C,库函数,使用通用接口,使用内嵌汇编,4.3.1,使用,C,库函数,getpid(),#include,#include,int main(int argc,char*argv),printf(“use libc,pid is:%dn”,getpid();/c,库封装函数,return 0;,4.3.2,使用通用接口接口,syscall(),通过,Glibc,库中提供的通用接口函数,syscall(),访问系统调用,该函数位于,/usr/include/unistd.h,文件中,#include,#include,int main(),printf(“use syscall,pid is%dn”,syscall(_NR_getpid);,return 0;,4.3.3,使用内嵌汇编,内核在头文件,/src/include/asm/unistd.h,中提供,7,个宏,_syscall0,、,_syscall1._syscall6,分别用来调用不同参数的系统调用,,#define _syscall0(type,name),type name(void),long _res;,_asm_ volatile(,int$0 x80,:=a(_res),:0(_NR_#name);,_syscall_return(type,_res);,4.4,系统调用的工作机制,4.4.1,系统调用的基本要素,系统调用门,Linux,系统调用是通过软中断实现的,在内核的初始化阶段就为系统调用设置,0 x80,中断门,系统调用必须通过系统调用门的检测,然后切换到进程的内核态。,内核态栈,为了保证系统数据不被非法访问,必须保证不同运行级别的数据相互隔离,即用户进程的每种运行态都有独立的栈空间。,系统调用号,系统调用表,4.5,系统调用的处理过程,请求系统调用,#include,#define getpid_syscall_num 20,int main(),int pid;,asm(int$0 x80:=a(pid):0(getpid_syscall_num);,printf(pid is%dn,pid);,printf(pid is%dn,getpid();,return 0;,处理系统调用,硬件处理阶段:权限检查、现场保存、调用,syscall(),汇编函数,软件处理阶段:根据系统调用号调用相应的内核处理函数,sys_getpid(),4.6,添加系统调用,系统调用名字为,Mysyscall(),新的系统调用返回系统滴答值,jiffies,系统调用添加步骤,修改系统调用表,arch/i386/kernel/syscall_talbe.s,添加系统调用号,src/include/asm/unistd.h,添加处理函数,src/kernel/time.c,编译内核,asmlinkage long sys_Mysysycall(),return jiffies;,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服