捷达怎么样油耗多少,捷达怎么样很多人还不知道,现在让我们一起来看看吧!1、以下来自网络。2、希望对...
捷达怎么样油耗多少,捷达怎么样很多人还不知道,现在让我们一起来看看吧!
1、以下来自网络。
2、希望对你有帮助。
3、Linux通过使用各种不同的硬件来执行许多不同的任务。
4、包括驱动显示器的视频设备、驱动硬盘的IDE设备等。
5、我们可以同步驱动这些设备,也就是说,我们可以发送一个请求来执行一组操作(例如,将一段内存数据写入磁盘),然后等待执行完成。
6、这种方法虽然可以,但是效率很低,因为操作系统每次操作都要等待完成,所以操作系统会花很多时间在“忙等待”上。
7、更有效的方法是执行请求,然后继续其他任务。
8、当设备完成请求时,它通过中断通知操作系统。
9、这样,系统中可以同时存在多个未完成的任务。
10、不管CPU在做什么,为了中断设备,必须提供一些必要的硬件支持。
11、几乎所有的通用处理器,如阿尔法AXP,都使用类似的方法。
12、CPU的一些物理引脚被设计来改变电压(例如,从5V到-5V ),以便使CPU停止其当前的工作,并开始执行一个特殊的代码:中断处理程序。
13、其中一个引脚连接到周期时钟,每千分之一秒接收一次中断,而其他引脚可以连接到系统中的其他设备,如SCSI控制器。
14、中断控制器通常用于系统中,在向CPU中断引脚发送信号之前对设备中断进行分组。
15、这可以节省CPU上中断引脚的数量,增加系统设计的灵活性。
16、该中断控制器通过屏蔽和状态寄存器控制中断。
17、通过设置屏蔽寄存器中的一些位,可以使能或关闭中断,并且可以通过读取状态寄存器来获得系统的当前活动中断。
18、系统中的一些中断是通过硬连线连接的。
19、例如,实时时钟的周期性定时器可以固定地连接到中断控制器的引脚3。
20、连接到控制器的其他引脚只能由插入特定ISA或PCI插槽的控制卡来确定。
21、例如,中断控制器中的引脚4可能连接到PCI插槽号0,但某一天以太网卡可能被插入到该插槽中,几天后它将被替换为SCSI控制器。
22、简而言之,每个系统都有自己的中断路由机制,操作系统应该能够灵活处理这些情况。
23、大多数现代通用微处理器使用近似方法来处理中断。
24、当硬件中断发生时,CPU将停止执行当前指令,并跳转到内存中包含中断处理代码或中断处理代码的指令分支的位置继续执行。
25、这些代码以一种特殊的CPU模式执行:中断模式。
26、通常,在这种模式下不会发生其他中断。
27、但也有例外;有些CPU会对中断的优先级进行分类,然后可能会出现优先级更高的中断。
28、这意味着必须仔细编写第一级中断处理代码,中断处理进程在进入中断处理进程之前,应该有自己的堆栈来存储CPU执行状态(所有CPU的公共寄存器和上下文)。
29、有些CPU有一组特殊的寄存器——它们只存在于中断模式下,在中断模式下可以使用这些寄存器来保存执行所需的执行上下文。
30、当中断被处理时,CPU状态将被重新存储,中断也将被释放。
31、CPU将继续做中断发生前必须做的事情。
32、中断处理代码越精炼越好,会减少操作系统阻塞中断的时间和频率。
33、7.1可编程中断控制器系统的设计者可以自由选择中断结构。
34、一般来说,Intel 82C59A-2 CMOS可编程中断控制器或其衍生产品将用于IBM PC兼容性。
35、该控制器在PC诞生之前就已生产,其可编程性体现在位于众所周知的ISA存储器位置的寄存器中。
36、非英特尔系统,如基于阿尔法AXP的PC,不受这些架构的限制,它们经常使用各种中断控制器。
37、图7.1显示了两个级联的8位控制器,每个控制器都有一个屏蔽和中断状态寄存器:PIC1和PIC2。
38、两个屏蔽寄存器分别位于ISA I/O空间0x21和0xA1,而状态寄存器位于0x20和0xA0。
39、该屏蔽寄存器中的特定位将使能中断,写入0将屏蔽该中断。
40、不幸的是,中断屏蔽寄存器是只写的,所以你不能读取你写的值。
41、这也意味着Linux必须保留写入屏蔽寄存器的值的本地副本。
42、这些保存的值在一般中断使能和屏蔽程序中被修改,并且这些全屏蔽码每次都被写入寄存器。
43、当产生中断时,中断处理代码将读取这两个中断状态寄存器(ISR)。
44、它将0x20中的ISR视为16位中断寄存器的低8位,将0xA0中的ISR视为高8位。
45、这样,0xA0中ISR位1上的中断将被视为系统中断9。
46、PIC1的第二位不能用于其他目的,因为它用于级联PIC2。
47、PIC2上的任何中断都会导致PIC1的第二位被置位。
48、7.2初始化中断处理数据结构内核的中断处理数据结构是在设备驱动请求系统中断控制时建立的。
49、为此,设备驱动程序使用一组Linux内核函数来请求、启用和屏蔽中断。
50、每个设备驱动程序将调用这些程序来注册它的中断处理例程地址。
51、一些中断是由传统的PC架构固定的,因此驱动程序只需要在初始化时请求它的中断。
52、软盘驱动程序是这样使用的;它的中断号总是6。
53、有时设备驱动程序可能不知道设备使用的中断号。
54、这对于PCI设备驱动程序来说不是什么大问题,它们总能知道自己的中断号。
55、但是,没有方便的方法来获取ISA设备驱动程序的中断号。
56、Linux通过让设备驱动程序检测它们的中断号来解决这个问题。
57、设备驱动程序首先强制设备产生一个中断。
58、启用系统中所有未分配的中断。
59、此时,设备引起的中断可以通过可编程中断控制器发出。
60、然后,Linux读取中断状态寄存器,并将其内容返回给设备驱动程序。
61、否定结果0表示在该测试中发生了一个或多个中断。
62、然后,驱动程序将关闭检测并屏蔽所有未分配的中断。
63、如果ISA设备驱动程序成功找到设备的IRQ号,它就可以像往常一样请求控制设备。
64、基于PCI的系统比基于ISA的系统更具动态性。
65、ISA设备使用的中断引脚通常由硬件设备上的跳线设置,并固定在设备驱动程序中。
66、当系统启动并初始化PCI时,PCI设备由PCI BIOS或PCI sub更新。
67、系统来分配中断。
68、每个PCI设备可以使用A,B,C或D之中的任意中断。
69、这个中断在设备建立时确定且通常多数设备的缺省中断为 A。
70、PCI槽中的PCI中断连线A,B,C和D被正确路由到中断控制器中。
71、所以PCI槽4上的引脚A可能被路由到中断控制器上的引脚6,PCI槽7上的引脚B被路由到中断控制器上的引脚7等等。
72、 如何路由PCI中断完全取决于特定的系统,一般设置代码能理解PCI中断路由拓扑。
73、在基于Intel的PC上由系统BIOS代码在启动时作这些设置而在不带BIOS(如Alpha AXP)系统中由Linux核心来完成这个任务。
74、 PCI设置代码将每个设备对应的中断控制器的引脚号写入PCI配置头中。
75、通过得到PCI中断路由拓扑及设备的PCI槽号和PCI中断引脚设置代码可以确定其对应的中断引脚(或IRQ)号。
76、设备使用的中断引脚被保存在此设备的PCI配置头中为此目的保留的中断连线域中。
77、当运行设备驱动时这些信息被读出并用来控制来自Linux核心的中断请求。
78、 系统中可能存在许多PCI中断源,比如在使用PCI-PCI桥接器时。
79、这些中断源的个数可能将超出系统可编程中断控制器的引脚数。
80、此时PCI设备必须共享中断号-中断控制器上的一个引脚可能被多个PCI设备同时使用。
81、Linux让中断的第一个请求者申明此中断是否可以共享。
82、中断的共享将导致irq_action数组中的一个入口同时指向几个irqaction数据结构。
83、当共享中断发生时Linux将调用对应此中断源的所有中断处理过程。
84、没有中断需要服务时,任何共享此中断(所有的PCI设备驱动)的设备驱动都要准备好其中断处理过程的调用。
85、 7.3 中断处理 图7.2 Linux中断处理数据结构 Linux中断处理子系统的一个基本任务是将中断正确路由到中断处理代码中的正确位置。
86、这些代码必须了解系统的中断拓扑结构。
87、例如在中断控制器上引脚6上发生的软盘控制器中断必须被辨认出的确来自软盘并路由到系统的软盘设备驱动的中断处理代码中。
88、Linux使用一组指针来指向包含处理系统中断的例程的调用地址。
89、这些例程属于对应于此设备的设备驱动,同时由它负责在设备初始化时为每个设备驱动申请其请求的中断。
90、图7.2给出了一个指向一组irqaction的irq_action指针。
91、每个irqaction数据结构中包含了对应于此中断处理的相关信息,包括中断处理例程的地址。
92、而中断个数以及它们被如何处理则会根据体系结构及系统的变化而变化。
93、Linux中的中断处理代码就是和体系结构相关的。
94、这也意味着irq_action数组的大小随于中断源的个数而变化。
95、 中断发生时Linux首先读取系统可编程中断控制器中中断状态寄存器判断出中断源,将其转换成irq_action数组中偏移值。
96、例如中断控制器引脚6来自软盘控制器的中断将被转换成对应于中断处理过程数组中的第7个指针。
97、如果此中断没有对应的中断处理过程则Linux核心将记录这个错误,不然它将调用对应此中断源的所有irqaction数据结构中的中断处理例程。
98、 当Linux核心调用设备驱动的中断处理过程时此过程必须找出中断产生的原因以及相应的解决办法。
99、为了找到设备驱动的中断原因,设备驱动必须读取发生中断设备上的状态寄存器。
100、设备可能会报告一个错误或者通知请求的处理已经完成。
101、如软盘控制器可能将报告它已经完成软盘读取磁头对某个扇区的正确定位。
102、一旦确定了中断产生的原因,设备驱动还要完成更多的工作。
103、如果这样Linux核心将推迟这些操作。
104、以避免了CPU在中断模式下花费太多时间。
105、在设备驱动中断中我们将作详细讨论。
本文到此结束,希望对大家有所帮助。
文章内容来源于网络,仅供参考!本文链接:https://www.chaoduyl.com/yiyanyiyu/d80e37fa0d887316.html