中断服务程序

《操作系统》知识点复习

佐手、 提交于 2020-03-04 15:43:38
定义:操作系统是对计算机资源(硬件、软件)管理、为用户提供服务(交互、运行环境)的软件、是种系统软件。 计算机用户与硬件之间一直运行的一个程序,狭义称为内核(kernel)程序 目标:方便用户解决问题、使用计算机,通过管理软件有效使用计算机硬件资源 结构:层次 用户—》应用程序-》操作系统-》硬件 组织:启动:先确认每个设备是否正常->开启引导程序Bootstrap(主板):设备初始化、操作系统载入内存、运行进程 中断 :一个事件的触发是由软中断、硬中断实现 Ctrl+Alt+Delete快捷启动是什么中断? 软中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。 硬中断是可屏蔽的,软中断不可屏蔽。 有专门的文件标识符 标准输入:键盘 标准输出:显示器 多道程序设计的基本特征:无序性、多道性、间断性 分时系统追求:快速响应用户 I/O结构 :设备控制器有本地缓冲器,CPU负责内存与本地缓冲器之间的数据传递,设备控制器控制本地缓冲器和外设之间的。通过中断通知I/O设备操作完成 所以为了提高cpu利用率,采用DMA直接访问内存方式,以块为单位完成传送触发中断 I/O操作:同步:只有I/O结束后,用户程序才能运行 异步:I/O期间,用户程序也能运行 存储结构:存储设备:1.磁盘 2.闪存 3.固态硬盘

linux UART串口驱动开发文档

*爱你&永不变心* 提交于 2020-02-29 09:39:11
内容简介: 介绍了Linux下的串口驱动的设计层次及接口, 并指出串口与TTY终端之间的关联层次(串口可作TTY终端使用), 以及Linux下的中断处理机制/中断共享机制, 还有串口缓冲机制当中涉及的软中断机制; 其中有关w83697/w83977 IC方面的知识, 具体参考相关手册, 对串口的配置寄存器有详细介绍, 本文不再进行说明. 目录索引: 一. Linux的串口接口及层次. 二. Linux的中断机制及中断共享机制. 三. Linux的软中断机制. 四. TTY与串口的具体关联. 一. Linux的串口接口及层次 . 串口是使用已经非常广的设备了, 因此在linux下面的支持已经很完善了, 具有统一的编程接口, 驱动开发者所要完整的工作就是针对不同的串口IC来做完成相应的配置宏, 这此配置宏包括读与写, 中断打开与关闭(如传送与接收中断), 接收状态处理, 有FIFO时还要处理FIFO的状态. 如下我们就首先切入这一部分, 具体了解一下与硬件串口IC相关的部分在驱动中的处理, 这一部分可以说是串口驱动中的最基础部分, 直接与硬件打交道, 完成最底层具体的串口数据传输. 1. 串口硬件资源的处理 . W83697及W83977在ep93xx板子上的映射的硬件物理空间如下: W83697: 0x20000000起1K空间. W83977: 0x30000000起1K空间.

Linux系统内核main函数执行之前

ε祈祈猫儿з 提交于 2020-02-29 09:33:43
1、linux是一个操作系统在机器加电后,需要从硬件通过一个引导程序加载os kernel,那么在os kernel的main函数运行之前,都发生了什么呢? (1)引导BIOS(存储在ROM芯片中,ROM:只读存贮器,现在一般为闪存)的启动(准备实模式下的中断向量表和中断服务程序) 实模式:Intel80x86系列的一种cpu运行模式,特点,20位地址寻址(1MB),可直接访问BIOS和周边的硬件,没有硬件支持的实时多任务和分页机制。 BIOS任务:把os 加载到RAM(随机存取存储器,也就是常见的内存条) 所有的cpu在加电时强行进入16位实模式,此时cpu的一些特殊值: CS:0xF0000,IP:0xFFF0 所以起始地址为CS:IP = 0xFFFF0也就是BIOS的地址。 CS:代码段寄存器 IP:指令指针寄存器(IP对应16位,EIP对应32位,RIP对应64位) 指令的地址:代码段其实地址+指令段内偏移地址 = CS + IP 中断向量表的位置:0x00000 ~ 0x003FF (一共1kb):一共256个中断向量(CS:IP),每个4B(CS:2B;IP:2B) BIOS数据区:0x00400 ~ 0x004FF 中断服务程序:0x0E50B ~ 0x0FFFE 中断int (2)加载第一部分kernel代码(bootsect) BIOS收到int 0x19

《操作系统真象还原》中断

