操作系统真相还原_第7章:中断

news2024/11/14 14:48:05

文章目录

  • 7.1 中断分类
    • 外部中断
    • 内部中断
  • 7.2 中断描述符表
    • 中断门描述符
    • 中断描述符表寄存器IDTR
    • 中断处理过程
    • 中断发生时的栈变化
  • 7.3 可编程中断控制器8259A
    • 级联8259A
    • 8259A的编程
  • 7.4 编写中断处理程序
    • 中断初始化过程
    • 中断执行过程
    • 简单的中断处理程序
    • 中断处理程序改进
    • 思考
  • 7.5 8253定时器
    • 8253内部结构
    • 8253工作方式
    • 初始化步骤
  • 7.6 8253定时器的使用

7.1 中断分类

外部中断

分为可屏蔽中断与不可屏蔽中断

内部中断

分为软中断与异常

7.2 中断描述符表

中断门描述符

中断描述符表寄存器IDTR

中断处理过程

CPU外部:外部设备的中断由中断代理芯片接收,处理后将该中断的中断向量号发送到CPU
CPU内部:CPU执行该中断向量号对应的中断处理程序

CPU内部处理细节:
处理器根据中断向量号定位中断门描述符
处理器进行特权级检查(若中断由软中断引发(由用户进程引发)
则需满足,目标代码段特权级>当前特权级>调用门特权级;若中断由外部设备和异常引发
则需满足,目标代码段特权级>当前特权级)
执行中断处理程序

中断发生时的栈变化

7.3 可编程中断控制器8259A

级联8259A



INT:选出优先级最高的中断请求后,发信号通知CPU
INTA:位于8259A,接收来自CPU的中断响应信号
IMR:中断屏蔽寄存器
IRR:中断请求寄存器
PR:优先级仲裁器
ISR:中断服务寄存器,保存正在处理的中断(或被中断的中断)

8259A的编程

8259A的编程分为两部分,初始化和操作两部分
操作ICW寄存器组进行初始化,操作OCW寄存器组对8259A进行操作

ICW寄存器组:

OCW寄存器组:

写入方式:

7.4 编写中断处理程序

中断初始化过程

1、中断描述符表初始化(intr_desc->(gdt-> intr_entry_table) -> idt_table)
2、中断函数注册(idt_table、intr_name)
3、中断代理初始化

中断执行过程

执行过程:
1、intr_desc+中断号*8获取中断描述符
2、从中断描述符中获取段选择子与偏移地址
3、通过段选择子从gdt中获取intr_entry_table基地址
4、基地址结合偏移地址进入中断处理前置程序
5、中断处理前置程序通过中断号从idt_table获取中断处理程序地址进入中断处理程序
6、中断处理程序执行完毕,返回中断处理前置程序,上下文恢复

简单的中断处理程序

代码目录:

百度网盘分享链接:https://pan.baidu.com/s/1I4NuGdMvFj740DIXQ7m5aA
提取码:e60z

编译、链接并写入磁盘:

物理内存使用情况:
系统信息(ards信息)位于0x500
mbr.s位于0x7C00~0x7E00,占用0.5KB
loader.s位于0x2000~0x2800,占用2KB
页目录表位于0x100000~0x101000,占用4KB
缓冲区位于0x70000~0x100000,占用192KB
内核位于0x1500

中断处理程序改进

代码目录:

百度网盘分享链接:https://pan.baidu.com/s/18s8UPgUGpzcHpqhvZitdwA
提取码:1j77

编译、链接并写入磁盘:

启动bochs执行:
./bochs/bin/bochs -f bochs/boot.disk

系统信息(ards信息)位于0x500
mbr.s位于0x7C00~0x7E00,占用0.5KB
loader.s位于0x2000~0x2800,占用2KB
页目录表位于0x100000~0x101000,占用4KB
缓冲区位于0x70000~0x100000,占用192KB
内核位于0x3000
(由于内核变大,会覆盖仍需使用的loader,于是将内核移至0x3000)

思考

关于kernel.S中的中断处理前置程序中为何有的中断压栈0:
因为有的中断返回时会在栈中压入0,而有的不会,所以我们将没有压入0的中断在中断前置程序手动压入0,这样所有中断都会压入0,在中断前置程序中可以统一处理
补充:0实际上是错误码

