中断处理

[现代操作系统] I/O之硬件原理

匿名 (未验证) 提交于 2019-12-03 00:28:02
I/O 硬件原理 把信息存储在固定大小的块中, 每个块都有自己的地址. 每个块可以独立于其他块读写. 如 硬盘, CD-ROM , USB 盘 … 字符设备以字符为单位发送或接收一个字符流, 而不考虑任何块结构. 它是不可寻址的. 如打印机, 网络接口, 鼠标 (用作指点设备)… I/O 设备一般由两部分组成: 机械部分和电子部分. 电子部分就是设备控制器. 常以插入 (PCI) 扩展槽中的印刷电路板的形式出现. 控制器与设备之间的接口是很低层次的接口. 它的任务就是把串行的位流转换为字节块, 并进行必要的错误校正. 每个控制器有几个寄存器, OS 可以读写来了解, 更改设备的状态信息. 控制器还有 OS 可以读写的 数据缓冲区 . 问题来了: CPU 如何与设备的控制寄存器和数据缓冲区通信. 方法一: 每个控制寄存器被分配一个 I/O 端口 (所有端口形成端口空间, 受保护不被普通用户访问). 然后可以设置指令来读写, 如 IN REG, PORT 将读取控制器寄存器 PORT 中的内容到 CPU 寄存器 REG 方法二: 内存映射 I/O. 将所有控制寄存器映射到内存空间, 都被分配唯一的地址, 且这些内存地址不会再分配. CPU 读入一个字时, 不论是从内存还是 I/O 端口, 都将目的地址放在总线的地址线上, 总线控制线置 READ 信号看. 还要用一条线表明是 I/O

FREERTOS队列

匿名 (未验证) 提交于 2019-12-03 00:21:02
http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 的一个重要的通信机制----消息队列,初学者要熟练掌握,因为消息队 消息队列的概念及其作用 消息队列就是通过 RTOS 内核提供的服务,任务或中断服务子程序可以将一个消息( 注意,FreeRTOS 消息队列传递的是实际数据,并不是数据地址,RTX,uCOS-II 和 uCOS-III 是传递的地址 )放入到队列。 同样,一个或者多个任务可以通过 RTOS 内核服务从队列中得到消息。通常,先进入消息队列的消息先传 给任务,也就是说,任务先得到的是最先进入到消息队列的消息,即先进先出的原则(FIFO),FreeRTOS 的消息队列支持 FIFO 和 LIFO 两种数据存取方式。 也许有不理解的初学者会问采用消息队列多麻烦,搞个全局数组不是更简单,其实不然。在裸机编程 时,使用全局数组的确比较方便,但是在加上 RTOS 后就是另一种情况了。 相比消息队列,使用全局数组 使用消息队列可以让 RTOS 内核有效地管理任务,而全局数组是无法做到的,任务的超时等机制需要用户自己去实现。 使用了全局数组就要防止多任务的访问冲突,而使用消息队列则处理好了这个问题,用户无需担心。 使用消息队列可以有效地解决中断服务程序与任务之间消息传递的问题。 FIFO 机制更有利于数据的处理。 FreeRTOS

6.用户态和核心态的区别

匿名 (未验证) 提交于 2019-12-03 00:19:01
用户态和核心态的区别 1. 操作系统需要两种 CPU 状态: 内核态( Kernel Mode ):运行操作系统程序 用户态( User Mode ):运行用户程序 2. 指令划分: 特权指令: 只能由操作系统使用、用户程序不能使用的指令。 举例:启动 内存清零 修改程序状态字 设置时钟 允许 / 禁止终端 停机 非特权指令:用户程序可以使用的指令。 举例:控制转移 算数运算 取数指令 访管指令(使用户程序从用户态陷入内核态) 3. 特权级别: 特权环: R0 、 R1 、 R2 和 R3 R0 相当于内核态, R3 相当于用户态; 不同级别能够运行不同的指令集合; 4.CPU 状态之间的转换: 用户态 ---> 内核态: 唯一途径是通过中断、异常、陷入机制(访管指令) 内核态 ---> 用户态: 设置程序状态字 PSW 5. 内核态与用户态的区别: 1 ) 内核态与用户态是操作系统的两种运行级别,当程序运行在 3 级特权级上时,就可以称之为运行在用户态。 因为这是最低特权级,是普通的用户进程运行的特权级, 大部分用户直接面对的程序都是运行在用户态; 2 ) 当程序运行在 0 级特权级上时,就可以称之为运行在内核态。 3 ) 运行在用户态下的程序不能直接访问操作系统内核数据结构和程序。 当我们在系统中执行一个程序时,大部分时间是运行在用户态下的,在

