文档详情

LINUX系统调用的exit实例分析.doc

发布:2016-04-21约1.01万字共9页下载文档
文本预览下载声明
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中,系统调用的执行是通过中断或异常的方式来进行的,他将 执行相应的机器代码指令,来产生中断或异
显示全部
相似文档