我与影子孤独终老i 提交于 2020-02-27 04:12:49
中断   中断处理,就是处理器接受到中断信号后,暂停当前执行的任务,转而去查找中断向量表,去执行中断服务程序,执行完后,恢复到中断前的状态,继续执行刚才的程序。   形象一点就是有个人或有个急事打断你现在做的事情,让你不得不处理这件紧急的事情,当你处理完这件事情后(当然也有可能继续被另一件事情打断),再做回你刚才没做完的事情。 为什么要有中断   那为什么要有中断呢?拿工作做例子,突然有件事情打断你去做别的事情,一般人都会觉得很烦躁,毕竟重新集中精力做回原来的事情,是一件很耗精力的事情;但大多情况下“别的事情”都是你的本职工作,而且很有可能别人的工作也需要你的协助才能进行下去,如果没有你,可能别人的工作根本进行不下去,导致项目进展停滞了。尽管“中断”了你现在的工作,但完成另一个工作很可能会促进整个项目的进展,让更多的任务能够得到完成。   需要中断的原因和上面的例子类似。有了中断,我们可以让多个任务看起来能够同时运行(在单CPU中实际上不是同时运行,而是交替,一个时刻只有一个任务运行,同时运行只不过是假象,这就是并发),比如任务A和任务B,我不用等到任务A完成才去完成任务B,我可以一会儿去做任务A,一会儿去做任务B,这样子的话任务B不需要等待任务A了。如果我们把任务A看作一个进程,把任务B看作外部设备需要处理的工作(比如键盘输入),这样子CPU既可以执行内存里的程序

51单片机中断学习

左心房为你撑大大i 提交于 2020-02-26 05:44:36
一、中断的概念 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 二、中断源 在51单片机中有5个中断源 中断号 优先级 中断源 中断入口地址 0 1(最高) 外部中断0 0003H 1 2 定时器0 000BH 2 3 外部中断1 0013H 3 4 定时器1 0018H 4 5 串口总段 0023H 三、中断寄存器 单片机有10个寄存器主要与中断程序的书写控制有关 1.中断允许控制寄存器IE 2.定时器控制寄存器TCON 3.串口控制寄存器SCON 4.中断优先控制寄存器IP 5.定时器工作方式控制寄存器TMOD 6.定时器初值赋予寄存器(TH0/TH1,TL0/TL1) 寄存器详细说明:http://blog.sina.com.cn/s/blog_a05b986d0101545c.html 四、寄存器功能与赋值说明 注:在用到中断时,必须要开总中断EA,即EA=1。 //开总中断 1.中断允许控制寄存器IE EX0(EX1):外部中断允许控制位 EX0=1 外部中断0开关闭合 //开外部0中断 EX0=0 外部中断0开关断开 ET0(ET1):定时中断允许控制位 ET0=1

跟涛哥一起学嵌入式 第05集:一道程序改错题,测出你的嵌入式功底