处理 InterruptedException

匿名 (未验证) 提交于 2019-12-03 00:19:01
原文: https://www.ibm.com/developerworks/cn/java/j-jtp05236.html 这样的情景您也许并不陌生:您在编写一个测试程序,程序需要暂停一段时间,于是调用 Thread.sleep() InterruptedException 。 InterruptedException InterruptedException 清单 4 阻塞方法 InterruptedException 阻塞(blocking) 方法,如果您响应得当的话,它将尝试消除阻塞并尽早返回。 阻塞方法不同于一般的要运行较长时间的方法。一般方法的完成只取决于它所要做的事情,以及是否有足够多可用的计算资源(CPU 周期和内存)。而阻塞方法的完成还取决于一些外部的事件,例如计时器到期,I/O 完成,或者另一个线程的动作(释放一个锁,设置一个标志,或者将一个任务放在一个工作队列中)。一般方法在它们的工作做完后即可结束,而阻塞方法较难于预测,因为它们取决于外部事件。阻塞方法可能影响响应能力,因为难于预测它们何时会结束。 阻塞方法可能因为等不到所等的事件而无法终止,因此令阻塞方法 可取消 Thread Thread.sleep() Object.wait() InterruptedException InterruptedException InterruptedException

Arm的几种工作模式

匿名 (未验证) 提交于 2019-12-03 00:17:01
ARM处理器工作模式一共有 7 种 : 1、USR 模式 正常用户模式,程序正常执行模式 2、FIQ模式(Fast Interrupt Request) 处理快速中断,支持高速数据传送或通道处理 3、IRQ模式 处理普通中断 4、SVC模式(Supervisor) 操作系统保护模式,处理软件中断swi reset 5、ABT 中止(Abort mode){数据、指令} 处理存储器故障、实现虚拟存储器和存储器保护 6、UND 未定义(Undefined) 处理未定义的指令陷阱,支持硬件协处理器的软件仿真 7、SYS 系统模式(基本上=USR)(System) 运行特权操作系统任务 来源:博客园 作者: jzhiyu 链接:https://www.cnblogs.com/seamoon23/p/11787653.html

操作系统(一)――bios、中断、系统调用

匿名 (未验证) 提交于 2019-12-03 00:05:01
PC=16*CS+IP 20为地址空间1MB 基本输入输出 系统设置信息 开机后自检程序 系统自启动程序 BIOS BIOS加载程序从磁盘的引导扇区(512字节)加载到扇区,并且跳转到CS:IP 将操作系统的代码从硬盘加载到内存中,跳转到操作系统起始位置 1.系统加电,从CS:IP读到第一条跳转指令 2.BIOS初始化 3.读取主引导扇区代码 4.主引导扇区代码读取活动分区的引导扇区代码 文件卷头:文件系统描述信息 结束标志:0x550xAA 5.引导扇区代码读取文件系统的加载程序 加载程序(BootLoader) 从文件系统读取配置信息,加载程序,从内核列表和加载参数,依据配置加载指定内核 系统调用(System call) 应用程序主动向操作系统发出服务请求 异常(Exception) 由于非法指令或者其他原因导致当前指令执行失败 中断(hardware interrupt) 来自硬件设备的处理请求 以printf为例,printf是C程序中的函数,会触发系统调用write。 操作系统服务的编程接口,通常由高级语言编写(C或者C++) Win32 API用于Windows POSIX API用于POSIX-based systems 包括UNIX,LINUX,MACOS 系统调用:INT和IRENT指令 函数调用:CALL和RET指令 来源:博客园 作者: LittlePage

操作系统运行机制

匿名 (未验证) 提交于 2019-12-02 23:57:01
画图操作是系统调用 交互式系统是用户交互的提出请求 使用多级反馈队列 时间片轮转 高级优先级优先 中断处理程序的入口地址在中断向量表上 动态请求释放系统资源进行系统调用 交互式系统调度算法的设计目标:较快的响应时间 较均衡的性能 程序中断与当前运行的程序有关 引起中断的事件是中断源 来源:博客园 作者: insist钢 链接:https://www.cnblogs.com/liugangjiayou/p/11456595.html

单片机知识点

