精华内容
下载资源
问答
  • 中断概念

    2020-01-13 09:38:52
    1. 中断相关概念 中断过程-----------------------------------你在下象棋,突然电话响了,你回屋接电话,然后回来继续下象棋,这个过程就叫做中断响应过程。 CPU执行正常任务---------------------下象棋 保护...

    1.  中断相关概念 


    中断过程-----------------------------------你在下象棋,突然电话响了,你回屋接电话,然后回来继续下象棋,这个过程就叫做中断响应过程。 
    CPU执行正常任务---------------------下象棋 
    保护现场----------------------------------你已经想好要“将军”,先在脑海中记下来。 
    中断发生----------------------------------电话响- 
    中断服务程序----------------------------接电话 
    恢复现场----------------------------------回来后恢复刚才想法 
    中断返回----------------------------------你回来继续下象棋 
    中断屏蔽----------------------------------Boss 正在训话,要求所有电话关机,你不能接电话了。 
    不可屏蔽中断—----------------------------你内急,即使是 Boss 在训话,你还是得到外面去嘘嘘。

    可屏蔽中断-------------------------------你在“闭关修炼”,可以不受外界干扰。

     

     

     

    部分参考:

    https://blog.csdn.net/zxia1/article/details/5989633

    展开全文
  • 中断概念 刚在写博客的时候口渴,我起身起身去喝水,喝水过程中不小心打翻了杯子弄湿了地面,又不得不去拖地,其实这就是生活中常见的中断,我本来在写博客,这是我的主程序,口渴便是一个中断源,它提示我应该喝水...

    单片机的中断

    由于本人水平有限,文章中难免出现错别字以及错误,欢迎大家私信批评指正
    这个专栏,将直接从52系列单片机的中断开始连载;对于中断以前的基础内容都很简单,一般看原理图就能解决,主要由于我最近看中断一遍还是觉得有些逻辑混乱,所以直接从中断开始。

    中断概念

    刚在写博客的时候口渴,我起身起身去喝水,喝水过程中不小心打翻了杯子弄湿了地面,又不得不去拖地,其实这就是生活中常见的中断,我本来在写博客,这是我的主程序,口渴便是一个中断源,它提示我应该喝水,当我停下写博客在喝水的时候打翻了杯子 ,其实这又是一个中断源向我的大脑CPU申请中断去拖地,这实际上是一个中断的二级嵌套。对于中断的逻辑关系就是这么简单,实际上中断函数也不难,比较难的理解各个中断源的工作原理。
    中断是为使单片机具有对外部或内部随即发生的事件实时处理而设置的,中断功能的存在很大程度上提高了单片机处理外部或内部事件的能力;对于单片机来讲中断指的是:CPU在处理事件A时,发生了另一件事件B,请求CPU去处理(中断发生);CPU暂停了当前工作(中断响应)转去处理事件B(中断服务);待CPU处理完事件B后,再回到中断发生的地方继续处理事件A(中断返回)。
    图片源自GTX老师的书

    其中引起CPU中断的根源是中断源
    涉及中断还有一个重要的概念:中断优先级,即同一时刻发生了两个中断,单片机先执行哪个终端你取决于单片机内部的一个特殊功能寄存器——中断优先级寄存器的设置情况,其决定了执行中断的顺序。中断的开启与关闭、设置启用哪一个中断都是由单片机内部的特殊功能寄存器决定的
    上面讲到的中断优先级寄存器,通过设置它我们可以选择当两个中断同时出现先执行哪一个中断程序,若没有人为操作优先级寄存器,单片机会按照默认优先级自动处理。其中T2为52系列单片机特有的
    其中T2为52系列单片机特有的

    中断允许寄存器IE

    简单来说IE是个开关,用来设定中断源的打开和关闭,只有允许打开的时候才有可能引起中断。可进行位寻址,即对每一位进行单独操作
    在这里插入图片描述

    中断优先级寄存器IP

    IP用来设定个中断源属于两级中断中的哪一级。同理可进行位寻址
    (懒得码字,图片说话)
    在这里插入图片描述

    本篇主要讲了中断的逻辑概念以及IE和IP寄存器的信息,并没有涉及任何操作,下一篇我们将开始讲单片机定时器的中断

    展开全文
  • CPU软中断概念与案例

    2020-04-03 22:47:53
    CPU软中断概念&案例 1 案例一 1.1 环境部署 环境1:WEB服务器 docker run -itd --name=nginx -p 80:80 nginx 环境2:SYN攻击 curl http://xxx.xxx.xxx.xxx/ <!DOCTYPE html> <html> <head> &...

    CPU软中断概念&案例

    1 案例一

    1.1 环境部署

    环境1:WEB服务器

    docker run -itd --name=nginx -p 80:80 nginx
    

    环境2:SYN攻击

    curl http://xxx.xxx.xxx.xxx/
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    ...
    
    # -S 参数表示设置 TCP 协议的 SYN(同步序列号),-p 表示目的端口为 80
    # -i u100 表示每隔 100 微秒发送一个网络帧
    # 注:如果你在实践过程中现象不明显,可以尝试把 100 调小,比如调成 10 甚至 1
    $ hping3 -S -p 80 -i u1 xxx.xxx.xxx.xxx
    

    1.2 分析过程

    1、CPU使用率不高但是软中断已经到了10%,从非idle状态的全部用在了软中断上面。

    在这里插入图片描述

    2、确认是哪个软中断导致的问题

    watch -d cat /proc/softirqs
    

    TIMER(定时中断)、NET_RX(网络接收)、SCHED(内核调度)、RCU(RCU 锁)中,网络接收变化最快。

    在这里插入图片描述

    3、确认了网络问题,继续观察下网络收发包的情况

    # -n DEV 表示显示网络收发的报告,间隔 1 秒输出一组数据
    sar -n DEV 1
    

    报告时间 | 网卡 | rxpck/s txpck/s收发帧数 | exkB/s txkB/s收发千字节数

    在这里插入图片描述

    • 对网卡et0来说,收帧很大112924.00,但是数据量很小5955.00。
    • 计算一下5955.00*1024Byte/112924.00=54Byte平均每个包只有54字节即小包问题。

    4、抓包确认问题

    tcpdump -i eth0 -n tcp port 80
    
    21:59:25.549573 IP 源端.40615 > 目标端.http: Flags [S], seq 270293337, win 512, length 0
    21:59:25.549592 IP 源端.40616 > 目标端.http: Flags [S], seq 830767629, win 512, length 0
    

    Flags [S]表示syn包,PPS超过1.2W确认syn flood攻击。

    2 案例二

    sysbench测试发现系统大量net中断

    在这里插入图片描述

    分析网络流量

    sar -n DEV 1
    07:33:55 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
    07:33:56 PM      eth0 124048.00 319294.00  10680.15 219670.82      0.00      0.00      1.00
    07:33:56 PM      eth1 117075.00 325641.00  14828.60 227463.34      0.00      0.00      0.00
    07:33:56 PM        lo     73.00     73.00     53.75     53.75      0.00      0.00      0.00
    
    • 同样收帧很大124048.00每秒,但是数据量还不算大
    • 10680.15*1024Byte/124048=88.16Byte字节

    进一步分析数据包

    sudo tcpdump -i eth0 tcp and port 3001 -n -nn -s0 -tttt -w mysql.cap
    
    tcpdump -r mysql.cap | more
    

    没有使用连接池大量短连接问题!

    2 概念

    2.1 软中断概念

    linux的中断会打断CPU当前的工作,中断一般都设计的短小精悍。但是也为了解决中断处理程序执行时间过长和中断丢失的问题,Linux的中断分为两个阶段:

    • 上半部用来快速处理中断,它在中断禁止模式下运行,主要处理硬件相关和时间敏感的工作
    • 下半部用来延迟处理上半部未完成的工作,通常以内核线程的方式运行

    网卡收数据包的例子:

    网卡收到数据包后会通过硬件中断的方式,通知内核有新的数据到了:对上半部来说,既然是快速处理,其实就是要把网卡的数据读到内存中,然后更新一下硬件寄存器的状态(表示数据已经读好了),最后再发送一个软中断信号,通知下半部做进一步的处理。而下半部被软中断信号唤醒后,需要从内存中找到网络数据,再按照网络协议栈,对数据进行逐层解析和处理,直到把它送给应用程序。

    • 上半部直接处理硬件请求,也就是我们常说的硬中断,特点是快速执行
    • 而下半部则是由内核触发,也就是我们常说的软中断,特点是延迟执行

    实际上,上半部会打断 CPU 正在执行的任务,然后立即执行中断处理程序。而下半部以内核线程的方式执行,并且每个CPU都对应一个软中断内核线程,名字为 “ksoftirqd/CPU 编号”,比如说, 0 号 CPU 对应的软中断内核线程的名字就是 ksoftirqd/0。不过要注意的是,软中断不只包括了刚刚所讲的硬件设备中断处理程序的下半部,一些内核自定义的事件也属于软中断,比如内核调度和RCU 锁(Read-Copy Update 的缩写,RCU是 Linux 内核中最常用的锁之一)等。

    2.2 查看软中断和内核线程

    • /proc/softirqs 提供了软中断的运行情况;
    • /proc/interrupts 提供了硬中断的运行情况。

    运行下面的命令,查看 /proc/softirqs 文件的内容,你就可以看到各种类型软中断在不同 CPU 上的累积运行次数

    在查看 /proc/softirqs 文件内容时,你要特别注意以下这两点。

    • 第一,要注意软中断的类型,也就是这个界面中第一列的内容。从第一列你可以看到,软中断包括了 10 个类别,分别对应不同的工作类型。比如 NET_RX 表示网络接收中断,而 NET_TX 表示网络发送中断。

    • 第二,要注意同一种软中断在不同 CPU 上的分布情况,也就是同一行的内容。正常情况下,同一种中断在不同 CPU 上的累积次数应该差不多。比如这个界面中,NET_RX 在 CPU0 和 CPU1 上的中断次数基本是同一个数量级,相差不大。

    不过你可能发现,TASKLET 在不同 CPU 上的分布并不均匀。TASKLET 是最常用的软中断实现机制,每个 TASKLET 只运行一次就会结束 ,并且只在调用它的函数所在的 CPU 上运行。

    因此,使用 TASKLET 特别简便,当然也会存在一些问题,比如说由于只在一个 CPU 上运行导致的调度不均衡,再比如因为不能在多个 CPU 上并行运行带来了性能限制。

    另外,刚刚提到过,软中断实际上是以内核线程的方式运行的,每个 CPU 都对应一个软中断内核线程,这个软中断内核线程就叫做 ksoftirqd/CPU 编号。那要怎么查看这些线程的运行状况呢?

    其实用 ps 命令就可以做到,比如执行下面的指令:

    $ ps aux | grep softirq
    root         7  0.0  0.0      0     0 ?        S    Oct10   0:01 [ksoftirqd/0]
    root        16  0.0  0.0      0     0 ?        S    Oct10   0:01 [ksoftirqd/1]
    

    这些线程的名字外面都有中括号,这说明 ps 无法获取它们的命令行参数(cmline)。一般来说,ps 的输出中,名字括在中括号里的,一般都是内核线程。

    展开全文
  • 1、中断概念的引入 假设有个大房间里面有小房间,婴儿正在睡觉,他的妈妈在外面看书。 问:这个母亲怎么才能知道这个小孩醒? 过一会打开一次房门,看婴儿是否睡醒,让后接着看书 一直等到婴儿发出声音以后再过去...

    1、中断概念的引入

    假设有个大房间里面有小房间,婴儿正在睡觉,他的妈妈在外面看书。

    问:这个母亲怎么才能知道这个小孩醒?

    • 过一会打开一次房门,看婴儿是否睡醒,让后接着看书
    • 一直等到婴儿发出声音以后再过去查看,期间都在读书

    第一种方法 叫做查询方式
    程序简单,但是累
    程序的模型:

    while(1)
    {
        1 read book(读书)
        2 open door(开门)
        if()
            return(read book)
        else
            照顾小孩
    
    }
    

    第二种方法 叫做中断方式
    程序复杂,但是不累
    程序的模型:

    while(1)
    {
        read book
        中断服务程序()//如何被调用?
        {
        处理照顾小孩
        }
    }
    

    2、 中断的处理流程介绍

    在这里插入图片描述
    母亲采用中断方式的处理过程:
    声音来源有很多种,有远处的猫叫,门铃声,小孩哭声。这些声音传入耳朵,再由耳朵听到声音会发送信号给脑袋,中断母亲的看书。====>中断(属于一种异常)
    身体不舒服,有只蜘蛛掉下来,对于特殊情况无法回避,必须立即处理。 ====>异常

    对比ARM系统:
    中断源有按键、定时器、有其它的(比如网络数据),这些信号都可以发送信号给中断控制器,再由中断控制器发送信号给CPU表明有这些中断产生了,这些成为中断(属于一种异常)
    指令不对,数据访问有问题,reset信号,这些都可以中断CPU,这些成为异常中断。

    母亲放下看书的任务,在书里放上书签,去完成其他任务后回来,再拿起书看。
    ARM系统也是同理。

    重点在于保存现场以及恢复现场

    arm对异常(中断)处理流程:

    1 初始化:
    :: a 设置中断源,让它可以产生中断
    :: b 设置中断控制器(可以屏蔽某个中断,优先级)
    :: c 设置CPU总开关,(使能中断)

    2 执行其他程序:正常程序

    3 产生中断:按下按键—>中断控制器—>CPU

    4 cpu每执行完一条指令都会检查有无中断/异常产生

    5 发现有中断/异常产生,开始处理。对于不同的异常,跳去不同的地址执行程序。这地址上,只是一条跳转指令,跳去执行某个函数(地址),这个就是异常向量。如下就是异常向量表,对于不同的异常都有一条跳转指令。

    .globl _start
    _start: b   reset
        ldr pc, _undefined_instruction
        ldr pc, _software_interrupt
        ldr pc, _prefetch_abort
        ldr pc, _data_abort
        ldr pc, _not_used
        ldr pc, _irq //发生中断时,CPU跳到这个地址执行该指令 **假设地址为0x18**
        ldr pc, _fiq
    //我们先在0x18这里放 ldr pc ,__irq,于是cpu最终会跳去执行__irq代码
    //保护现场,调用处理函数,恢复现场
    

    (3-5都是硬件强制做的)

    6 跳到的那些函数做什么事情? 我们自己要写的代码
    :: 软件做的:
    :: a 保存现场(各种寄存器)
    :: b 处理异常(中断):
    :::: 分辨中断源
    :::: 再调用不同的处理函数
    :: c 恢复现场

    中断处理程序怎么被调用?
    CPU—>0x18 –跳转到其他函数->
    :: 做保护现场
    :: 调用函数
    :::: 分辨中断源
    :::: 调用对应函数
    :: 恢复现场

    cpu到0x18是由硬件决定的,跳去执行更加复杂函数(由软件决定)

    展开全文
  • 中断概念的理解

    2018-11-26 17:28:45
    任何一个CPU,比如8086,都有一中能力,可以在执行当前的指令之后,检测到从CPU外部发过来的(外中断)或内部产生的(内中断)一种特殊的信息,并且可以立即对接收到的信息进行处理,这种特殊的信息可以称为中断信息...
  • 中断 CPU正在在执行一个程序,突然接到中断请求,然后就放下手中的工作取执行中断程序,然后再回来继续手头的工作。 框前面的数字是中断向量号 这个图并不完整,比如计时器/定时器的功能设置没画出来 看外部中断 ...
  • (一)项目任务ü 任务1:用定时方式控制LEDn 子任务1.1 两种定期器...swtich语句认识n 子任务2.2 中断系统的认识n 子任务2.3 采用定时和中断方式驱动按键(二)相关知识点2.1、定时器的基本概念标准的51单片机有T0...
  • 一、中断概念。  在多线程中,中断可以理解为线程之间一种特殊的通讯手段或者说相互控制的一种方式。调用某个线程对象的中断方法--interrupt可以控制该线程,使其抛出interruptedException,从...
  • 中断概念介绍(一)

    2020-04-06 19:33:22
    第001节_概念引入与处理流程 取个场景解释中断。 假设有个大房间里面有小房间,婴儿正在睡觉,他的妈妈在外面看书。 问:这个母亲怎么才能知道这个小孩醒? 过一会打开一次房门,看婴儿是否睡醒,让后接着看书 一直...
  • 写《stm32基础项目——智能小车(红外避障)》时发现,对零基础的学弟学妹来说直接上手有些困难,因此还是讲讲有关中断概念。 一、何为“中断”? 大白话就是:“cpu运行时被其他事件打断,然后放下手中的事转而去...
  • 目录一、中断形象对比和简介二、中断和轮训方式的对比三、中断软硬件处理流程图和向量表 一、中断形象对比和简介 二、中断和轮训方式的对比 三、中断软硬件处理流程图和向量表
  •   当cpu和其他的输入输出设备交互的时候,应该怎么办呢,科学家们就想出了一个办法,牵一根线,连接每个设备,并把其他设备都编上号,想访问谁了就在总线上“吼一声”;...  中断:这样子比较浪费,科学...
  • STM32中断概念及理解

    千次阅读 2018-07-15 08:56:31
    1.STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下: 第0组:所有4位用于指定响应优先级 第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级 第2组:最高2位用于指定抢占...
  • 中断系统 以stm32f1xx为例 中断: 用于处理内、外部随机事件,现有程序被转向,转向其他程序。 中断的管理: 决定中断源是否有权请求以及有效的请求方式 解决中断源之 间的竞争问题 为请求寻址 stm32的中断功能主要...
  •  b 当前进程是内核态,使用栈进入到中断栈,并且在中断栈保存内核态各寄存器的值,执行中断代码,执行完中断代码后,从中断栈恢复内核态寄存器值.  c 中断代码执行时,处在中断上下文.不属于任何一个进程上下文. ...
  • 定时器与中断概念

    千次阅读 2006-11-03 10:15:00
    定时/计数器学习笔记 一、基本概念1、 89C51有两个计数器T0和T1,89C52还有一个T2。每个计数器都是由两个8位的RAM 单元组成的,即每个计数器都是16 位的计数器,最大的计数容量是216=65536,记住是从0-65535。2、...
  •  b 当前进程是内核态,使用栈进入到中断栈,并且在中断栈保存内核态各寄存器的值,执行中断代码,执行完中断代码后,从中断栈恢复内核态寄存器值.  c 中断代码执行时,处在中断上下文.不属于任何一个进程上下文. ...
  • STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。 1.什么是占先式优先级(pre-em...
  • 可以边看边思考,文章最后给出答案中断概念 为什么引入中断?中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在,很大程度上提高了单片机处理外部或内部事件的能力。 中断系统特点...
  • 中断概念 为什么引入中断? 中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在,很大程度上提高了单片机处理外部或内部事件的能力。 中断系统特点: ①分时操作。CPU 可以分时为...
  • 中断的基本概念

    2019-12-01 15:08:06
    概念: 程序执行过程中CPU会遇到一些特殊情况,是正在执行的程序被“中断”,cpu中止原来正在执行的程序,转到处理异常情况或特殊事件的程序去执行,结束后再返回到原被中止的程序处(断点)继续执行 程序执行被...
  • 中断概念

    2017-03-04 19:53:27
    单片机中断概念

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,307
精华内容 2,922
关键字:

中断概念