易截截图软件、单文件、免安装、纯绿色、仅160KB

linux 2.6源代码情景分析笔记之中断与异常2

高级可编程控制器
如果系统只有一个cpu,主pic输出线以直截了当的方式连接到cpu的intr引脚。如果系统中包含两个或多个cpu,就需要更加复杂的pic.
intel从p3开始引入i/o高级可变成控制器(APIC)组件。80x86微处理器当前所有的cpu都含有一个本地apic。每个本地apic都有32位寄存器,一个内部时钟,一个本地定是设备以及为本地apic中断保留的两条额外的irq线lint0和lint1。所有本地apic都连接到一个外部i/o apic,形成一个多apic系统。
i/o apic的组成:一组24条irq线,一张24项的中断定向表(interrupt redirection table),可编程寄存器,以及通过apic总线发送和接收apic信息的一个信息单元,中断优先级并不与引脚号相关联:中断重定向表中的每一项都可以被单独变成以指明中断向量和优先级,目标处理器以及选择处理器的方式。重定向表中的信息用于把每个外部irq 信号转换为一条消息,通过apic总线把消息发送给一个或者多个本地apic单元。
来自外部硬件设备的中断请求以两种方式在可用cpu之间分发:
1静态分发:irq信号传递给重定向表相应项中所列出的本地apic。中断立即传递给一个特定的cpu,或者一组cpu,或者所有cpu.
2动态分发:如果处理器正在执行最低优先级的进程,irq信号就传递给这种处理器的本地apic.
每个本地apic都有一个可编程任务优先级寄存器(task priority register)trr用来计算当前运行进程的优先级。intel希望在操作系统内核中通过每次进程切换对这个寄存器进行修改。
如果两个或者多个cpu共享最低优先级,就利用仲裁技术在这些cpu之间分配负荷。在本地apic的仲裁优先级寄存器中,给每个cpu都分配一个0-15范围内的数值。
每当中断传递给一个cpu时,其相应的仲裁优先级就自动设置为0,而其他每个cpu的仲裁优先级都增加1.当仲裁优先级寄存器大于15时,就把它设置为获胜cpu的前一个仲裁优先级加1.因此,中断以轮转方式在cpu之间分发,且具有相同的任务优先级。
除了在处理器之间分发中断外,多apic系统还允许cpu产生处理器间中断。当一个cpu希望把中断发给另一个cpu时,就在自己本地apic的中断指令寄存器(interrupt command register,ICR)中存放这个中断向量和目标本地 APIC标识符。然后通过apic总线向目标本地apic发送一条消息,从而向自己的cpu发出一个相应的中断。
异常:80x86微处理器发布了大约20种不同的异常。内核必须为每种异常提供一个专门的异常处理程序。
中断向量表(interrupt descriptor table IDT)是一个


相关文档:

实战Linux Bluetooth编程 (七) SDP协议

Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......

Linux各发行版本简介

转载自:http://bbs.dp168.com/thread-23703-1-1.html
Redhat
简介:
Red Hat Linux是商业上运作最成功的一个Linux发行套件,普及程度很高,由Red Hat公司发行。
Red Hat
Linux可算是一个“中年的”Linux发行套件,1.0版本于1994年11月3日发行。虽然其历史不及Slackware般悠久,但比起很多的
Linux发行套件 ......

linux c mkdir创建递归目录

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define err(msg) perror(msg)
static void mkdirs(const char *dir)
{
        char tmp[1024];
        char *p;
 &nbs ......

Linux编程

一、Linux设计特点:多用户(多个用户可以同时登录,同一用户可以登录多次);多任务(同一程序可以有多个线程或进程并发执行);分时。
二、C开发环境:开发工具(包括编译器、连接器、gcc)、工程管理软件(make)、编辑器、分析调试工具gdb、函数库、版本控制系统CVS。(Perl不需要编译)。
三、在线文档:
1.manpage ......

Linux发送arp请求与接收arp响应

Linux 中获得本机网卡MAC地址很简单,ioctl()就OK。可如何获得局域网其他主机的MAC地址呢…链路层广播ARP请求,然后接收ARP响应。实现介个功能其实已有现成三方库可用,如libnet。不过想加深对协议的理解和Linux网络编程API的理解,jiayi 还是决定用Linux的PF_PACKET自己实现,改啊改,终于成功~以下是大体思路
1. ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号