处理器管理(二)——中断处理过程

中断机制包括硬件中的中断装置和软件中的中断服务程序。

中断的过程

中断装置由特定寄存器和控制线路组成,中央处理器和外围设备等识别到的事件保存到特定的寄存器中,由于某

些事件(中断源)的出现,正在运行的进程被中止,每执行完一条指令,均由中断装置判别是否有中断事件发生。

如果没有,CPU继续执行;若有则中断装置中断现在占用CPU的程序,让操作系统的处理中断事件服务程序占用

CPU,对出现的中断事件处理,事件处理完后,在让原来的程序继续占用CPU执行。整个过程叫做中断响应,下面具

体说明这个过程。

每个程序都有一个程序状态字,程序状态字存放在程序状态字寄存器中,处理器总是按照程序状态字寄存器中的

指示控制程序的执行。程序状态字划分了三种,一种是正在占用CPU的程序的状态字叫当前PSW,要占用CPU的中

断程序PSW叫做新PSW,原来占用,现在离开CPU的程序状态字叫做旧PSW.

发现中断事件后中断装置把中断事件存入当前PSW的中断码位置,接着当前程序离开CPU,中断服务程序的占

用CPU,最后,执行中断服务程序过程中,读取旧PSW的中断码,判断事件类型并处理中断事件。

中断的类型

硬件故障中断

由机器故障引起。排除这类故障必须进行人工干预。中断处理程序把访问主存单元的进程状态改成“等待干

预”,输出信息向操作员报告出错主存单元的地址和错误性质。待操作员排除故障后,重新启动进程,使“等待干

预”状态的进程编程“就绪”状态。

程序中断

程序执行到某条机器指令时可能出现的各种问题而引起的中断。 此中断一般与程序的具体编制有关,不同的用

户对出现的时间可以有不同的处理要求,中断服务程序将事件交给用户处理。

外部中断

由外部事件引起。

输入/输出中断

输入输出控制系统发现外围设备完成了输入输出操作引起的中断,或者执行输入输出操作时通道产生错误引起的

中断。

防管中断

正在运行的进程为了请求调用操作系统的某个功能而执行一条防管指令所引起的中断。

小结

了解CPU响应中断事件过程,能更好地理解程序状态字的作用,明白程序在CPU内部是如何执行,也知道了中断

提示的来源。

时间: 2024-08-10 00:07:51

处理器管理(二)——中断处理过程的相关文章

linux驱动之中断处理过程汇编部分

linux系统下驱动中,中断异常的处理过程,与裸机开发中断处理过程非常类似.通过简单的回顾裸机开发中断处理部分,来参考学习linux系统下中断处理流程. 一.ARM裸机开发中断处理过程 以S3C2440的裸机开发启动文件中,有关irq中断部分代码为例进行说明: .extern main .text .global _start _start: b Reset HandleUndef: b HandleUndef HandleSWI: b HandleSWI HandlePrefetchAbort

Linux kernel的中断子系统之(六):ARM中断处理过程

一.前言 本文主要以ARM体系结构下的中断处理为例,讲述整个中断处理过程中的硬件行为和软件动作.具体整个处理过程分成三个步骤来描述: 1.第二章描述了中断处理的准备过程 2.第三章描述了当发生中的时候,ARM硬件的行为 3.第四章描述了ARM的中断进入过程 4.第五章描述了ARM的中断退出过程 本文涉及的代码来自3.14内核.另外,本文注意描述ARM指令集的内容,有些source code为了简短一些,删除了THUMB相关的代码,除此之外,有些debug相关的内容也会删除. 二.中断处理的准备过

实验5 :分析system_call中断处理过程

分析system_call中断处理过程 上周我们使用gcc内嵌汇编调用系统调用,这次我们具体分析下过程. 将getpid嵌入menuos 代码从github下载,步骤如下: 1. 增加一个函数,getpid 2. 在main中添加MenuConfig("getpid","Show Pid", Getpid); 3. 重新编译 make roofs 4. 此时启动 执行getpid就可以看到打印出pid为1   menuos的原理 其实这个很简单,在上上周我们分析过l

实验五:分析system_call中断处理过程

原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 如果我写的不好或者有误的地方请留言 题目自拟,内容围绕系统调用system_call的处理过程进行: 博客内容中需要仔细分析system_call对应的汇编代码的工作过程,特别注意系统调用返回iret之前的进程调度时机等. 总结部分需要阐明自己对“系统调用处理过程”的理解,进一步推广到一般的中断处理过程. 实验报告: 1.将myfork()和

Linux内核分析—实验五分析system_call中断处理过程

郑斌 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验要求: 使用gdb跟踪分析一个系统调用内核函数(您上周选择的那一个系统调用),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl ,推荐在实验楼Linux虚拟机环境下完成实验. 根据本周所学知识分析系

Spring Security 解析(二) —— 认证过程

Spring Security 解析(二) -- 认证过程 ??在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security .Spring Security Oauth2 等权限.认证相关的内容.原理及设计学习并整理一遍.本系列文章就是在学习的过程中加强印象和理解所撰写的,如有侵权请告知. 项目环境: JDK1.8 Spring boot 2.x Spring Security 5.x 一.@EnableGlobalAuth

linux内核分析第五周-分析system_call中断处理过程

本实验目的:通过以一个简单的menu小程序,跟踪系统调用的过程,分析与总结系统调用的机制和三层进入的过程. 实验原理:系统调用处理过程与中断处理的机制 系统调用是通过软中断指令 INT 0x80 实现的,而这条INT 0x80指令就被封装在C库的函数中.(软中断和我们常说的硬中断不同之处在于,软中断是由指令触发的,而不是由硬件外设引起的.)INT 0x80 这条指令的执行会让系统跳转到一个预设的内核空间地址,它指向系统调用处理程序,即system_call函数. system_call函数是怎么

通过实验分析system_call中断处理过程

作者:吴乐 山东师范大学 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 本实验目的:通过以一个简单的menu小程序,跟踪系统调用的过程,分析与总结系统调用的机制和三层进入的过程. 一.实验步骤 1.使用gdb在sys_time处设置断点并list找到的代码 2.用s(step)跟踪断点 3.当进入system_call的时候gdb无法继续跟踪,实验结束,找到源代码进行分析 二.system_call对应的汇编

s5pv210中断处理过程

一.异常处理的两个过程 第一,异常向量表的跳转 第二,进入异常处理程序中 二.异常处理中的第一个过程 1.当发生异常时,CPU会自动跳转PC到异常向量表对应的地址处,软件需要处理的就是将这个异常处理的代码首地址填入这个异常向量地址处. 2.中断处理要先在汇编文件中进行,主要的过程是保护现场和恢复现场 保护现场:主要是设置IRQ栈.保存LR和保存r0-r12,中断返回时关键的就是对于PC和cpsr两个寄存器的保存.中断返回地址保存在LR中,而cpsr自动保存在(IRQ模式下的)spsr中. 恢复现