欢迎来到天天文库
浏览记录
ID:1390010
大小:1021.50 KB
页数:55页
时间:2017-11-11
《中断、定时和系统调用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、中断、定时和系统调用中断和异常中断是一种触发信号,一个CPU接收到这样一种信号后会改变它执行代码的流程,一般是从一个固定的地址执行一段预先设定好的程序。中断的种类同步中断:异常,软中断程序运行过程中产生页错误,被0除,中断指令(int),...异步中断:中断,硬中断由设备产生键盘中断,时钟中断,...中断信号常被用来泛指上述各种中断。中断信号是系统的重要和稀缺的资源。每个中断和异常都有一个编号,0-255,称为中断向量。中断信号处理中断信号可以由进程或外部事件产生中断信号的处理只能由内核完成中断当前的程序,切换到中断处理代码中断处理代码不属于进程同步中断与当前进程相关异步中断与当前进程无关
2、中断的结果与进程相关中断处理条件:中断响应时间越快越好中断处理分成tophalf和bottomhalf。中断嵌套中断处理过程中对临界区的处理中断中断可屏蔽中断不可屏蔽中断中断控制器可编程中断控制器:PIC单处理器环境,8259A先进可编程中断控制器:APIC多处理器环境中断请求和中断控制器响应中断请求(IRQ)对中断请求的响应中断控制器产生中断的设备8259A8259A80x86015异常80x86处理器约有20个异常常见异常Divideerror:被0除异常Invalidopcode:无效操作码异常Pagefault:页失效异常每个异常都有相应的异常处理函数(handler)divide
3、_error(),invalid_op(),page_fault(),...中断门描述符内核管理中断使用的数据结构一个中断门描述符由8个字节组成描述符中保存有关中断的各种信息中断向量中断处理函数地址各种权限参数i386共有3种类型的中断门描述符TaskGateDescriptor:任务门描述符InterruptGateDescriptor:中断门描述符TrapGateDescriptor:自陷门描述符不同类型的中断门描述符中断门描述符表内核维护的一个由256个表项的表,每个表项为一个中断门描述符。一个中断门描述符由8个字节组成,整个表共用内存空间2048字节。中断门描述符表保存在内存中,其
4、起始地址保存在一个专用的寄存器中。操作系统在使能中断之前要初始化中断门描述附表。中断门描述符表结构0132331282550号异常:Divideerror,被0除1号异常:Debug,调试0号中断:IRQ01号中断:IRQ1中断指令:int80Linux对中断的使用中断指令intint指令可以产生任意向量的中断Linux对中断的划分中断门:interruptgate,用于硬件中断信号产生的中断,只能在内核模式下使用。系统门:systemgate,用于实现系统调用,可由用户模式下的代码产生。int3,into,bound,int80.自陷门:trapgate,用于其他异常的中断,只能在内核模
5、式下使用。初始化中断门描述符表初级初始化:setup_idt()缺省的中断处理函数:ignore_int()打印"Unknowninterrupt"用ignore_int()填充中断门描述符表中所有表项的中断处理函数ignore_int函数应该永远不会被调用,除非系统硬件或内核出现问题。/*Thisisthedefaultinterrupt"handler":-)*/int_msg:.asciz"Unknowninterrupt"ALIGNignore_int:cldpushl%eaxpushl%ecxpushl%edxpushl%espushl%dsmovl$(__KERNEL_DS
6、),%eaxmovl%eax,%dsmovl%eax,%espushl$int_msgcallSYMBOL_NAME(printk)popl%eaxpopl%dspopl%espopl%edxpopl%ecxpopl%eaxiretarch/i386/kernel/head.S:ignore_int/**setup_idt**setsupaidtwith256entriespointingto*ignore_int,interruptgates.Itdoesn'tactuallyload*idt-thatcanbedoneonlyafterpaginghasbeenenabled*andt
7、hekernelmovedtoPAGE_OFFSET.Interrupts*areenabledelsewhere,whenwecanberelatively*sureeverythingisok.*/setup_idt:leaignore_int,%edxmovl$(__KERNEL_CS<<16),%eaxmovw%dx,%ax/*selector=0x0010=cs*/movw$0x8E00,%dx/*interr
此文档下载收益归作者所有