中断处理

S5PV210串行通信接口详解-3

混江龙づ霸主 提交于 2020-03-08 22:02:25
1、串行通信与中断的关系 (1)、串口通信分为发送 / 接收2部分。发送方一般不需要(也可以使用)中断即可完成发送,接收方必须(一般来说必须,也可以轮询方式接收就是CPU一直盯着收)使用中断来接收。 (2)、发送方可以选择使用中断,也可以选择不使用中断。使用中断的工作情景是:发送方先设置好中断并绑定一个中断处理程序,然后发送方丢一帧数据给transmitter,transmitter发送耗费一段时间来发送这一帧数据,这段时间内我们的发送方CPU可以去做别的事情,等transmitter发送完成后会产生一个TXD中断,该中断会导致事先绑定的中断处理程序执行,在这个中断处理程序中CPU会切换回来继续给transmitter放一帧数据,然后CPU切换离开;不使用中断的工作情景是:发送方事先禁止TXD中断(当然也不需要给相应的中断处理程序了),发送方CPU给一帧数据到transmitter,然后transmitter耗费一段时间来发送这帧数据,这段时间CPU不能离开,在这等着(CPU没有切换去做作的事情),待发送方发送完后CPU再给它一帧数据继续发送直到所有数据发完。(使用中断CPU在transmitter发送耗费时间内是可以去干别的事,而不使用中断CPU只能一直盯着发送直到发送全部数据完成)。CPU是怎么知道transmitter已经发送完了?有中断时发完会给一个中断,而没有中断时

linux-ARM 中断子系统分析(2) -- linux系统中断子模块

一个人想着一个人 提交于 2020-03-08 20:27:29
引用: 魅族Linux Interrupt http://kernel.meizu.com/linux-interrupt.html 喔窝科技 中断子系统 http://www.wowotech.net/sort/irq_subsystem/page/2 ARM64 中断处理流程 https://www.byteisland.com/54/ 一. 软件时序图 来源: CSDN 作者: vertor11 链接: https://blog.csdn.net/vertor11/article/details/104735775

解析kernel 2.6.24使用NMI中断对Hard lock的处理

删除回忆录丶 提交于 2020-03-08 16:06:38
CPU的NMI中断常用作Hard lock检测。无论CPU是否lock,硬件始终要保证NMI中断能够被响应。作为Hard lock检测的方法,当CPU硬件锁死后,其时钟中断可能无法被响应,导致时钟计数值无法变化。 在NMI中断处理时,通过判断当前时钟计数值是否与前一次NMI中断的时钟计数值相同来判断CPU硬件死锁。该过程可以用下图表示: 一. 时钟计数值的处理方式 对于X86,当时钟中断来临时,kernel都会在中断上文中对时钟计数器+1。在低分辨率模式时,计数器+1的处理过程如下: //arch/x86/kernel/time_32.c irqreturn_t timer_interrupt(int irq, void *dev_id) { /* Keep nmi watchdog up to date */ per_cpu(irq_stat, smp_processor_id()).irq0_irqs++; //... } 开启高分辨率模式后,在0xef本地APIC中断处理中对时钟计数值+1,其处理如下: //arch/x86/kernel/apic_32.c /* The guts of the apic timer interrupt */ static void local_apic_timer_interrupt(void) { int cpu = smp

操作系统中断和异常

这一生的挚爱 提交于 2020-03-07 23:58:03
文章目录 1. 中断和异常[^1] 1.1 中断机制的诞生 1.2 中断[^2]的分类 1.3 外中断的处理过程 1. 中断和异常 1 1.1 中断机制的诞生 早期的计算机:只能串行执行,系统资源利用率低。 为了解决资源利用率低的问题,人们发明了操作系统(作为计算机的管理者),引入中断机制,实现了多道程序的并发执行。 中断的概念和作用: 本质 : 发生中断 就意味着 需要操作系统介入,开展管理工作 。 由于操作系统的管理工作(比如进程切换、分配I/O设备等)需要使用特权指令,因此CPU要从用户态转为核心态。 中断 可以使CPU从 用户态切换为核心态 , 使操作系统获得计算机的控制权 。有了中断,才能实现多道程序并发执行。 在用户态下,CPU收到计时部件发出的中断信号,切换为核心态对中断进行处理。 核心态下,操作系统内核负责对中断信号进行处理 中断的特点 当中断发生时,CPU立即进入 核心态 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理 对于不同的中断信号,会进行不同的处理 遗留的问题:用户态、核心态之间的切换是如何实现的 答:“ 用户态–>核心态 ”是通过 中断 实现的。并且 中断 是 唯一 途径。 “ 核心态–>用户态 ”的切换是通过 执行一个特权指令 ,将程序状态字(PSW)的标志位设置为“用户态”。 1.2 中断 2 的分类 内中断(也称为“异常”)