问题:
自动压入错误码的中断中,其压入中断的时机
我没找到,因为整个中断处理过程都有我们自主控制但我没有发现其压入时机,难道在某一过程隐式压入?

7.5 8253定时器

8253内部结构


CLK:时钟输入信号,每当该引脚收到一个时钟信号,减法计数器就将计数值减1
GATE:门控输入信号,在不同工作方式下GATE的作用不同
OUT:计数器输出信号,根据OUT引脚输出信号判断计数是否完成

计数器:

控制字寄存器:
控制字寄存器是8位大小的寄存器,其操作端口为0x43,也称为模式控制寄存器
控制字格式:

8253工作方式

计数开始的条件:
1、GATE为高电平,由硬件控制
2、计数初值已写入计数器的减法计数器中

工作方式简介:

初始化步骤

1、向控制字寄存器端口0x43写入控制字
2、向计数器写入计数初值

7.6 8253定时器的使用

代码目录:

百度网盘分享链接:https://pan.baidu.com/s/1PORB6Pt4s6OcmbBUOsn32A
提取码:tsxm

编译、链接并写入磁盘:

启动bochs执行:
./bochs/bin/bochs -f bochs/boot.disk

系统信息(ards信息)位于0x500
mbr.s位于0x7C00~0x7E00,占用0.5KB
loader.s位于0x2000~0x2800,占用2KB
页目录表位于0x100000~0x101000,占用4KB
缓冲区位于0x70000~0x100000,占用192KB
内核位于0x3000

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

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

相关文章

PXC高可用集群(MySQL)

