基于linux操作系统的系统调用分析new

基于linux操作系统的系统调用分析new

ID:33695206

大小:256.73 KB

页数:4页

时间:2019-02-28

基于linux操作系统的系统调用分析new_第1页
基于linux操作系统的系统调用分析new_第2页
基于linux操作系统的系统调用分析new_第3页
基于linux操作系统的系统调用分析new_第4页
资源描述:

《基于linux操作系统的系统调用分析new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、万方数据第10卷第6期重庆科技学院学报(自然科学版)2008年12月基于Linux操作系统的系统调用分析范恩魁陈亚军(西华师范大学,南充637000)摘要:Linux操作系统具有源码的开放性和极强的稳定性等优点。基于Linux一2.4内核,分析了系统调用的实现原理和过程.讨论了用户增加新的系统功能调用的实现方法。关键词:系统调用:Linux;内核中图分类号:TP316文献标识码:A文章编号:1673—1980(2008)06—0124—03系统调用是指操作系统内核提供给应用程序调用的一系列函数(也可称为一组特殊

2、接I=I),功能十分强大.应用程序通过这些函数来获得操作系统提供的有关设备管理、进程控制、进程问通信等一系列的功能.而不必了解系统的内部结构。从而起到减轻用户负担、保护系统以及提高资源利用率的作用。作为开源软件的代表.Linux操作系统以其源码的开放性、极强的稳定性,适用于多种计算机平台、且由全世界各地数以百计的程序员设计和维护。最近数年得到了广泛的应用。它的系统调用不同于其他操作系统:在给用户程序提供服务的同时.还对内核安全提供了保障.使用户程序不能随意修改系统调用。文中分析了Linux系统调用的具体过程.以

3、及在有Linux源代码的情况下,通过一个简单实例说明如何添加适合用户自己的系统调用的方法。1Linux的系统调用分析在Linux系统中.程序的运行空间分为内核空间和用户空间f常称的内核态和用户态.在用户空间运行应用程序),它们分别运行在不同的级别上,在逻辑上是相互隔离的。用户进程通常不允许访问内核,当用户进程需要获得一定的系统服务(调用内核空间的程序)时,这时就须用到系统调用。系统调用规定用户进程进入内核空间的具体位置.然后程序运行空间从用户态进入内核态完成相关处理.处理完后再返回到用户态。Linux系统调用是

4、作为一种异常类型实现的,它通过执行相应的机器代码来产生异常信号,然后自动将系统切换为内核态.并执行相应的处理程序。用户态的程序可以通过两种不同的方式实现系统调用:(1)执行int$o)(80汇编语言指令,在Linux一2.4及以前的版本中,这是从用户态切换到内核态的唯一方式;(2)执行sysenter汇编指令,在IntelPentiumII微处理器芯片中引入了这条指令。现仅Linux一2.6版本中支持这条指令。系统调用完成后,系统执行iret汇编指令或sysexit汇编指令(Linux一2.6版本中支持)将系统

5、返回到用户态,控制权还交给用户进程。因为支持进入或退出Linux内核的这两种方式须满足如下条件:(1)内核必须既支持只使用int$0x80指令的1日函数库.同时也支持使用sysenter指令的新函数库;(2)使用sysenter指令的标准库必须能处理仅支持int$0)【80指令的旧内核;(3)内核和标准库必须既能运行在不包含sysenter指令的旧处理器上。也能运行在包含它的新处理器上。所以接下来的分析都是基于Linux一2.4.20版本进行。1.1调用结构和函数Linux的系统调用是一套C语言甬数名的集合,如

6、write0、open0、read0等,共258个(RedHatLinux一2.4.20)。为了实现系统调用的功能,在Linux内核定义了相关的数据结构和函数。当产生系统调用时通过int$Ox80指令进人系统调用总入El(system_call),在入口处保存寄存器当收稿日期:2008-08—15基金项目:四川省教育厅重大科研培育项目(07ZZ035)作者简介:范恩魁(1983一),男,四川遂宁人,西华师范大学计算机学院硕士研究生,研究方向:嵌入式系统开发。·124-万方数据范恩魁.陈亚军:基于Linux操作系

7、统的系统调用分析前值。检验当前调用是否合法以及根据系统调用表_sys_call_table和EAX的系统调用号找到并转入系统调用的响应函数,从响应函数返回后让EAX寄存器保存函数返回值,跳转至ret_from_sys_call,最后均从restore_all返回到用户空间。系统调用总人口和系统调用表在文件/usr/src/linux一2.4/areldi386/kernel/entry.S中进行了定义。系统调用表依次保存着所有系统调用的函数指针,通过这张表就可以根据特定系统调用在表中的偏移量找到对应的系统调用响

8、应函数的人口地址,其部分代码如下:ENTRY(sys_call—table).10ngSYMBOLNAME(sys_ni_syscall).10ngSYM80L_NAME(sys_exi0.10ngSYMBOL—NAME(sys_settidaddress).reptNR_syscalls一(.一sys_call—table)/4.10ngSYMBOL_NAME(sys_ni—sysc

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。