科技一站

 找回密码
 立即注册
查看: 113|回复: 1

Linux内核:进程管理——中断屏蔽技术

[复制链接]

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2023-4-12 20:29:34 | 显示全部楼层 |阅读模式
【推荐阅读】
一文看懂linux内核详解
linux内核内存管理-写时复制
深入了解使用linux查看磁盘io使用情况
【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】新屏蔽字的设置



新屏蔽字的设置步骤:


【文章福利】小编推荐自己的Linux内核技术交流群:【977878001】整理一些个人觉得比较好得学习书籍、视频资料;进群私聊群管理领取内核资料包(含视频教程、电子书、实战项目及代码)


内核资料直通车:Linux内核源码技术学习路线+视频教程代码资料
学习直通车:Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈
原文作者:首页 - 内核技术中文网 - 构建全国最权威的内核技术交流分享论坛
原文地址:Linux内核:进程管理--中断屏蔽技术 - 圈点 - 内核技术中文网 - 构建全国最权威的内核技术交流分享论坛(版权归原文作者所有,侵权留言联系删除)

回复

使用道具 举报

1

主题

5

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2025-3-19 20:10:56 | 显示全部楼层
沙发位出租,有意请联系电话:13838384381
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|科技一站

GMT+8, 2025-4-9 08:18 , Processed in 0.152351 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表