中断屏蔽技术

【README】

本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;


【1】中断屏蔽

1,中断屏蔽的意思是,在中断1的服务程序执行过程中,不允许被其他中断打扰;

2,按理,对于不同中断源,它有中断响应优先级,但这个是硬件决定的,无法修改;而如果要修改各个中断的优先级(即是否可以被打扰),可以通过中断屏蔽寄存器(人工设置该寄存器的值)来实现;这是提出中断屏蔽技术的原因所在;

3,中断屏蔽的具体原理是: 每个中断源都有一个中断屏蔽字(如16个bit); 当该中断被响应或执行该中断的服务请求时,对应中断源的屏蔽字设置到中断屏蔽寄存器;在中断响应时,cpu会根据屏蔽寄存器的值来判断是否响应该中断;

【1.1】屏蔽技术介绍

1 中断屏蔽技术

  • 1.1 通过设置中断屏蔽字来改变中断服务优先级,从而提高系统设计和响应的灵活性;
  • 1.2 中断屏蔽字是通过中断屏蔽触发器来设置的;INTR 是中断请求寄存器;MASK 是中断屏蔽触发器(MASK=0,非门输出1时表示未屏蔽);

2 如何提出中断请求?

  • 触发器D在完成后,提出中断请求,能够提出中断的条件是,这个中断源没有被屏蔽掉;

3 右图第2种方式实现中断屏蔽

  • 中断屏蔽字的长度等于中断源的个数,屏蔽字的每个bit对应到每个mask的取值上
  • 若maski等于1,则表示第i个中断源的中断请求不会被响应(或被屏蔽);当然也无法提出中断请求;

中断屏蔽触发器的作用是 屏蔽某个中断源发出中断请求,也不能参加中断请求优先级的排队;

【1.2】中断屏蔽字

屏蔽触发器对应的值是屏蔽字;
如,16个中断源,每个中断源都对应一个屏蔽字;
每个屏蔽字表示当中断源的中断服务程序在执行过程中,是否允许其他中断源提出中断请求
进入到排队器进行排队(即是否允许其他中断源提出中断请求);对应的bit位为1表示屏蔽,0表示不屏蔽;

如:1号中断源的中断服务程序在执行过程中,无论是1号还是2.。。。16号中断源提出的中断请求都不会进入中断排队器中排队(即1号中断源屏蔽其他中断源的中断请求);
但2号中断服务程序的执行过程中,允许1号中断源提出中断请求并被1号打断;


【2】 屏蔽技术可以改变中断处理优先级

【2.1】中断响应优先级与处理优先级

1,中断优先级分为响应优先级,处理优先级;

  • 响应优先级,属于中断硬件给定,无法修改;
  • 处理优先级,可以通过屏蔽技术进行修改;

2,处理优先级是可以改变的,通过重置屏蔽字,让低优先级的中断无法进入排队器排队;通过中断屏蔽字让某一个中断源的处理优先级被提高

【例】在执行C的中断服务程序的过程中,对应的中断屏蔽字(中断屏蔽寄存器)被设置为0110,只有A或D的中断请求可以进入中断排队器中排队;

 【2.2】例子,屏蔽技术修改中断处理优先级

响应优先级为 A B C D,降序排列, 无法修改;处理优先级修改为, A D C B,降序排列;

