37 - 中断编程实践

---- 整理自狄泰软件唐佐林老师课程

查看所有文章链接:(更新中)深入浅出操作系统 - 目录

1. 实践内容

  • 预备工作
    • 8259A初始化,读写IMR寄存器,发送EOI控制字,等
  • 实践一
    • 自定义软中断的实现(内部中断处理)
  • 实践二
    • 时钟中断的响应和处理(外部中断处理)

1.1 预备工作

  • 编写延时函数(Delay)
  • 编写8259A初始化函数(Init8259A)
  • 编写8259A中断屏蔽寄存器读写函数(ReadIMR,WriteIMR)
  • 编写8259A中断结束符写入函数(WriteEOI)

1.1.1 Init8259A

参看上一节:《36 - 8259A控制编程》

在这里插入图片描述

1.1.2 读写IMR寄存器

  • 使用OCW1设置IMR的目标值
  • 写入对应端口(0x21或0xA1)

在这里插入图片描述

1.1.3 汇编小贴士

  • 汇编语言中支持 预处理语句(如:%include)
  • 与C语言中的情况类似,汇编预处理语句常用于文本替换
  • 示例:语句重复(%rep)

在这里插入图片描述

1.1.4 准备工作的代码

【参看链接】:37 - 中断编程实践 / 37 / 00

1.2 实践一

  • 自定义保护模式下的软中断(0x80)
  • 0x80中断使用后,在屏幕上打印字符串
  • 示例:
    在这里插入图片描述

1.2.1 实现思路

在这里插入图片描述

1.2.2 中断描述符表

  • 注意事项
    • x86处理器一共支持256个中断类型,因此中断描述符表中需要有256个描述符与之对应

在这里插入图片描述

1.2.3 内部中断实现

【参看链接】:37 - 中断编程实践 / 37 / 01

在这里插入图片描述

1.3 实践二

  • 处理外部时钟中断(主8259A-IR0引脚上的中断请求)
  • 接收到时钟中断后,在屏幕上循环打印0~9

1.3.1 实现思路

在这里插入图片描述

  • 注意事项:
    由于8259A初始化为手动结束的方式,因此,外部中断服务程序中需要手动发送结束控制字

1.3.2 发送中断结束命令字

在这里插入图片描述

1.3.3 时钟中断处理

【参看链接】:37 - 中断编程实践 / 37 / 02

在这里插入图片描述在这里插入图片描述

2. 小结

  • 中断处理前需要先对8259A进行初始化(ICW1~ICW4)
  • 中断描述符表需要包含256个描述符
  • 处理外部中断时:
    • 处理器和8259A需要同时设置为响应外部中断
    • 考虑是否手动发送结束控制字(中断手动结束)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序取得了显著的进步,提高了Java虚拟机的性能,提高了并发类的可伸缩性,并加入了丰富的新并发构建块。在本书中,这些便利工具的创造者不仅解释了它们究竟如何工作、如何使用,同时,还阐释了创造它们的原因,及其背后的设计模式。 本书既能够成为读者的理论支持,又可以作为构建可靠的,可伸缩的,可维护的并发程序的技术支持。本书并不仅仅提供并发API的清单及其机制,本书还提供了设计原则,模式和思想模型,使我们能够更好地构建正确的,性能良好的并发程序。 本书的读者是那些具有一定Java编程经验的程序员、希望了解Java SE 5,6在线程技术上的改进和新特性的程序员,以及Java和并发编程的爱好者。 目录 代码清单 序 第1章 介绍 1.1 并发的(非常)简短历史 1.2 线程的优点 1.3 线程的风险 1.4 线程无处不在 第1部分 基础 第2章 线程安全 2.1 什么是线程安全性 2.2 原子性 2.3 锁 2.4 用锁来保护状态 2.5 活跃度与性能 第3章 共享对象 3.1 可见性 3.2 发布和逸出 3.3 线程封闭 3.4 不可变性 3.5 安全发布 . 第4章 组合对象 4.1 设计线程安全的类 4.2 实例限制 4.3 委托线程安全 4.4 向已有的线程安全类添加功能 4.5 同步策略的文档化 第5章 构建块 5.1 同步容器 5.2 发容器 5.3 阻塞队列和生产者一消费者模式 5.4 阻塞和可中断的方法 5.5 Synchronizer 5.6 为计算结果建立高效、可伸缩的高速缓存 第2部分 构建并发应用程序 第6章 任务执行 6.1 在线程中执行任务 6.2 Executor 框架 6.3 寻找可强化的并行性 第7章 取消和关闭 7.1 任务取消 7.2 停止基于线程的服务 7.3 处理反常的线程终止 7.4 JVM关闭 第8章 应用线程池 8.1 任务与执行策略问的隐性耦合 8.2 定制线程池的大小 8.3 配置ThreadPoolExecutor 8.4 扩展ThreadPoolExecutor 8.5 并行递归算法 第9章 GUI应用程序 9.1 为什么GUI是单线程化的 9.2 短期的GUI任务 9.3 耗时GUI任务 9.4 共享数据模型 9.5 其他形式的单线程子系统 第3部分 活跃度,性能和测试 第10章 避免活跃度危险 第11章 性能和可伸缩性 第12章 测试并发程序 第4部分 高级主题 第13章 显示锁 第14章 构建自定义的同步工具 第15章 原子变量与非阻塞同步机制 第16章 Java存储模型 附录A 同步Annotation 参考文献 索引
第一章 Java 并发编程实践基础..............................................................1 1.1 进程与线程...................................................................................................................2 1.1.1 进程...................................................................................................................2 1.1.2 线程...................................................................................................................6 1.2 创建多线程...................................................................................................................7 1.2.1 继承Thread 创建线程.....................................................................................8 1.2.2 实现Runnable 接口创建线程..........................................................................8 1.2.3 线程池...............................................................................................................9 1.3 线程的基本控制.........................................................................................................12 1.3.1 使用Sleep 暂停执行......................................................................................13 1.3.2 使用join 等待另外一个线程结束.................................................................13 1.3.3 使用中断(Interrupt)取消线程........................................................................15 1.3.4 使用Stop 终止线程........................................................................................18 1.3.5 结束程序的执行.............................................................................................19 1.4 并发编程实践简述.....................................................................................................19 第二章 构建线程安全应用程序.................................................................1 2.1. 什么是线程安全性...........................................................................................................2 2.2. Servlet的线程安全性.......................................................................................................5 2.3. 同步与互斥.......................................................................................................................9 2.3.1 线程干扰...............................................................................................................9 2.3.2 同步.....................................................................................................................11 2.4. 同步与volatile.................................................................................................................13 2.5. 活性 ................................................................................................................................14 2.6. ThreadLocal变量............................................................................................................15 2.7. 高级并发对象.................................................................................................................19

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uuxiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值