中断处理

并发工具的使用以及原理

泄露秘密 提交于 2019-11-29 08:37:25
线程这块的一些工具类,基本都会以原理为主,通过分析别人代码的设计和实现,给自己提供积累一些方法和工具。 Condition 在前面学习 synchronized 的时候,有讲到 wait/notify 的 基本使用,结合 synchronized 可以实现对线程的通信。那 么这个时候我就在思考了,既然 J.U.C 里面提供了锁的实现 机制,那 J.U.C 里面有没有提供类似的线程通信的工具呢? 发现了一个 Condition 工具类。 Condition 是一个多线程协调通信的工具类,可以让某些线 程一起等待某个条件(condition),只有满足条件时,线程 才会被唤醒 Condition 的基本使用 ConditionWait public class ConditionDemoWait implements Runnable{   private Lock lock;  private Condition condition;   public ConditionDemoWait(Lock lock,   Condition condition){     this.lock=lock;     this.condition=condition;   }   @Override   public void run() {     System.out.println(

操作系统运行机制

醉酒当歌 提交于 2019-11-29 05:12:56
画图操作是系统调用 交互式系统是用户交互的提出请求 使用多级反馈队列 时间片轮转 高级优先级优先 并发执行和顺序执行的不同特性: 1.并发程序在执行期间具有相互制约的关系 2.程序与计算不在一一对应 3.并发程序结果不可更改 4.并发执行的过程失去了封闭性 中断处理程序的入口地址在中断向量表上 动态请求释放系统资源进行系统调用 open文件操作类 允许抢位的系统中 一个进程从运行——>就绪 可能的事件为该进程的时间片用完 用户态到核心态通过唯一途径访管指令 核心态到用户态通过修改程序状态字PSW进行 异常:程序性中断 访管指令异常 中断:时钟中断 I/O中断 控制台中断 硬件故障中断 交互式系统调度算法的设计目标:较快的响应时间 较均衡的性能 程序中断与当前运行的程序有关 处理器包括两类寄存器:一类为用户可见寄存器 第二类为控制和状态寄存器 引起中断的事件是中断源 处理器暂停当前程序 转而进入中断处理程序 中断响应 正在出来运行程序的暂停点 中断断点 系统分为三类环境:批处理环境 交互式环境 实时环境 过程调用在调用完成前返回调用程序系统先运行调度程序再返回调用程序 PCB进程控制块主要有:进程名 进程号 存储信息 优先级 当前状态 资源清单 家族关系 消息队列 进程队列 当前打开文件 批处理调度算法:先来先服务 最短作业优先 响应比最高者优先 时间片轮转

多线程学习(一)什么是多线程?

僤鯓⒐⒋嵵緔 提交于 2019-11-29 01:36:15
多线程学习(一)什么是多线程? 一,什么是多线程? 1.多线程的概念?    说起多线程,那么就不得不说什么是线程,而说起线程,又不得不说什么是进程。   进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是 操作系统 结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。   以上是百度百科对进程的解释。   进程可以简单的理解为一个可以独立运行的程序单位。它是线程的集合,进程就是有一个或多个线程构成的,每一个线程都是进程中的一条执行路径。   那么多线程就很容易理解:多线程就是指一个进程中同时有多个执行路径(线程)正在执行。    为什么要是用多线程?   1.在一个程序中,有很多的操作是非常耗时的,如数据库读写操作,IO操作等,如果使用单线程,那么程序就必须等待这些操作执行完成之后才能执行其他操作。使用多线程,可以在将耗时任务放在后台继续执行的同时,同时执行其他操作。   2.可以提高程序的效率。   3.在一些等待的任务上,如用户输入,文件读取等,多线程就非常有用了。    缺点:    1.使用太多线程,是很耗系统资源,因为线程需要开辟内存。更多线程需要更多内存。   2.影响系统性能

linux中断

北城以北 提交于 2019-11-29 00:40:23
INT-中断 按照CPU与中断源(把能够提出中断请求的设备和事件称为中断源)的位置关系可分为 内部中断和外部中断。 内部中断:也称为异常中断,属于非屏蔽中断,是处理器检测到异常情况或执行软件 中断指令引起的一种中断。通常有:除法出错中断(INT0)、断点中断(INT3)、 溢出中断(INT4)和单步执行中断(INT1)等。异常又分为故障和陷阱。 外部中断:也称为硬件中断,是由CPU外部引脚触发的一种中断, 分为不可屏蔽中断NMI(INT2)和可屏蔽中断INTR。 中断源的优先权级别 内部中断最高(除单步执行中断),其次为NMI中断,再次为INTR中断。单步执行中断最低 中断响应 CPU在每条指令执行结束之后,都会去查询有无中断申请。 PIC-可编程中断控制器 PIC(programming interrupt controller),8259可编程中断控制芯片可以管理8个中断源, 通过级联可以构成64个中断向量系统 工作过程:当PIC向cpu处理器的INT引脚发送一个中断信号时候,处理器停下所做事情 询问PIC需要执行那个服务请求,PIC发送终端号,查询中断向量表,执行中断服务程序 原理:8259A芯片可以处于编程状态和操作状态,cpu可以通过IN/OUT指令对芯片 进行初始化编程,还可以通过操作字命令修改中断处理方式,完成了初始化编程, 芯片即进入操作状态

米联客 ZYNQ/SOC精品教程 S02-CH13 CAN总线通信实验

百般思念 提交于 2019-11-29 00:23:45
软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛: www.osrc.cn 答疑解惑专栏开通,欢迎大家给我提问!! 13.1 概述 ZYNQ的PS中包含了2个CAN接口,兼容CAN 2.0A和CAN 2.0B,最高可支持1Mbps的波特率。CAN作为工业应用中的一个重要的总线标准,广泛应用于各行各业之中。本教程介绍了ZYNQ中PS端CAN接口的基本使用方法,并通过CAN接口实现与PC端CAN调试软件之间的数据接收和发送测试。 13.2 CAN总线介绍 13.2.1数据格式 CAN总线中的数据以帧为单位,一共包含5种类型的帧,分别为:数据帧、远程帧、错误帧、过载帧和帧间隔。 数据帧:用于发送节点向接收节点传送数据的帧。 远程帧:用于接收节点向具有相同ID的发送节点请求数据的帧。 错误帧:用于当检测出错误时向其他节点通知错误的帧。 过载帧:用于接收节点通知其尚未做好接受准备的帧。 帧间隔:用于将数据帧及远程帧与前面的帧分离开来。 CAN帧格式如下图所示,CAN 2.0A中使用的是标准帧,CAN 2.0B中使用的是扩展帧。标准帧和扩展帧的区别在于扩展帧增加了18bit的扩展标识符。一般情况下,与用户直接相关的只有数据帧和远程帧。数据帧和远程帧都可以使用标准帧格式或者扩展帧格式。

Linux-BSP-驱动-面试题大全

家住魔仙堡 提交于 2019-11-28 23:45:10
1. 了解Linux的那个驱动?举例讲讲。 a.驱动注册过程:通过platform_bus, register_platform_device和register_platform_driver时都会在总线查询是否有匹配的设备或驱动,如果有就会调用driver的probe函数。 <延伸问题:device和driver通过什么匹配的?name或id_table(dtsi里面compatable字段)> b.驱动类型:字符设备(fb显示设备)、块儿设备、网络设备 c.字符设备为例,驱动需要实现的函数fops:(open,read,write,release,store,show实现暴露给usr space的设备节点,suspend, resume并不是都实现这些) 2. 中断上半部下半部 top half: spinlock_irqsave做很少的工作,需要快速处理完,一般是关中断,清中断标志位,保存数据,调用中断下半部,开中断。 botomm half: tasklet, workque(可以睡眠可以调度)。 中断里用spin lock,不能用semphore(可以调度可以睡眠) 3. spinlock semphore mutex 区别 4. 内核空间和用户空间通信方式 5. boot传给kernel的参数 6. linux 进程调度方法 7. linux softirq 8.

如何及时取消 BackgroundWorker 组件的后台工作

蓝咒 提交于 2019-11-28 23:27:15
BackgroundWorker 提供的CancelAsync只是更改了属性值,实际上并未做任何的取消操作。当处理一个比较耗时的单个任务时,需要立即关闭后台线程,可采用如下做法。(注:BackgroundWorker 也不提供他当前工作线程的属性,其理由是它是随机从线程池中获取的线程,所以它也不清楚自己用的是哪个线程,这真的是个理由吗?) 定义线程变量workThread,并在doWrok方法中将当前的线程赋值给它。 Code void backgroundWorker1_DoWork( object sender, DoWorkEventArgs e) { workThread = Thread.CurrentThread; doSomething(); } 当需要终止该后台工作时,直接中断现场即可。 Code // 直接中断线程 if (workThread.IsBackground) { workThread.Abort(); // init backgroundWorker . } 注意: 中断线程之后的BackgroundWorker 不可再使用,需要重新的初始化。 来源: http://www.cnblogs.com/lfwolf/archive/2008/12/15/1355039.html

操作系统复习

↘锁芯ラ 提交于 2019-11-28 22:39:14
用户态到内核态的切换发生了什么 1. 读取tr寄存器,访问TSS段   TSS段保存内核栈信息 2. 从TSS段中的sp0获取进程内核栈的栈顶指针   sp:堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。 3. 在内核栈中保存当前cs,ss,eip,esp寄存器的值(地址)   cs 为代码段寄存器   ss 为栈段寄存器,一般作为栈使用    eip:用来存储CPU要读取指令的地址,CPU通过EIP寄存器读取即将要执行的指令   esp:用户栈栈顶指针 4. 把内核代码选择符写入CS寄存器,内核栈指针写入ESP寄存器,把内核入口点的线性地址写入EIP寄存器   此时,CPU已经切换到内核态,根据EIP中的值开始执行内核入口点的第一条指令。 中断分类 外中断 由 CPU 执行指令以外的事件引起 ,如 I/O 完成中断,表示设备输入/输出处理已经完成,处理器能够发送下一个输入/输出请求。此外还有时钟中断、控制台中断等。 异常 由 CPU 执行指令的内部事件引起 ,如非法操作码、地址越界、算术溢出等。 陷入 在用户程序中使用系统调用。 异常:异常 是由当前正在执行的进程 产生。异常包括很多方面,有 出错(fault) ,有 陷入(trap) ,也有可编程异常(programmable exception)。 出错(fault)和陷入(trap)

操作系统

孤街醉人 提交于 2019-11-28 21:35:18
C的内存分配 32bitCPU可寻址4G线性空间, 每个进程都有各自独立的4G逻辑地址, 其中0~3G是用户态空间, 3~4G是内核空间, 不同进程相同的逻辑地址会映射到不同的物理地址中. 其逻辑地址其划分如下: 正文段(code segment/text segment, .text段): 或称代码段, 通常是用来存放程序执行代码的一块内存区域. 这部分区域的大小在程序运行前就已经确定, 并且内存区域通常属于只读, 某些架构也允许代码段为可写, 即允许修改程序. 在代码段中, 也有可能包含一些只读的常数变量, 例如字符串常量等 . CPU执行的机器指令部分. ( 存放函数体的二进制代码 . ) 只读数据段(RO data, .rodata):只读数据段是程序使用的一些不会被改变的数据, 使用这些数据的方式类似查表式的操作, 由于这些变量不需要修改, 因此只需放在只读存储器中. 已初始化读写数据段(data segment, .data段):通常是用来存放程序中已初始化的全局变量的一块内存区域. 数据段属于静态内存分配. 常量字符串就是放在这里的, 程序结束后由系统释放(rodata—read only data). 已初始化读写数据段(RW data, .data):已初始化数据是在程序中声明, 并且具有初值的变量, 这些变量需要占用存储器空间,

Alientek I.MX6UL Linux Note,Welcom Come To Discuss

淺唱寂寞╮ 提交于 2019-11-28 20:21:58
第六章 Contex-A7 MPCore架构 Contex-A处理器运行模型   以前的ARM处理器有七种运行模式,现在有九种,新增加Monitor和Hyp运行模式。 模式 描述 USR(User) 用户模式,非特权模式,大部分程序运行的时候处于此模式 FIQ 快速中断模式,进入FIQ中断异常 IRQ 一般中断模式 SVC(Supervisor) 超级管理员模式,特权模式,宫操作系统使用 MON(Monitor) 监视模式,这个模式用于安全扩展模式,指用户安全 ABT(Abort) 数据访问终止模式,用于虚拟存储以及存储保护 HYP(Hyp) 超级监视模式,用于虚拟化扩展 UND(Undef) 未定义指令终止模式 SYS(System) 系统模式,用于运行特权级的操作系统任务 记忆(UFIS MAHUS) Contex-A寄存器组   ARM提供了16个32位通用寄存器(R0 R15)供软件使用,前15个(R0 R14)可以用作通用的数据存储,R15是程序计数器PC,用来保存将要执行的命令,ARM还提供了一个当前程序状态寄存器CPSR和一个备份程序寄存器SPSR,SPSR是CPSR的备份。 总结一下, Cortex-A内核寄存器组成如下(共43个): ①、 34个通用寄存器,包括 R15程序计数器 (PC),这些寄存器都是 32位的。 ②、 8个状态寄存器,包括 CPSR和