2012年5月26日
摘要: 由前2篇文章做基础,现在可以理解系统调用了。用户空间栈&系统空间栈中断&异常系统调用定义 系统调用是内核提供的一系列强大的函数。它们在内核中实现,然后通过一定的方式(X86是软中断,也即门陷入)呈现给用户,是用户程序与内核交互的接口。 注意,我们在程序中用调用read、write函数时,这些不是系统调用函数,而是glibc库包装后,进行一些处理,然后再调用系统调用。如果想在程序中直接调用的话,需要调用_syscall()函数。上下文(context) 上下文简单说来就是一个环境,相对于进程而言,就是进程执行时的环境。具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文 阅读全文
posted @ 2012-05-26 16:34 Seiyagoo 阅读(1585) 评论(0) 推荐(0) 编辑
摘要: 中断分类 类别原因返回行为例子广义中断异步中断(狭义中断)中断(interrupt)可屏蔽中断来自I/O设备的信号总是返回到下一条指令所有的IRQ中断不可屏蔽中断电源掉电和物理存储器奇偶校验同步中断(也称异常)陷阱(trap)有意的异常总是返回到下一条指令系统调用、信号机制(通过软中断实现)故障(fault)潜在可恢复的错误返回到当前指令缺页异常、除0错误、段错误终止(abort)不可恢复的错误不会返回硬件错误 注:80386有两根引脚INTR和NMI接受外部中断请求信号,INTR接受可屏蔽中断请求。在80386中,标志寄存器EFLAGS中的IF标志决定是否屏蔽可屏蔽中断请求。中断的定... 阅读全文
posted @ 2012-05-26 12:58 Seiyagoo 阅读(2002) 评论(1) 推荐(0) 编辑
摘要: 用户空间栈 & 系统空间栈以下简称用户栈、内核栈1、用户栈和内核栈的区别 内核在创建进程的时候,在创建task_struct的同时,会为进程创建相应的堆栈。每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。记住,进程对应的用户栈和内核栈都是进程私有的。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针寄存器里面的内容是内核栈空间地址,使用内核栈。 注:有些系统中专门为全局中断处理提供了中断栈,但是x86中并没有中断栈,中断在当前进程的内核栈中处理。2、linux中有多少个内核栈 在/inclu. 阅读全文
posted @ 2012-05-26 01:48 Seiyagoo 阅读(6967) 评论(1) 推荐(1) 编辑