【例子】加入屏蔽技术后的多中断处理步骤

  • 步骤1:ABCD同时提出中断服务请求,因为主程序屏蔽字(即中断屏蔽寄存器)为0000(不会屏蔽任何中断),所以4个中断都会进入排队器;
  • 步骤2:又A的响应优先级最高,所以cpu先响应A,转而执行A的中断服务程序;在执行A中断服务程序过程中,因A的屏蔽字为1111,故它会把中断屏蔽字设置为1111,这会屏蔽其他中断源(ABCD)的中断请求;
  • 步骤3:A的中断服务程序执行后,返回主程序,这时主程序屏蔽字是0000,所以中断屏蔽字寄存器为0000; 即主程序随时可以被打断,DCB都可以进入中断排队器进行排队;
  • 步骤4:又B的响应优先级最高,所以先响应B,执行B的中断服务程序;又B的中断屏蔽字为0100,所以B允许被CD中断源打断;
  • 步骤5:在执行B的中断服务程序过程中,CD均可以提出中断请求,并进入中断排队器排队;
  • 步骤6:又C的响应优先级高于D,所以先响应C,转而执行C的中断服务程序(C中断B);响应C后, C的中断屏蔽字设置到中断屏蔽字寄存器,即0110;那么C的中断服务程序可以被AD中断源打断;
  • 步骤7:在执行C的中断服务程序过程中,D提出中断请求,进入排队器进行排队;又D的处理优先级高于C,所以中断C,转而执行D(D中断C);
  • 步骤8:执行D完成后,回到C的中断服务程序的断点,继续执行C,因为D中断的是C(中断谁就返回谁);
  • 步骤9: C执行完成后,再返回到B,因为C中断的是B;
  • 步骤10:B执行完成后,整个执行就结束了;

【3】新屏蔽字的设置

新屏蔽字的设置步骤:

序号

步骤

描述

1

保护现场

Push指令,把要用到的寄存器的值保存起来,以便从中断恢复后使用;

2

置屏蔽字

设置中断屏蔽字;

3

开中断

提前开中断,目的是实现多重中断;设置EINT=1

4

执行中断服务程序

5

关中断

因为恢复现场,恢复中断屏蔽字的过程不能被打断;设置EINT=0

6

恢复现场

把之前被保护的现场数据从内存恢复到寄存器;

7

恢复中断屏蔽字

把中断屏蔽寄存器的值设置为主程序的屏蔽字(0000),允许被任何中断打断;

8

开中断

允许中断;设置EINT=1

9

中断返回

从中断中恢复到主程序;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET FM的未来计划

2016年3月21日,我们启动了.NET FM这档独立播客来服务中文.NET和微软技术社区。如同早先感谢信所言,能够得到社区的肯定和全力支持,二位主播是受宠若惊。关于未来的计划,下面简单和大家分享一下。 首先,关于节目播出频率…

Java开发必须掌握的日志分析命令

转载自 Java开发必须掌握的日志分析命令 对于大型网站来说,很多网站在可用性方面提出4个9或者5个9的要求,如果是4个9,那么网站全年的不可用时间不能超过52.6分钟,如果是5个9,全年不可用时间不能超过5.2分钟。这其实是很…

指令寻址方式与数据寻址方式

【README】 1.本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 2. cpu访存寄存器耗费 10ns,访问缓存(高速缓冲寄存器)耗费20ns,访问主…

python oj 输入_Python写OJ题时输入问题

# encoding: utf-8Created on Nov 6th, 2014author: SpeedcellPython的输入是野生字符串,所以要自己转类型strip去掉左右两端的空白符,返回strslipt把字符串按空白符拆开,返回[str]map把list里面的值映射到指定类型,返回[type]EOF…

本地缓存的原理及技术选型参考

转载自 本地缓存的原理及技术选型参考互联网架构设计的五大要素:高性能、高可用、可伸缩性、可扩展性、安全。如何做到高性能、高可用,缓存是一大助力。我们知道,绝大部分的时候,读数据写数据符合二八定律。并且读数据中&#xff…

程序员欢呼:微软Bing开始支持搜索源码、可直接运行

日常生活中,程序员们经常会遇见这样那样的问题,比如忘记了代码该怎么写,又或者需要实现一些特殊的算法和功能。这时候,你就可以去找微软 Bing 帮忙啦! 微软最近联合 HackerRank 一起研发了一项新功能:源代码…

rabbitmq创建缓存连接工厂

转自: 【RabbitMQ-3】连接池的配置_小胖学编程的博客-CSDN博客文章目录1. rabbitmq的connection连接池1.1 问题提出1.1.1 Connection对象管理以及性能1.1.2 Channel对象管理以及性能1.2 Spring AMQP线程池配置1.2.1 ConnectionFactory连接工厂1.2.2 消费发送和接收…

python简短语法_写出优雅简洁的 python 语法(二)函数传参

