软中断

软中断和硬中断的区别 ?

夙愿已清 提交于 2019-12-25 03:36:23
目录 硬中断 1.由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统系统外设状态的变化。比如当网卡收到数据包 的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)。 硬中断是外部设备对CPU的中断; 硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程)。 处理中断的驱动是需要运行在CPU上的,因此,当中断产生的时候,CPU会中断当前正在运行的任务,来处理中断。在有多核心的系统上,一个中断通常只能中断一颗CPU(也有一种特殊的情况,就是在大型主机上是有硬件通道的,它可以在没有主CPU的支持下,可以同时处理多个中断。)。 硬中断可以直接中断CPU。它会引起内核中相关的代码被触发。对于那些需要花费一些时间去处理的进程,中断代码本身也可以被其他的硬中断中断。 对于时钟中断,内核调度代码会将当前正在运行的进程挂起,从而让其他的进程来运行。它的存在是为了让调度代码(或称为调度器)可以调度多任务。 软中断 1.通常是硬中断服务程序对内核的中断; 2.为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作

怎么理解Linux软中断?

馋奶兔 提交于 2019-12-24 12:14:55
1. 怎么去理解 前面博客简单说过中断的含义,中断是系统用来响应硬件设备请求的一种机制,会打断进程的正常调度和运行,然后调用内核中的中断处理程序来响应硬件设备的请求。 为什么要有中断?其实中断是一种异步的事件处理机制,可以提高系统的并发处理能力。由于中断处理程序会打断进程的运行,特别是还会临时关闭中断,会导致上一次中断处理程序完成以前,其他中断都不能响应,那么这种情况下中断也可能会丢失,所以为了减少对进程的调度和运行的影响,中断处理程序要尽可能快的执行。 在Linux中,为了解决中断处理程序运行时间过长或者中断丢失的问题,将中断分为两个部分,上半部和下半部: 上半部用来快速处理中断,他在中断禁止的模式下运行,主要处理跟硬件紧密相关的或者时间敏感的工作。 下半部用来延迟处理上半部未完成的工作,通常以内核线程的方式运行,并且每个CPU对应一个软中断内核线程,名字为“ksoftirqd/CPU编号”。另外,软中断不仅仅是刚刚说的硬件设备中断处理程序的下半部,一些内核的自定义事件也是,比如网络收发、定时、内核调度和RCU(Read-Copy Update的缩写,Linux内核最常用的锁之一)等。 举个例子来帮助理解,网卡收包: 网卡收包,会通过硬中断的方式,通知内核有数据到达,内核就应该调用中断处理程序来响应它。这里上半部,就是快速处理,把网卡的数据读到内存中,更新一下硬件寄存器的状态

ARM异常及中断处理介绍(中断是异常的一种)

谁都会走 提交于 2019-12-18 02:27:03
中断 概念 :是一个过程,是CPU在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程。因硬件原因引起的中断过程的出现时不可预测的,即随机的,而软中断是事先安排好的。 中断源 概念 :可以引起中断的信号源。 异常优先级 ARM处理器中有7种类型的异常,按优先级 从高到低 的排列如下: 复位异常 (Reset)、 数据异常 (Data Abort)、 快速中断异常 (FIQ)、 外部中断异常 (IRQ)、 预取异常 (Prefetch Abort)、 软中断异常 (SWI)、 未定义指令异常 (Undefined interrupt)。 优先级最低的两种异常是软件中断异常和未定义指令异常。因为正在执行的指令不可能既是一条软中断指令,又是一条未定义指令,所以软中断异常和未定义指令异常享有相同的优先级。 注意 在ARM处理器中(Exception)和中断(Interrupt)有些差别,异常主要是从处理器被动接受异常的角度出发,而中断带有向处理器主动申请的色彩。此文中对“异常”和“中断”不做严格区分;两者都是指请求处理器打断正常的程序执行流程,进入特定程序循环的一种机制。 异常 概念 :异常由内部或外部源产生并引起处理器处理一个事件。在处理异常之前,处理器状态必须保留,一遍在异常处理程序完成后,原来的程序能够重新执行。同一时刻可能出现多个异常。 注意 当异常出现时

操作系统实验指导书