实验二

我是研究僧i 提交于 2020-03-07 21:30:31
实验结论 实验任务(1)   使用 e 命令修改 0021:0~0021:f 数据      使用d命令查看,修改正确      使用a命令输入指令如下      使用t命令单步调试            做实验前书上的填空结果如下      与实验结果进行比较,发现sp的值和修改的内存单元地址与实际不符,经过分析,发现是因为我对栈这部分知识的理解还不够,在计算sp的值时将入栈和出栈的算法弄反了。入栈时 sp=sp-2,出栈时 sp=sp+2。   实验任务(2)   使用a命令输入指令      使用 e 命令修改 2000:0~2000:f 的值,并使用d命令查看修改后的结果      使用t命令单步调试      第一行指令是将 2000H 存入 AX 寄存器中,第二行指令是将 AX 的值送给栈段寄存器 SS,也就是说,前两行指令实现的功能就是将 SS 的值变成 2000,第三行指令的功能是将栈指针寄存器 SP 的值改成 0010。但是在截图中却并没有出现 MOV SP, 10 这条语句,通过阅读书上实验任务部分的文字描述发现这是因为中断机制使得这条指令在执行完 MOV SS, AX 后自动被执行了。   这时,初始栈顶是 20010H,初始栈底是 20012H。      从截图中我有几点发现:1、从 MOV AX, 3123 这条指令开始 2000:0 ~ 2000:f

Linux下的USB总线驱动(一)

独自空忆成欢 提交于 2020-03-07 03:50:21
版权所有,转载请说明转自 http://my.csdn.net/weiqing1981127 一. USB 理论 1. USB 概念概述 USB1.0 版本速度 1.5Mbps (低速 USB ) USB1.1 版本速度 12Mbps (全速 USB ) USB2.0 版本速度 480Mbps (高速 USB ) USB 驱动由 USB 主机控制器驱动和 USB 设备驱动组成。 USB 主机控制器是用来控制 USB 设备和 CPU 之间通信的, USB 主机控制器驱动主要用来驱动芯片上的主机控制器硬件。 USB 设备驱动主要是指具体的例如 USB 鼠标, USB 键盘灯设备的驱动。 一般的通用的 Linux 设备,如 U 盘、 USB 鼠标、 USB 键盘,都不需要工程师再编写驱动,需要编写的是特定厂商、特定芯片的驱动,而且往往也可以参考内核中已经提供的驱动模板。 USB 只是一个总线,真正的 USB 设备驱动的主体工作仍然是 USB 设备本身所属类型的驱动,如字符设备、 tty 设备、块设备、输入设备等。 2. USB 主机控制器 USB 主机控制器属于南桥芯片的一部分,通过 PCI 总线和处理器通信。 USB 主机控制器分为 UHCI (英特尔提出)、 OHCI (康柏和微软提出)、 EHCI 。其中 OHCI 驱动程序用来为非 PC 系统上以及带有 SiS 和 ALi

linux中断处理顶半部和底半部

你。 提交于 2020-03-07 01:18:04
为了平衡中断处理程序时间要求短和工作量要大的问题,linux将中断处理程序分为顶半部(top half)和底半a部(bottom half) 我们在编写服务端网络程序时往往会开启一个监听线程来专门接收客户端的请求。一旦接收到某个客户端的请求,一般不会直接在监听线程中处理客户端的请求,而是再开启一个专门处理客户端请求的线程,并在该线程中处理客户端的请求。这样监听线程就可以解脱出来处理更多的客户端请求,从而大大提高服务端程序的吞吐量。 中断处理程序和服务端网络程序类似,当硬件向内核发送中断请求时,内核(在这里内核就相当于服务端网络程序)首先会接收中断请求,这个接收中断请求的任务就是由中断处理程序的顶半部完成的。然而在顶半部中并不会执行中断处理的核心代码,而这些代码需要在底半部完成。对于顶半部来说,除了接收中断请求外,还会进行"登记工作"。也就是说要将底半部处理程序挂到发送中断请求的设备的底半部执行队列中。这样的安排,顶半部的执行速度就会很快,可以服务更多的中断请求。 如下特征的任务放在顶半部: 1、对时间非常敏感 2、与硬件相关的 3、不能被其他中断打断的工作 除了以上三点,基本考虑放在底半部。 中断底半部实现的机制有: 1.软中断softirq 2.tasklet(由软中断实现) 3.工作队列work queue 二、函数: < linux / interrupt . h > /