匿名 (未验证) 提交于 2019-12-02 23:47:01
1. 在单片机应用系统中,为节省 I/O 引脚,多个 LED 数码管显示电路常采用 动态 显示方式。动态显示方式涉及段选和位选,共阴极位选是低电平选通,段选是高电平选  通;共阳极位选是高电平选通,段选是低电平选通。 2. 中断的处理过程按顺序包括:中断请求,中断响应,中断处理,中断返回。 4. IT=0 是脉冲触发方式,IT=1 是低电平触发方式。 5. P0,P2,P3口有第二功能,P1口只作为输入输出口。 6. 以 MCS-51 单片机为例,说明 CPU 相应中断的顺序怎样?   a. 当处于同一优先级时:按照外部中断0,定时/计时器0,外部中断1,定时/计时器1,串行口中断的顺序   b. 当处于不同优先级时:按照从高优先级到低优先级执行。   c. 当处于中断嵌套时:当一个中断正在执行的时候,如果事先设置了中断优先级寄存器 IP ,那么当一个高优先级的中断到来的时候会发生中断嵌套。 7. 与 :同时为1,结果才是1。 或:只要有一个1,结果就是1。 异或:相同是0,不同是1。 8. 定时/计数器模式1,响应中断后,需要重载计数初值。 定时1 s ,采用模式一以50 ms 为定时基准,计数20次。 9. 机器周期 = 12 个振荡周期。振荡周期 = 1 / 晶振频率 。由此可求出机器周期 T 。  定时器计数初值 X 公式:t = (2^N - X)*T 。 t

GD32实战7__中断

匿名 (未验证) 提交于 2019-12-02 23:42:01
引子 什么是中断 1. 我就是CPU 2. 编写文档,是主运行程序 3. 门铃响了,是中断信号 4. 查看到是快递,是查询中断号 5. 签收快递,是中断处理程序 6. 签收完快递后继续工作,是中断返回 即,中断就是由于某些事件打断CPU主运行程序运行,并处理该事件,处理完后继续运行主程序的过程。 为什么需要中断 什么是中断优先级 什么是中断嵌套 什么是入栈和出栈 Cortex-M3中断管理 向量中断支持 M3把各种中断都映射不同的地址上,当中断发生时,M3会根据中断号从表中查找到中断入口函数的地址,然后跳转过去并执行。 映射在哪个地址上是可以配置的,因此我们在修改程序的起始地址时,必须把中断向量重新映射,例如boot+app开发时。 如下表,1-15号用于系统异常,16号以上用于外部中断。 可嵌套中断支持 1. 通过寄存器AIRCR为优先级分组,通过分组我们可以知道哪些bit代表抢占优先级,哪些bit代表亚优先级,如图中1->2->4。 2. 中断优先级寄存器阵列的每个寄存器都是8位的,映射到优先级分组后,如图中3->4,经过此映射,M3就知道每个中断的抢占优先级和亚优先级分别是多少了。 3. 当多个中断同时发生时,M3首先选择抢占优先级最高的中断执行,当抢占优先级相同的中断同时触发时,M3优先选亚优先级最高的执行。 4. 到此,我们也明白了为什么理论上优先级有256级

DPDK学习开篇

匿名 (未验证) 提交于 2019-12-02 23:42:01
1.前言 说来想学习DPDK已经是很久的事情了,奈何总是被所谓的紧急的事情耽误,故而决心学习一下,记录一下以便总结,知道DPDK已经是很久之前的事情了,记得曾经一次面试就被问到DPDK报文如何走的,也是被问的一脸懵逼甚是尴尬, 主要是工作中用到会比较多, 个人对DPDK的处理机制也是很感兴趣 2.DPDK介绍 3.DPDK 优势 1)轮询与中断 起初的纯轮询模式是指收发包完全不使用任何中断,集中所有运算资源用于报文处理。DPDK纯轮询模式是指收发包完全不使用中断处理的高吞吐率的方 式。DPDK所有的收发包有关的中断在物理端口初始化的时候都会关 闭,也就是说,CPU这边在任何时候都不会收到收包或者发包成功的中 断信号,也不需要任何收发包有关的中断处理。具体收发包流程参见之后的文章单独说明。网络应用中可能存在的潮汐效应,在某些时间段网络数据 流量可能很低,甚至完全没有需要处理的包,这样就会出现在高速端口 下低负荷运行的场景,而完全轮询的方式会让处理器一直全速运行,明 显浪费处理能力和不节能。因此在DPDK R2.1和R2.2陆续添加了收包中 断与轮询的混合模式的支持,类似NAPI的思路,用户可以根据实际应 用场景来选择完全轮询模式,或者混合中断轮询模式。而且,完全由用 户来制定中断和轮询的切换策略,比如什么时候开始进入中断休眠等待 收包,中断唤醒后轮询多长时间,等等。 2)多线程编程: