从零开始操作系统-07:APIC
创始人
2024-02-08 22:33:34
0

这一节主要主要是APIC。

所需要的文件在Github:https://github.com/yongkangluo/Ubuntu20.04OS/tree/main/Files/Lec7-ExternalInterrupt

历史方法:PIC(Programmable Interrupt Controller)
Intel 8259:

在这里插入图片描述

APIC(Advanced Programmable Interrupt Controller)

APIC是为了多核渠道而规划的。它由两个部分组成IOAPIC和LAPIC,其间IOAPIC一般坐落南桥中用于处理桥上的设备所发生的各种中止,LAPIC则是每个CPU都会有一个。IOAPIC经过APICBUS(现在都是经过FSB/QPI)将中止信息分派给每颗CPU的LAPIC。CPU上的LAPIC可以智能的决议是否承受体系总线上传递过来的中止信息,并且它还可以处理Local端中止的pending、nesting、masking,以及IOAPIC于Local CPU的交互处理。
在这里插入图片描述1. LVT与寄存器
LVT (Local Vector Table)是一组APIC内置寄存器,定义APIC的本地中断至CPU中断向量号的映射。
在这里插入图片描述
2. 初始化AIPC

  • 禁用中断
  • 禁用8259PIC
  • 硬启用LAPIC
  • 初始化LAPIC
  • 设置中断优先级
  • 初始化LVT
  • 软启用LAPIC
  • 初始化I/O APIC
  • 映射IRQ至中断
  • 打开中断

硬启用Local APIC
在这里插入图片描述

movl $0x1B, %ecx
rdmsr
orl $0x800, %eax
wdmsr

中断优先级
在这里插入图片描述
只执行 中断号大于 16 * Process-Priority Class + Process-Priority Sub Class 的中断。

初始化LVT

伪中断 :告诉CPU这个中断时误触发的,是噪声。

软启动LVT APIC
在这里插入图片描述
初始化I/O APIC
Local APIC 的所有寄存器都是映射在内存 0xFFE00000。

使用ACPI来获取 I/O APIC 的地址。

ACPI(Advanced Configuration and Power Management Interface)

过程是: 通过字头签名找到(Root Description Pointer RSDP),通过RSDP找到RSDT表,找到MADT表,找到I/OAPIC Structure的寄存器地址。

Code Time

init_apic()
{//关闭外部中断cpu_disable_interrupt();assert_msg(cpu_has_apic(), "No APIC detected!");//关闭PICpic_disable();//全局启用APICasm volatile ("movl %0, %%ecx\n""rdmsr\n""orl %1, %%eax\n""wrmsr\n"::"i"(IA32_APIC_BASE_MSR), "i"(IA32_APIC_ENABLE): "eax", "ecx", "edx");uint32_t apic_id = apic_read_reg(APIC_IDR) >> 24;uint32_t apic_ver = apic_read_reg(APIC_VER);kprintf(KINFO "ID: %x, Version: %x, Max LVT: %u\n",apic_id,apic_ver & 0xff,(apic_ver >> 16) & 0xff);//设置LVT表apic_setup_lvts();//设置等级apic_write_reg(APIC_TPR, APIC_PRIORITY(2, 0));uint32_t spiv = apic_read_reg(APIC_SPIVR);spiv = (spiv & ~0xff) | APIC_SPIV_APIC_ENABLE  | APIC_SPIV_IV;apic_write_reg(APIC_SPIVR, spiv);apic_setup_timer();
}

具体的代码都在github上。
在这里插入图片描述

相关内容

热门资讯

进修学习心得 进修学习心得(通用15篇)  当我们受到启发,对学习和工作生活有了新的看法时,不如来好好地做个总结,...
读《师德师风教育读本》心得体... 读《师德师风教育读本》心得体会(精选13篇)  在平日里,心中难免会有一些新的想法,将其记录在心得体...
新教育之梦读书心得体会 新教育之梦读书心得体会(精选53篇)  当我们积累了新的体会时,应该马上记录下来,写一篇心得体会,这...
《教育政策法规》心得体会 《教育政策法规》心得体会(通用11篇)  当我们积累了新的体会时,通常就可以写一篇心得体会将其记下来...
教育教学心得随笔 教育教学心得随笔(通用19篇)  随笔,又叫随感、笔记,是一种古老的散文体裁。作为一名教师,我们也可...
营销经验分享心得体会 营销经验分享心得体会(通用9篇)  当我们经过反思,有了新的启发时,写一篇心得体会,记录下来,这样可...
最新争做四有好老师心得体会 最新争做四有好老师心得体会(通用12篇)  当我们受到启发,对学习和工作生活有了新的看法时,不妨将其...
《教师职业道德规范》心得体会 《教师职业道德规范》心得体会  教师作为人类灵魂的工程师,不仅要教好书,还要育好人,各个方面都要为人...
中层管理人员培训心得 中层管理人员培训心得  当在某些事情上我们有很深的体会时,可以将其记录在心得体会中,这样我们可以养成...
《大学》读后感 有关《大学》读后感(精选37篇)  当赏读完一本名著后,大家心中一定是萌生了不少心得,需要回过头来写...
解放思想大讨论心得体会 解放思想大讨论心得体会  一、心得体会是什么  心得体会是指一种读书、实践后所写的感受性文字。语言类...
做一名幸福的教师心得体会 做一名幸福的教师心得体会(精选5篇)  当我们积累了新的体会时,可以记录在心得体会中,这样可以帮助我...
铁路班组长工作心得体会 铁路班组长工作心得体会(精选15篇)  当我们经过反思,有了新的启发时,可以通过写心得体会的方式将其...
教师教学能力提升培训心得体会 教师教学能力提升培训心得体会(通用15篇)  当我们积累了新的体会时,可以寻思将其写进心得体会中,这...
心理课心得体会 心理课心得体会(通用10篇)  当我们心中积累了不少感想和见解时,写一篇心得体会,记录下来,如此可以...
新员工培训个人心得体会 新员工培训个人心得体会范文  第一篇:银行新员工培训心得体会范文  经过这段培训期的生活,我们经历了...
幼儿园家长会心得 幼儿园家长会心得(精选25篇)  当我们有一些感想时,就很有必要写一篇心得体会,这样能够培养人思考的...
6s精益管理心得体会 6s精益管理心得体会(通用9篇)  我们得到了一些心得体会以后,将其记录在心得体会里,让自己铭记于心...
微课培训心得 微课培训心得  微课培训心得  望江县第一小学 童丹菊  在樱花烂漫,菜花金黄的四月,我们在韩主任的...
观看警示教育片心得体会   警示教育简介:  《警示教育》是2008年中国检察出版社出版的图书。本书案例真实,形象生动,是一...