DmpAnalysis-中断和异常

半世苍凉 提交于 2020-03-07 00:11:38
part2-2-中断和异常-用户态异常 文章目录 part2-2-中断和异常-用户态异常 1. x86中断 2. x64中断 3. 中断帧以及栈修复 案例 4. x86 trap指令 5. x64 trap指令 6. R3异常 7. 如何区分 1ST AND 2ND CHANCES 8. 谁启动了后期调试器 9. vista错误报告 10. page fault 1. x86中断 以除零异常为例。cpu从idtr获取idt地址,idt是一个4或8字节描述符(中断向量)数组。cpu计算处理函数地址并调用,当然还要保存上下文。 中断向量可以从dmp中提取出来 前32个中断向量由intel使用。 windows启动时cpu从实模式切换到保护模式,这之前,cpu就会创建idt,并用 sidt 指令使idtr指向idt。 下面的UML是内核模式异常处理流程。用户模块流程还需要从R3栈切换到R0栈。 对于内核dmp,使用 !pcr PID 指令可以查看Processor Control Region 信息: 0: kd> !pcr 0 KPCR for Processor 0 at ffdff000: Major 1 Minor 1 NtTib.ExceptionList: f2178b8c NtTib.StackBase: 00000000 NtTib.StackLimit:

操作系统精髓与设计原理笔记(1)

£可爱£侵袭症+ 提交于 2020-03-07 00:01:37
计算机系统概述 1.1基本构成 计算机基本构成:处理器、存储器、输入/输出部件 处理器:逻辑处理单元,控制计算机的操作,执行数据处理功能,(CPU)。 内存:存储数据和程序。特点是易失性,关机后,存储器的内容就会丢失,通常被称为实存储器或主存储器。 输入/输出模块:在计算机和外部环境(外部设备(存储器设备:硬盘、通信设备和终端))之间移动数据。 系统总线:为处理器、内存和输入/输出模块间提供通信的设施。 寄存器简介: CPU使用的寄存器 存储器地址寄存器(MAR):确定下一次读写的存储器地址。 存储器缓冲寄存器(MBR)存放要写入存储器的数据或从存储器读取的数据。 输入/输出寄存器: 输入/输出地址寄存器(I/O AR)确定一个特定的输入/输出设备。 输入/输出缓冲寄存器(I/O BR)用于在输入/输出模块和处理器间交换数据。 1.2处理器寄存器 处理器包含一组寄存器,它们提供一定的存储能力,比内存访问速度快,但比内存的容量小。 用户可见寄存器:优先使用这些寄存器,可以减少使用机器语言或汇编语言的程序员对内存的访问次数。对高级语言而言,由优化编译器负责决定哪些变量应该分配给寄存器,哪些变量应该分配给内存。一些高级语言(如C语言)允许程序员建议编译器把哪些变量保存在寄存器中。 控制和状态寄存器:用以控制处理器的操作,且主要被具有特权的操作系统例程使用,以控制程序的执行。 1.2

java并发简介

。_饼干妹妹 提交于 2020-03-06 18:51:25
  有的时候由于数据的同时访问,导致服务器不堪重负,这个时候就需要高并发的介入,这篇文章将会从线程,控制,监视器三个大方面来简单地介绍java的并发。 <!--原文请参考http://ifeve.com/java-concurrency-constructs/--> 线程 线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进程所创建的对象资源(内存资源)。java.lang.Thread对象负责统计和控制这种行为。 每个程序都至少拥有一个线程-即作为Java虚拟机(JVM)启动参数运行在主类main方法的线程。在Java虚拟机初始化过程中也可能启动其他的后台线程。这种线程的数目和种类因JVM的实现而异。然而所有用户级线程都是显式被构造并在主线程或者是其他用户线程中被启动。 这里对Thread类中的主要方法和属性以及一些使用注意事项作出总结。这些内容会在这本书(《Java Concurrency Constructs》)上进行进一步的讨论阐述。Java语言规范以及已发布的API文档中都会有更详细权威的描述。 构造方法 Thread类中不同的构造方法接受如下参数的不同组合: 一个Runnable对象,这种情况下,Thread.start方法将会调用对应Runnable对象的run方法。如果没有提供Runnable对象