二次信任 提交于 2019-12-06 07:57:43
《操作系统》实验教学大纲 一、基本信息 课程编码 350424005 课程学时 48 课程类别 学科基础课程 实验总学时 8 开出学期 5 开出单位 计算机系 适用专业 软件工程 网络工程 二、实验安排 序号 实 验 项 目 实验学时 每组人数 实验类型 开出要求 1 实验一 进程管理 2 1 验证 必做 2 实验二 进程通信 6 1 设计 必做 三、实验目的、内容与要求 实验一 进程管理 (一)实验目的 1.加深对进程概念的理解,明确进程和程序的区别。 2.进一步认识并发执行的实质。 3.分析进程竞争资源的现象,学习解决进程互斥与同步的方法。 (二)实验内容 1.Linux系统中进程的创建。 2.Linux系统中进程的控制。 (三)实验要求 1.掌握Linux系统中进程的创建、控制的实现方法。 2.根据实验内容,在Linux平台上用C语言编程实现,上机调试运行得出实验结果。 3.写出预习报告和实验报告。 实验二 进程通信 (一)实验目的 1.理解和掌握Linux系统中进程通信的基本原理。 2.进一步认识进程软中断通信、管道通信和消息队列通信的实质。 3.分析、设计进程软中断通信、管道通信和消息队列通信的实现方法。 4.掌握进程通信的实现机制。 (二)实验内容 1.设计进程的软中断通信。 2.设计进程的管道通信,实现父子进程的单机通信机制。 3. 设计进程的消息队列通信,实现客户机

ARM的七种工作模式

折月煮酒 提交于 2019-12-06 02:27:18
一、ARM处理器7种工作模式(特权模式 特权模式异常模式) 用户模式(USR):正常程序执行模式,不能直接切换到其他模式 系统模式(SYS):运行操作系统的特权任务,与用户模式类似,但具有可以直接切换到其他模式等特权 快中断模式(FIQ):支持高速数据传输及通道处理,FIQ异常响应时进入此模式 中断模式(IRQ):用于通用中断处理,IRQ异常响应时进入此模式 管理模式(SVC):操作系统保护模式,系统复位和软件中断响应时进入此模式(由系统调用执行软中断SWI命令触发) 中止模式(ABT):用于支持虚拟内存和/或存储器保护,在ARM7TDMI没有大用处 未定义模式(UND):支持硬件协处理器的软件仿真,未定义指令异常响应时进入此模式 表3-1 ARM处理器工作模式 处理器工作模式 特权模式 异常模式 说明 用户(user)模式 用户程序运行模式 系统(system)模式 该组模式下可以任意访问系统资源 运行特权级的操作系统任务 一般中断(IRQ)模式 通常由系统异常状态切换进该组模式 普通中断模式 快速中断(FIQ)模式 快速中断模式 管理(supervisor)模式 提供操作系统使用的一种保护模式,swi命令状态 中止(abort)模式 虚拟内存管理和内存数据访问保护 未定义指令终止(undefined)模式 支持通过软件仿真硬件的协处理

spin_lock spin_lock_irq spin_lock_irqsave

我只是一个虾纸丫 提交于 2019-12-05 16:50:25
1,为啥需要自旋锁 很多时候我们并不能采用其他的锁,比如读写锁、互斥锁、信号量等。一方面这些锁会发生上下文切换,他的时间是不可预期的,对于一些简单的、极短的临界区完全是一种性能损耗;另一方面在中断上下文是不允许睡眠的,除了自旋锁以外的其他任何形式的锁都有可能导致睡眠或者进程切换,这是违背了中断的设计初衷,会发生不可预知的错误。基于两点,我们需要自旋锁,他是不可替代的。 2,为啥自旋锁禁止抢占 这一点其实很好理解,当一个 CPU 获取到一把自旋锁之后,开始执行临界区代码,此时假设他的时间片运转完毕,进程调度会主动触发调度将其调走,执行另一个线程/进程,结果恰巧了这个线程/进程也需要用到该自旋锁,而上一个线程/进程还在停留在临界区内未释放锁,导致本进程无法获取到锁而形成死锁,所以自旋锁为了规避此类情形的出现从而直接禁止对已经开始运行的临界区设置禁止抢占标志。 3,为什么临界区禁止睡眠 如果自旋锁锁住以后进入睡眠,而此时又不能进行处理器抢占,内核的调取器无法调取其他进程获得该 CPU,从而导致该 CPU 被挂起;同时该进程也无法自唤醒且一直持有该自旋锁,进一步会导致其他使用该自旋锁的位置出现死锁。 4,spin_lock 系列的分别 每一种锁出现都有自己的原因,spin_lock 系列的锁就是为了解决这一个又一个的问题才会新增的各种自旋锁变种,这也符合现代计算机代码设计逻辑

04-ABB工业机器人中断程序样例