1. PXC集群概述 1.1. PXC介绍 Percona XtraDB Cluster(简称PXC) 是基于Galera的MySQL高可用集群解决方案Galera Cluster是Codership公司开发的一套免费开源的高可用方案PXC集群主要由两部分组成:Percona Server with XtraDB(数据…

XXL-JOB

XXL-JOB介绍 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 官网:https://www.xuxueli.com/xxl-job/ 文档:分布式任务调度…

GO中sync 包的 RWMutex 读写互斥锁

文章目录背景RWMutex 简介代码验证多个协程请求读锁 RLock() 和 RLock()读写交错 RLock() 和 Lock()写入的时候读取读取的时候写入请求多个写Lock() 和 Lock()背景 Mutex 互斥锁是严格锁定读和写,如果我们需要单独对读或者写添加锁需要使用 sync包的RWMutex 针对读…

Linux服务器快速安装MySQL数据库

Linux服务器快速安装MySQL数据库 mysql官网下载地址:https://downloads.mysql.com/archives/community/ 推荐使用命令下载安装,比较快 开始安装mysql 1.通过wget下载安装包 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.no…

运动耳机怎样戴不容易掉,运动不容易掉的运动蓝牙耳机推荐

在运动当中总是避免不了大幅度的晃动、跳跃,但是普通的耳机在运动当中佩戴时,耳机会时常出现掉落或者佩戴不牢固的现象发生,下面就给大家分享几款在运动当中佩戴较为稳固的运动蓝牙耳机吧~1、南卡Runner Pro4骨传导蓝牙运动耳机 ¥…

卡尔曼滤波学习

原教程地址:KalmanFilter.NET 卡尔曼滤波广泛应用在雷达系统(目标跟踪)中,但是其实它还可以应用在任何需要估算和预测的领域。 一、一维卡尔曼滤波 通过8个数值例子介绍卡尔曼滤波,涉及平均数、方差、标准差等&#…

解决Spring Data Jpa 实体类自动创建数据库表失败问题

先说一下我遇到的这个问题,首先我是通过maven创建了一个spring boot的工程,引入了Spring data jpa,结果实体类创建好之后,运行工程却没有在数据库中自动创建数据表。 找了半天发现是一个配置的问题! hibernate.ddl-auto节点的配…

【python学习笔记】:条件语句

Python 条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非空(null)值为true,0 或者 null为fa…

Vue 中过滤器 filter 使用教程

Vue 过滤器 filter 使用教程文章目录Vue 过滤器 filter 使用教程一、过滤器1.1 过滤器使用的背景1.2 格式化时间的不同实现1.3 过滤器的使用1.4 过滤器总结一、过滤器 1.1 过滤器使用的背景 过滤器提供给我们的一种数据处理方式。过滤器功能不是必须要使用的,因为它…

DSP_TMS320F28377D_ADC学习笔记

前言 DSP各种模块的使用,基本上就是 GPIO复用配置、相关控制寄存器的配置、中断的配置。本文主要记录本人对ADC模块的学习笔记。TMS320F28377D上面有24路ADC专用IO,这意味着不需要进行GPIO复用配置。 只需要考虑相关控制寄存器和中断的配置。看代码请直…

2023年湖北住建厅八大员各岗位题库精准小题库-启程别

2023年湖北住建厅八大员各岗位题库精准小题库-启程别 住建厅八大员(施工员、质量员、资料员、材料员、机械员、标准员、劳务员) 各岗位题库分2种: 1.住建厅八大员报名之后会有培训任务,完成培训任务学习才能安排考试,…

番外10:使用ADS对射频功率放大器进行非线性测试2(使用带宽20MHz的64QAM信号进行ACLR、EVM、CCDF测试)

番外10:使用ADS对射频功率放大器进行非线性测试2(使用带宽20MHz的64QAM信号进行ACLR、EVM、CCDF测试) 1、基本理论 功率放大器的非线性性能十分重要,特别是对于当前广泛使用的移动设备。由于其各种复杂的信号调制,功…

大数据系统重点

第一章 大数据计算系统概述 1 大数据计算框架概述 计算框架: 一种抽象,在其中提供相应的通用功能供用户编写代码以实现具体功能,从而形成面向应用的软件。 大数据计算框架:面向大数据的计算框架。 Hadoop Hadoop的运行过程 Hadoop的详细…

Android 9.0系统源码_通知服务(三)应用发送状态栏通知的流程

前言 应用发送一个显示在状态栏上的通知,对于移动设备来说是很常见的一种功能需求,本篇文章我们将会结合Android9.0系统源码具体来分析一下,应用调用notificationManager触发通知栏通知功能的源码流程。 一、应用触发状态栏通知 应用可以通…

专题:一看就会的C++类模板讲解 (1)

目录 一.类模板的作用 二.类模板的定义: 三.类模板的声明格式: 四.类模板对象 五.再举一个例子 一.类模板的作用 面向对象的程序设计编程实践中,我们可能会面临这样的问题:要实现比较两个数的大小。明明比较两个数的方法都一样…

小米mix2s刷win11和android双系统

在给电脑安装系统的过程中,可能会因为各种原因出现windows无法安装的情况,我在给小米mix2s安装win11时发现出现了“计算机意外地重新启动或遇到错误,windows无法安装”的情况,下面就来教一下大家两种解决方法,希望可以…

进行新类检测以及概念漂移适应的半监督分类框架SACCOS论文阅读笔记

介绍 本文主要想解决基于聚类的概念漂移检测方法中常做出的强假设问题,即假设同类比较接近,异类比较远离,并且还假设新类别出现时通常会连续大量出现。 针对这些问题,本文提出了一种基于数据流的半监督自适应分类框架SACCOS&…

程序员看过都说好的资源网站,看看你都用过哪些?

程序员必备的相关资源网站一.图片专区1.表情包(1)发表情(2)逗比拯救世界(3)搞怪图片生成(4)哇咔工具2.图标库(1)Font Awesome(2)iconf…

基于vscode开发vue项目的详细步骤教程 2 第三方图标库FontAwesome

1、Vue下载安装步骤的详细教程(亲测有效) 1_水w的博客-CSDN博客 2、Vue下载安装步骤的详细教程(亲测有效) 2 安装与创建默认项目_水w的博客-CSDN博客 3、基于vscode开发vue项目的详细步骤教程_水w的博客-CSDN博客 目录 六、第三方图标库FontAwesome 1 安装FontAwesome 解决报…

vulnhub靶场NAPPING: 1.0.1教程

靶场搭建靶机下载地址:Napping: 1.0.1 ~ VulnHub直接解压双击ova文件即可使用软件:靶机VirtualBox,攻击机VMware攻击机:kali信息收集arp-scan -l上帝之眼直接来看看网站可以注册账号,那就先试试。注册完后登入哦。要输…