纵然是瞬间 提交于 2020-02-26 02:52:11
大家好,欢迎阅读《跟涛哥一起学嵌入式》第05集,我们今天讨论一下中断的基本概念。 中断,是嵌入式开发中经常使用的一个功能,也是嵌入式工程师必须要掌握的一个概念:CPU和外设通信时,一般都采用中断的形式异步通信,可以大大提高CPU资源的利用率。而你对中断的理解,到底有多少呢?不要急,一道程序改错题,就可以测出你的嵌入式系统功底。 比如,我们在嵌入式ARM裸机平台上,要实现一个MP3播放器,要求实现如下功能:当按键按下时,可以播放、暂停、播放下一首、上一首。为此,我们设计一个按键中断服务程序,当有按键发生时,我们去读取按键的值,然后再根据按键值去执行不同的操作,设计的按键中断函数如下: int keyboard_isr(int irq_num) { char *buf =(char *)malloc(512); int key_value = 0, key_value = keyboard_scan(); if(key_value == 1) { mp3_decode(buf,"xx.mp3"); sleep(10); mp3_play(buf);//play } else if(key_value == 2) mp3_pause(buf);//pause else if(key_value == 3) mp3_next(buf);//next song else if(key

Linux中断管理 (3)workqueue工作队列

ぐ巨炮叔叔 提交于 2020-02-22 18:30:53
目录: 《 Linux中断管理 》 《 Linux中断管理 (1)Linux中断管理机制 》 《 Linux中断管理 (2)软中断和tasklet 》 《 Linux中断管理 (3)workqueue工作队列 》 关键词: GIC、IAR、EOI、SGI/PPI/SPI、中断映射、中断异常向量、中断上下文、内核中断线程、中断注册 。 由于篇幅较大,简单梳理一下内容。 本章主要可以分为三大部分: 讲解硬件背景的 1. ARM中断控制器 。 系统初始化的静态过程:GIC初始化和各中断的中断号映射 2. 硬件中断号和Linux中断号的映射 ;每个中断的注册 5. 注册中断 。 一个中断从产生到执行完毕的动态过程:ARM底层通用部分如何处理 3. ARM底层中断处理 ;GIC部分的处理流程以及上层通用处理部分 4. 高层中断处理 。 这里的高层处理,没有包括下半部。下半部在 Linux中断管理 (2)软中断和tasklet 和 Linux中断管理 (3)workqueue工作队列 中进行介绍。 1. ARM中断控制器 1.1 ARM支持中断类型 ARM GIC-v2支持三种类型的中断: SGI: 软件触发中断(Software Generated Interrupt) ,通常用于多核间通讯,最多支持16个SGI中断,硬件中断号从ID0~ID15。

Java-多线程

为君一笑 提交于 2020-02-22 17:22:44
概念 进程具有自己变量的完备集;线程则共享相同的数据。 抢占式调度:直接中断而不需要实现和 被中断程序 协商 协作式调度:只有在被中断程序同意交出控制权之后才能执行中断 多线程实现 方法一: class MyRunnable implements Runnable { public void run() { ... } } Runnable r = new MyRunnable(); Thread t = new Thread(r); t.start(); 方法二(不建议): class MyThread extends Thread { public void run() { ... } } Thread t = new MyThread(); t.start(); Thread类 sleep(t):static|线程暂停t毫秒,暂停当前线程的活动,会抛出 InterruptedException void run() void start() static Thread currentThread():返回代表当前执行线程的Thread对象 void interrupt():发送中断请求给一个线程,中断状态为true,如果线程当前被sleep调用阻塞,则抛出InterruptedException boolean isInterrupted(): 检查线程是否被终止

stm32学习笔记-外部中断

让人想犯罪 __ 提交于 2020-02-21 07:27:31
文章目录 1、stm32f103外部中断控制器EXTI。 1.1外部中断的映像 1.2 外部中断/事件的框图 1.3 外部中断的编程。 外部中断配置思路 相关寄存器 相关库函数 1.4 按键中断实例。 1、stm32f103外部中断控制器EXTI。 1.1外部中断的映像 外部中断只有0~18共19个,那如何给每一个GPIO口配置上中断,通过一个映像把所有具有相同下标的GPIO口映像成相应下标的外部中断。 参考手册: 1.2 外部中断/事件的框图 中断大致过程如下: 通过配置 上升沿/下降沿触发选择寄存器 选择 边沿检测电路 所要检测的边沿跳变。 边沿检测电路 根据 输入线 是否有相应的边沿跳变,检测到则输出信号1,否则输出信号0。 通过一个 或门 ,或门 以 边沿检测电路 、 软件中断事件寄存器 (中断事件可以通过软件产生) 作为输入。两者之一有一个产生信号1,或门就输出信号1。 或门输出的信号1。输出的信号1发至 请求挂起寄存器 。 请求挂起寄存器对应寄存器的位置1,然后请求挂起寄存器会产生一个信号1。(不懂,这里暂略) 请求挂起寄存器、中断屏蔽寄存器同时输出信号1,则发生信号1到NVIC中断控制器。(注意:这里可以看出中断屏蔽也就是一个与操作。) 事件大致过程如下: 通过配置 上升沿/下降沿触发选择寄存器 选择 边沿检测电路 所要检测的边沿跳变。 边沿检测电路 根据 输入线

stm32学习笔记05中断和事件

心不动则不痛 提交于 2020-02-16 21:23:31
1、中断和事件的区别: https://www.cnblogs.com/smartjourneys/articles/7363114.html 向量中断和非向量中断还是有点不懂 https://www.cnblogs.com/yanglin1228/archive/2011/02/14/4812067.html 2、中断和异常:   中断与异常有什么区别:   1、中断:系统停止当前正在运行的程序而转向其他服务,可能是因为优先级高的请求   服务了,或者是因为人为安排中断。中断是属于正常现象。   异常:是由于软件错误而引起的   2、中断是 CPU所具备的功能 -- 硬件   异常是软件运行过程中的一种开发过程中没有考虑到的程序错误 -- 软件   3、   1)中断的概念   所谓中断是指 CPU对系统发生的某个事件作出的一种反应: CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。    引起中断的事件称为中断源,中断源向 CPU提出进行处理的请求称为中断请求。   2)中断类型   按中断事件来源进行分类,主要有两类:   ( 1)中断。由 CPU以外的事件引起的中断,如 I/O中断、时钟中断、控制台中断等。   ( 2)异常( exception)。来自 CPU的内部事件或程序执行中的事件引起的过程。如由于