强颜欢笑 提交于 2019-12-05 06:47:36
前段时间一个项目需要机器人将自己的坐标定时发送给上位机,我师父随手写了一个中断样例,在这里分享一下: 首先介绍两个RAPID指令: 1、IDelete:删除中断,用于取消或者删除中断预定。 2、CONNECT、、、WITH、、、。用于将中断识别号与软中断程序相连。这样只要发现中断识别号,就会自动执行软中断程序。 样例如下: 第一、变量的申明: 第二、主程序: 第三、软中断程序: 运行结果就会显示在示教器上了。 来源: CSDN 作者: 工控小虐 链接: https://blog.csdn.net/weixin_38279964/article/details/88641849

nRF5 SDK软件架构及softdevice工作原理

匿名 (未验证) 提交于 2019-12-03 00:41:02
本文将介绍Nordic nRF5 SDK软件架构以及softdevice工作原理,以加深大家对Nordic产品开发的理解,这样开发过程中碰到问题时,大家也知道如何去调试。 如果你刚开始接触Nordic nRF5 SDK,建议先看一下这篇文章“ Nordic nRF5 SDK和softdevice介绍 ”,以建立nRF5 SDK的一些基本知识。 首先说明一下,Nordic nRF5系列产品都是使用Flash存储器的,确切说,是eFlash存储器,也就是说,代码是可以直接在上面运行的,这个跟很多其他BLE厂商是不一样的(他们使用的是nand Flash,代码是不能直接在nand Flash中运行的,必须先装载到RAM中才能跑,所以你会发现这些厂商的RAM都非常大)。Nordic Flash是带cache机制的,以保证大部分代码执行速度可以达到64MHz,在cache失败的时候,等待周期也只有1个cycle,可以说Flash的执行速度和效率都是非常不错的。另外,Nordic芯片是纯Flash产品,里面没有其他NVM,所有非易失性数据都放在Flash中,包括蓝牙协议栈,这也是为什么Nordic蓝牙协议栈也可以OTA的根本原因所在。 Nordic nRF5 SDK将芯片的存储器划分成如下格局: Flash 结构图 从上图可知,Flash存储器最下面放的是softdevice

系统调用软中断处理程序system_call分析

匿名 (未验证) 提交于 2019-12-03 00:38:01
最近学习了系统调用的整个流程,这里总结并记录。同时作为学习孟宁老师的linux内核课程的作业。 1、概述   系统调用整个过程为:API――封装例程――system_call――系统调用程序。   上一篇文件我们测试了read和open 系统调用。本节我更换了一个简单的系统调用getpid(sys_getpid)。 ‘ 可以看到,我们将系统调用处理函数断住后,当使用系统调用,就会断住。 3、system_call分析:D:\学习资料\linux\linux-3.18.6\linux-3.18.6\arch\x86\kernel\entry_32.S ‘ 4、总结   system_call主要流程:save_all――系统调用应用程序――restore_all 原文:https://www.cnblogs.com/tjyuanxi/p/9231599.html

Linux设备驱动程序 之 软中断

江枫思渺然 提交于 2019-12-02 19:57:24
软中断保留给系统中对时间要求严格以及最重要的下半部使用;目前,只有两个子系统(网络和SCSI)直接使用软中断;此外, 内核定时器和tasklet都是建立在软中断上的 ;在使用软中断之前,要先确定为什么不能使用tasklet,tasklet可以动态生成,并且对加锁的要求不高,使用起来也很方便,性能也不错;当然,对于时间要求严格并能自己高效完成加锁的工作,软中断是正确的选择; 分配索引 在编译期间,通过在<linux/interrupt.h>中定义一个枚举类型来静态的声明软中断,内核用这些索引来表示优先级,索引号小的软中断在索引号大的软中断之前执行; 建立新的软中断必须在此枚举的类型中加入新的项;加入时,不能像其他地方一样,简单的把项增加到列表的末尾;相反,必须根据希望赋予她的优先级来决定加入的位置;习惯上,HI_SOFTIRQ通常作为第一项,而RCU_SOFTIRQ作为最后一项;新项可能插在BLOCK_SOFTIRQ和TASKLET_IRQ之间; 1 enum 2 { 3 HI_SOFTIRQ=0, 4 TIMER_SOFTIRQ, 5 NET_TX_SOFTIRQ, 6 NET_RX_SOFTIRQ, 7 BLOCK_SOFTIRQ, 8 IRQ_POLL_SOFTIRQ, 9 TASKLET_SOFTIRQ, 10 SCHED_SOFTIRQ, 11 HRTIMER