ImageVerifierCode 换一换
格式:DOC , 页数:2 ,大小:21.50KB ,
资源ID:2229901      下载积分:20 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-2229901.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(UNIX内核-系统调用的机制.doc)为本站会员(dzzj200808)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

UNIX内核-系统调用的机制.doc

1、UNIX 内核系统调用的机制系统调用的机制1.中断和异常大多数的微处理器的处理都可以被当前执行的程序具有更高优先级的事件中断。这些特殊事件有各自的特点,但总的说来,它们可以分为中断和异常(Interrupts and excepton)。中断可以说是硬件设备对处理器产生的“刺激”,它们是由外部事件引起的。这些事件包括硬盘和软盘的活动,键盘的输入,调制解调器的控制活动等等.另一方面,异常则是响应某些系统错误引起的,也可以是响应某些可以在程序中执行的特殊机器指令引起的。不管产生的是中断还是异常,处理器响应的方式是类似的。执行一段被称为中断处理或异常处理的特殊程序。一般来说,在特定的系统中,对每一种

2、中断和异常类型都有单独的处理程序。对每一种中断和异常,都在 0255 范围内给以一个唯一的数加以标记,当发生中断或者异常时,这个数(称为向量号)用作进入指针数组(中断或异常向量表)的索引,表中每个指针指向用来处理特定中断或异常类型的子程序的地址。大多数中断和异常象函数一样进行处理。所以当中断或异常处理程序结束时,被中断的程序将重发生中断时的断点继续向下执行。2.系统调用的机制在 UNIX 系统中,系统调用是作为一种异常类型实现的。它将执行相应的机器代码指令来产生异常信号。产生中断或异常的重要效果是系统自动将用户模式切换为内核模式来对它进行处理。这就是说,执行系统调用的异常指令时,将自动地将系统

3、切换为内核模式,并安排异常处理程序的执行。它知道如何处理这一调用。以 LINUX 为例,在 LINUX 中实现系统调用异常的实际指令是:int $0x80这一指令使用中断/异常向量号 128(即 16 进制的 80)将控制权转移给内核。为达到在系统调用时不必用机器指令编程,在标准的 C 语言库中为每一个系统调用提供了一段短的子程序,完成机器代码的编程工作。事实上,机器代码非常短。它要做的工作只是将送给系统调用的参数值加载到 CPU寄存器中,接着执行 int $0x80 指令。然后运行系统调用,系统调用的返回值将送入 CPU 的一个寄存器中,标准的库子程序取得这一返回值,并将它送回给你的程序。为

4、了使系统调用执行成为一项简单的任务,LINUX 中提供了一组预处理宏指令。它们可以用在程序中。这些宏指令取一定的参数,然后扩展为调用指定的系统调用的函数:这些宏指令具有类似下面的名称格式:syscallN(parameters)其中 N 用系统调用所需的参数数目代替,而 parameters 则用一组参数代替。这些参数使宏指令完成适合于特定的系统调用的扩展。例如,为了建立调用 seuid()系统调用的函数,应该使用;syscall1(int,setuid,uid_t,uid)syscallN()宏指令的第一个参数说明产生的函数的返回值的类型(这里是int),第二个参数说明产生的函数的名称(这里

5、是 setuid)。后面是系统调用所需要的每个参数。这一宏指令后面还有两个参数分别用来指定参数的类型和名称(这里是 uid_t 和 uid)。用作系统调用的参数的数据类型有一个限制,它们的容量不能超过 4 个字节。这是因为执行 int $0x80 指令进行系统调用时,所有的参数值都存在32 位的 CPU 寄存器中。使用 CPU 寄存器传递参数带来的另外一个限制是可以传递给系统调用的参数的数目。这个限制是最多可以传送 5 个参数。所以一共定义了 6 个不同的 syscall N()宏指令(从 syscall 0()到syscall5() )。一旦 syscall N()宏指令用特定的系统调用的相应参数进行了扩展,得到的结果是一个与系统调用同名的函数,它可以在用户程序中执行这一系统调用。

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报