Python中函数传递参数的形式包含多种,可根据情况而定使用哪种方式。基本所有语言都有简介明了的语法去替代繁琐的代码,优雅的写法不仅能提升代码美观,更能提高提高开发效率,让代码更加易读。位置传递,默认参数位置传参…

你真的了解Java中的三目运算符吗

转载自 你真的了解Java中的三目运算符吗三目运算符是我们经常在代码中使用的,a (bnull?0:1);这样一行代码可以代替一个if-else,可以使代码变得清爽易读。但是,三目运算符也是有一定的语言规范的。在运用不恰当的时候会导致意想不到的问题。本文就介绍一…

关于.NET下开源及商业图像处理(PSD)组件

1 前言 这篇博客的背景是:为了完成吉日嘎拉的“PSD文件损坏检测和图层检测”任务,查找了目前.NET各种开源的及商业的图像处理资料,在完成任务之后,进行总结。此次任务主要是用C#操作PSD(PhotoShop)文件,中文资料很少&a…

SpringBoot连接多RabbitMQ源

转自: SpringBoot连接多RabbitMQ源 - 掘金在实际开发中,很多场景需要异步处理,这时就需要用到RabbitMQ,而且随着场景的增多程序可能需要连接多个RabbitMQ。SpringBoot本身提供了默认的配置可以快速配置连接RabbitMQ,但…

满足其中一个条件则可_农村分户好处多,但并非人人都可分户!满足这4个条件才可以申请...

分户,一般指子女成年或者成家后从父母户口里面独立出去,自立一户;也可以是指夫妻离婚后一方将户口独立出去(离婚也可以不分户,变更婚姻状态就行)。简单的说分户是指原本在一个户口本上的人口,现在分出去自成一个户口本…

Synchronized的实现原理(一)

转载自 Synchronized的实现原理(一)synchronized,是Java中用于解决并发情况下数据同步访问的一个很重要的关键字。当我们想要保证一个共享资源在同一时间只会被一个线程访问到时,我们可以在代码中使用synchronized关键字对类或者对…

FOSS历史回顾:三代开源人的故事

现在是2016年,你环顾一下四周,开源早已无处不在了。开源无论是规范、形式、以及面貌都和最初的大相径庭,然而事实上,这也预示着新一代的开源程序员们的崛起。下面我们尝试解释下。 (以下这一段落为作者自谦&#xff09…

Spring中@Autowired、@Qualifier、@Resource的区别

转自: Spring中Autowired、Qualifier、Resource的区别_老周聊架构的博客-CSDN博客_qualifier和resource区别1、AutowiredAutowired 可以单独使用。如果单独使用,它将按类型装配。因此,如果在容器中声明了多个相同类型的bean,则会…

map分组后取前10个_海关数据 | 图解前10个月外贸

*内容转载自微信公众号:海关发布RECOMMEND【 推荐阅读 】海关数据 | 图解前三季度我国外贸海关数据 | 图解8月外贸海关数据 | 一图看懂前7个月外贸海关数据 | 图解上半年度外贸增3.9%声明本微信订阅号不以商业营利为目的,不排除部分文字内容或图片转载自…

回顾build 2016:你好,这是微软迄今最好的Windows开发平台

按:本文作者陈计节,ThoughtWorks 高级咨询师。多年的跨平台 .NET 开发者,全栈工程师,技术布道师。擅长互联网应用程序的设计、开发和运维等工作。 在最近的开发者大会(Build 2016)上,微软面向开…

深入理解多线程(二)—— Java的对象模型

转载自 深入理解多线程(二)—— Java的对象模型上一篇文章中简单介绍过synchronized关键字的方式,其中,同步代码块使用monitorenter和monitorexit两个指令实现,同步方法使用ACC_SYNCHRONIZED标记符实现。后面几篇文章会…

8.1-CPU结构(学习笔记)

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 【1】CPU结构 Cpu的首要功能就是解释指令;功能列表如下: 1) 取指令:从内存中读取…

生物信息 python 书籍_用python做生物信息数据分析(1-环境准备)

写在前面四五年前,接触生物信息的时候,阴差阳错,我选择用perl。事实上,直到嫌我,我还是认为我当初的选择,完全正确!。在做一些小文本的快速处理上,perl在我看来,从来最优…