- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LINUX系统调用的exit实例分析.doc
LINUX系统调用及exit实例分析
计算机系962班 黄山松 9615158
序言: 计算机操作系统课程即将结束, 经过这一学期的学习,我对操作系统 , 尤其是Linux系统有了初步认识 ,虽然限于英语水平, 对外籍参考书较少涉及, 但也深有收获. 特别是分析系统调用的源码 , 揭开了系统核心的神密的面纱.
Linux系统的结构
在清华大学出版的操作系统基础 (屠立德.屠祁 编著) 曾经见过这样一幅 Unix 结构图,我觉得对 Linux 同样适用, 经少量改动, 示意如下:
裸机
汇编子程序
全局变量
进程管理(包括对换进程)
存贮管理
文件管理
IO中断
设备管理与
163个系统调用命令
应用程序包子程序
Shell 命令解释程序
用户一
用户二
用户三
:::::::::::::::::::::::: 例图 Linux 系统的结构
Linux 系统 由内核和用户层组成. 内核是Linux 系统的心脏. 由汇编文件和C 语言文件构成. 汇编文件主要用于系统初启 . 中断处理等与硬件细节密切相关的部分, 此处本文不作详解 . 内核按以下功能分块:
存贮管理
进程管理
进程通信
中断 .陷阱 与系统调用 ( 此处陷阱仅狭义为异常 )
输入输出管理
文件系统
由例图及上面的分类 , 我们至少知道了为什么要有系统调用 . 用最简单的话来说 , 系统调用就是硬件与软件的接口. 或者说 内核与外壳的接口.
实际上, Linux 的系统核心的所有程序都是作为进程的一部分而运行的,被包括在每一个进程的虚拟地址空间里, so 每一个进程都包含着两个部分: 系统程序部分和用户程序部分. 一进程在用户态运行时, 执行的是用户程序;若中断而转入核心态, 执行系统核心程序.
下面就让我们进入
系统调用的流程
大致流程如下:
start_kernel ( ) 函数 ( i386/main.c )
trap_init ( ) 函数 ( kernel/trap.c )
宏 set_grap_gate ( ) 函数 ( asm/system.h )
start_kernel ( ) 提供了各种 trap 入口 . 通过调用 trap_init ( ) 函数 设置, 而 trap_init ( ) 又通过调用 set_ system_gate( 0x80,system_call ) 实现具体操作.
在 Linux 系统调用中, 首先由0x80 号中断进入系统调用入口, 通过系统调用表保存系统调用服务函数的入口地址来实现,那好就从中断开始吧.
1.1关于中断
在386体系结构中,承认两类事件。
异常(exceptions)
中断(interrupts)
他们都会引起“ 上下文转换 ” ,(context switch) 同时建立一个过程 (procedure)或任务(task)
中断可以随时随地发生(包括在执行程序时)所以用来响应硬件信号。
而异常则由指令内部错误引起。
在80386中,又把中断分为两种:
可屏蔽中断(Miscible Interrupt) 如 IO 中断 等
不可屏蔽中断(NonMaskable Interrupt)如 机器内部故障 . 掉电中断 等
异常也分为两种:
处理器异常 如overflow 等
编程(调试)异常 如 trap 指令 或 INT 中断指令 等
0x80 号中断的设置
在Linux中,系统调用的执行是通过中断或异常的方式来进行的,他将
执行相应的机器代码指令,来产生中断或异
文档评论(0)