`
insertyou
  • 浏览: 904809 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

【我所認知的BIOS】—>计算机中断系统(1)

阅读更多

【我所認知的BIOS—>计算机中断系统(1

LightSeed

2009-6-8

中断有分为硬件中断和软件中断,顾名思义硬件中断是由计算机硬件产生的中断,类推软件中断是由计算机软件产生的中断。举个例子,当键盘有键按下需要CPU处理的时候就会经过8259产生一个中断,这个中断就是硬件中断。键盘是计算机硬件这个是不可否认的哦^.^DOS中断中的的INT 21H就是软件中断中的一种。一般来说可以这么理解,一切由8259负责产生的中断都是硬件中断。一切硬件中断都是由8259产生。(这里我也存在一个问题,CPU其实也是可以产生中断的,但是这个中断理论上应该不算是硬件中断。所以我也就没有把它规在硬件中断这一类。)鉴于篇幅太长,我分成几个小文章逐一讨论。

1、中断的基础知识

1.1 中断概念

中断是一种发生了一个外部的事件时调用相应的处理程序去处理的过程。见下图

1.2 CPU获取外部设备请求的两种方式

①查询方式

按序依次检查外设对应的状态变化,依据预先设定的规则,判断有请求,有则执行,无则继续。

优点:简单

缺点:加重CPU负担,浪费计算资源

②中断方式

中断是一种发生了一个外部的事件时调用相应的处理程序去处理的过程。

优点:需要用时才找CPU帮忙,能够并行处理多种I/O

缺点:程式设计以及实现过程比较复杂

1.3 早期的中断芯片8259programable interrupt controller

关于8259的背景资料以及其他资料不赘述,在此提纲挈领式地说一下它的背景。

编程中断控制器8259A
Intel8259A
是一种可编程中断控制器PIC,它是为管理Intel80808085Intel80868088CPU的可屏蔽中断而设计的,后来又被用于Intel80286CPU。在高档Pc系列机中,它的逻辑被集成到多功能接口芯片中。

8259A
具有以下主要功能:

具有8级优先权控制,通过级联可扩展至64级优先权控制(PC上只扩展到16级);

每一级中断都可以屏蔽(笔者:来了中断也不汇报给CPU)或允许;

在中断响应周期,8259A可提供相应的中断类型号(笔者:供CPU计算得到中断向量号),从而能迅速转入中断服务程序;

④8259A
有几种中断管理模式,可以通过编程进行选择。

主要谈谈它关于中断请求的这个过程的一个详细论述,首先看看单个8259A对于中断的处理过程。


1 8259A中断响应流程图解

中断的过程可以简单地描述如下:(假如是KBD发生中断请求)

键盘发生中断请求;

8259A的中断请求寄存器做相应记录;

优先级分析器做出判决,(假设键盘的优先级比当前处理的中断优先级更高);

8259A通过INTRCPU发出中断请求;

CPU准备相应,回发一个INTA#8259A,此时8259A会做出相应的寄存器处理;

8259A会把中断类型码放到DATABUS上,CPU解析然后进入ISR CPU再发一个INTA#8259A,相应一系列动作完成。

整个过程详见流程图四,图解见图1。更多的细节没有描述出来。

1.4 PIC的级联

8259PC中都是成对出现的,因为一直以来为了解决硬件中断号数量上的不够所以考虑到了两块8259级联。(为什么不用三块呢?其实两块就足够了,又何必去浪费资源呢。)PIC级联的基本HW图见图1

1 cascade interrupt controller

当中断发生后CPU的过程 见如流程图三。

28259A7个寄存器

7个寄存器被分为两组,第一组寄存器为4个,它们叫做初始化命令字ICWinitialiaztion command word)分别为ICW1 ~ ICW4 第二组寄存器为3个,他们用来容纳操作命令字OCWoperation command word)分别称为OCW1 ~ OCW4 BIOS在初始化时修改的就是ICW这几个,至于OCW是由应用程序设定的,他们用来对中断处理过程作动态控制。在一个系统运行过程中,操作命令字可以被多次设置。

8259A是中断系统的核心器件,对它的初始化编程要涉及中断系统的软、硬件的许多问题,而且一旦完成初始化,所有硬件中断源和中断处理程序都必须受其制约。

2.1 ICW1 格式

2 ICW1格式

ICW1 的格式如图2所示,但是还必须要申明一点的是,ICW1initial的过程中port地址必须是偶地址,而ICW2 ~ ICW4 必须是奇地址。比如:20H21H之分。

2.2 ICW2 格式

3 ICW2格式


ICW2 是中断类型码的初始化命令字,对于全部的IRQ5位都是相同的,也因此被称为base address。举个例子,比如说base address01001B=9D),那么当ICW2 的值是01001001B)的时候,它所代表的中断向量号就是9+1=10,这时就产生了IRQ 10的中断。这种“寻址”的方式和其他的方式一样,[2:0]是偏移。如图3

2.3 ICW3 格式

ICW3 只有在一个系统中包含多片8259A时才有意义。而系统中多片8259A是由ICW1 D1SNGL)来指示的,所以只有当SNGL=0时,才设置ICW3 。并且ICW3 在主片和从片中的格式还不一样。在主片中格式如图4

D7D6 D5 D4 D3 D2 D1 D0

IR7

IR6

IR5

IR4

IR3

IR2

IR1

IR0

4 ICW3 Master中的格式

Slave 8259A接在master的哪个pinIRx就被置1(当然也可以接多片的)。而在slave中格式如图5

D7 D6 D5 D4D3 D2 D1 D0

0

0

0

0

0

IR2

IR1

IR0

5 ICW3 Slave中的格式

在从片中,D7~D3不用,为了兼容全部被清零。D2~D0则填接到Master上的第几pin。比如接到第5 pin时,ICW3 的值是00000101B

2.4 ICW4 格式

6 ICW4 格式

ICW4用于设定8259A的工作方式,其格式如图6所示。说的比较清楚基本不用解释了。

2.5 关于OCW

initial 8259A的过程中BIOS不涉及它们,(当然不是说它们不重要,理解整个8259A的工作流程是应该的,也比较简单这里就不赘述了)所以这里就略写了。

OCW1 是中断屏蔽操作命令字,顾名思义可知其作用了。OCW2用于设置中断优先级方式和中断结束方式。OCW3用于设置或清除特殊屏蔽方式和读取寄存器的状态。

38259A的初始化流程

由于在ICW1 中的SNGL位有明确的严格的initial 8259的顺序,那么只有直接写进去就OK了(BIOS中是直接被置为1了,故什么都不用考虑了)。Initial的流程图见流程图2。

典型的initial程序如下:(我手上的8259A的端口地址为Master 20HSlave A0H

;------------------------------------------主片8259A的初始化程序为

  MOV   AL, 00010001B   ; 级联, 边沿触发, 需要写ICW4

  OUT   20H, AL       ; ICW1

  MOV   AL, 00001000B   ; 中断类型号8H

  OUT   21H, AL       ; ICW2

  MOV   AL, 00000100B   ; 主片的IR2引脚接从片

  OUT   21H, AL       ; ICW3

  MOV   AL, 00000001B ;非特殊完全嵌套,非缓冲,非自动结束,80x86模式

  OUT   21H, AL       ; ICW4

;------------------------------------ -----从片8259A初始化程序为

  MOV   AL, 00010001B   ; 级联, 边沿触发, 需要写ICW4

  OUT   A0H, AL       ; ICW1

  MOV   AL, 01110000B   ; 中断类型号70H

  OUT   A1H, AL       ; ICW2

  MOV   AL, 00000010B   ; 接主片的IR2引脚

  OUT   A1H, AL       ; ICW3

  MOV   AL, 00000001B ;非特殊完全嵌套,非缓冲,非自动结束,80x86模式

  OUT   A1H, AL        ; ICW4

流程图2

分享到:
评论

相关推荐

    【我所认知的 BIOS 】实模式&保护模式切换实例

    在计算机系统中,BIOS(基本输入输出系统)扮演着至关重要的角色,它是一组固化在计算机主板上ROM芯片中...通过阅读《我所认知的 BIOS 》实模式&保护模式切换实例文档,可以更直观地学习这一过程,并通过实践加深理解。

    Linux系统启动报告

    - BIOS会在内存的最低地址0x00000开始的位置占用1KB的空间(0x00000~0x003FF)来构建中断向量表,紧接着的256KB内存空间(0x00400~0x004FF)则用于构建BIOS数据区。 - 中断向量表包含了256个中断向量,每个中断...

    计算机组成原理课件/组成原理

    本课件集合了丰富的教学内容,旨在帮助学习者深入理解计算机内部的工作流程,从而提升对计算机系统的整体认知。 在计算机组成原理中,我们首先会接触到的是计算机的基本组成部分,包括中央处理器(CPU)、内存、...

    计算机组成原理 唐朔飞 第二版

    7. **计算机系统组装**:讨论了如何将这些组件集成到一个完整的计算机系统中,包括系统启动过程、BIOS(基本输入输出系统)和CMOS(互补金属氧化物半导体)设置。 8. **并行计算与多核技术**:随着技术的发展,多核...

    给操作系统捋条线1

    在“给操作系统捋条线1”这个系列中,作者试图通过一系列的文章,全面解析操作系统的各项功能和机制,使读者能有一个清晰的理解。 首先,系列从计算机启动开始,介绍了从按下电源键到操作系统内核加载的全过程。这...

    自己动手写操作系统电子书+源代码

    《自己动手写操作系统》是一本深入浅出的教程,旨在帮助读者理解操作系统的运作原理,并通过实际编写操作系统来提升技术认知。这本书不仅包含了丰富的理论知识,还提供了完整的源代码,让学习过程更具实践性。 操作...

    嵌入式系统开发之路.pdf

    - **U-boot**:介绍了一个系统启动的本质,打破了传统的BIOS-HardDisk-Grub/Lilo-Windows/Linux的启动流程认知,展示了启动过程的灵活性和多样性。 - **RTEMS、eCOS、RedBoot**:介绍了几种小型RTOS和bootloader,如...

    福师大操作系统实验报告

    福建师范大学的“操作系统”课程旨在让学生深入理解操作系统的基本原理,并通过实践操作加深理论认知。实验报告作为课程的重要组成部分,能够帮助学生巩固理论知识,提升实际动手能力。 在“福师大操作系统实验报告...

    《30 天自制操作系统》读书笔记.zip

    这本书通过实践的方式,帮助读者深入理解操作系统的原理和实现过程,从而提升对计算机系统本质的认知。 在阅读这本书的过程中,你可能会接触到以下几个关键知识点: 1. **操作系统的定义与功能**:操作系统是...

    怎样写一个简单的操作系统.docx

    虽然这个操作系统仅是一个引导程序,但它能帮助学习者建立起对操作系统开发的基础认知。 **必备知识** 开始之前,你需要具备一定的编程经验,最好是熟悉C语言或类似的底层语言,因为它们能让你更好地理解内存管理...

    汇编-课程设计

    在IT领域,汇编语言是一种低级编程语言,它与机器语言紧密相关,直接对应于计算机硬件的指令集。...通过这个项目,学习者不仅能深化对汇编语言的理解,也能增强对操作系统和计算机硬件之间关系的认知。

    高教类课件:微机原理与接口技术(第2版).zip

    通过深入学习《微机原理与接口技术》,学生可以具备分析和解决计算机硬件问题的能力,设计和实现简单的硬件接口,同时培养计算机系统级的思维方式,对整个计算机系统的运作有更全面的认知。这门课程的第二版可能更新...

    18308045_谷正阳_实验二1

    4. BIOS(基本输入输出系统)调用是早期计算机系统中的关键部分,它们提供了一套低级别的硬件接口,如磁盘读写、屏幕输出等。例如,BIOS的int 13h中断可以用来读写硬盘或软盘,int 10h中断则用于控制显示器。 实验...

    linux内核注释

    在计算机科学领域,Linux内核作为开源操作系统的核心,一直是学习和研究的重点。本书《Linux内核完全注释》由赵炯撰写,针对的是Linux内核的早期版本0.11(0.95),尽管这一版本相对现代版本而言较为陈旧,但它依然...

    汇编语言编写彩色圆 在debug工具上运行显示

    - 开始部分通常设定视频模式,这可能需要调用BIOS中断如INT 10H。 - 接着,设置颜色表,定义颜色。 - 主程序部分将执行画圆算法,逐行逐列检查并设置像素。 - 结束时可能需要恢复原来的视频模式或清屏。 6. **...

Global site tag (gtag.js) - Google Analytics