Linux 051287161312 xlanchenustc edu cn Autumn 2010 8259
- Slides: 101
Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512-87161312) xlanchen@ustc. edu. cn Autumn 2010
8259 A:设置起始中断向量号 参见init_8259 A 10/21/2021 Linux OS Analysis 26
8259 A:禁止/激活某个IRQ线 取变量的第x个字节 10/21/2021 Linux OS Analysis 27
10/21/2021 Linux OS Analysis 46
进入保护模式前IDT表的初始化 10/21/2021 Linux OS Analysis 47
10/21/2021 Linux OS Analysis 49
Start_kernel中的IDT表初始化 trap_init() init_IRQ() 阅读native_init_IRQ 10/21/2021 Linux OS Analysis 50
10/21/2021 Linux OS Analysis 52
10/21/2021 Linux OS Analysis 53
阅读error_code 10/21/2021 Linux OS Analysis 54
此时的内核态堆栈 Error_code拷贝完后,被设为-1 esp 10/21/2021 ss esp eflag cs eip orig_eax: 0 fs es ds eax ebp edi esi edx ecx ebx error_code Pointer 返回地址 硬件自动保存 Thread_info 55 Linux OS Analysis 用于传递 Errorc_ode 高地址 用于传递 do_xxx,最后为 __KERNEL_PERCPU error_code 代码手 压入 pt_regs指针 低地址
异常处理 当C函数终止时,根据 堆栈中的返回地址, CPU从call *%edi这条指令 的下一条指令开始继续执行, 即: jmp ret_from_exception esp 10/21/2021 Linux OS Analysis ss esp eflag cs eip orgi_eax(-1) fs es ds eax ebp edi esi edx ecx ebx error_code Pointer 返回地址 进程描述符 57 硬件自动保存 将由iret指令 负责弹出 前面的汇编 手 压入, 将由restore_all 负责弹出
中断处理示意图 10/21/2021 Linux OS Analysis 65
Linux中的中断向量分配表 10/21/2021 Linux OS Analysis 66
Interrupt数组的定义(比较隐晦) 10/21/2021 Linux OS Analysis 69
irq_chip数据结构 为特定PIC编写的低级I/O例程 例如8259的 为一个中断设置irq_chip set_irq_chip_and_handler_name等 set_irq_chip 10/21/2021 Linux OS Analysis 74
例如:在init_IRQ(即native_init_IRQ)中,调用 的pre_intr_init_hook可能如下定义 10/21/2021 Linux OS Analysis 75
10/21/2021 Linux OS Analysis 76
又如:make_8259 A_irq 10/21/2021 Linux OS Analysis 77
irq_flow_handler_t __set_irq_handler设置handle_irq数据项 handle_level_irq 8259 handle_simple_irq handle_IRQ_event handle_fasteoi_irq action->handler handle_edge_irq handle_percpu_irq 10/21/2021 Linux OS Analysis 78
Action handle 在setup_irq时,给定 例如 10/21/2021 Linux OS Analysis 79
小结:中断处理过程 在调用do_IRQ之前,要为中断处理程序保存寄 存器 在interrupt数组中定义的中断处理程序中 每个入口地址转换成汇编码是如下的一些指令 interrupt[irq]: pushl $~(vector) jmp common_interrupt 这里对所有的中断处理程序都执行相同的代码 common_interrupt: SAVE_ALL movl %esp, %eax call do_IRQ jmp $ret_from_intr 10/21/2021 Linux OS Analysis 80
ss esp eflag cs eip $~(vector) fs es ds eax ebp edi esi edx ecx ebx 返回地址 Pointer 硬件自动保存 do_IRQ()的函数声明 SAVE_ALL 从do_IRQ返回后要执行的指令地址ret_from_intr esp Thread 10/21/2021 info do_IRQ执行时内核态的堆栈 Linux OS Analysis 81
中断处理 do_IRQ()函数的等价代码: int irq = ~regs->orig_ax; //1 irq_desc[irq]->handle_irq(irq, desc); //2 mask_ack_irq(desc, irq); //3 handle_IRQ_event(irq, ®s, irq_desc[irq]. action); //4 irq_desc[irq]. handler->end(irq); //5 处理下半部分 //6 1句取得对应的中断向量 2句调用中断处理句柄,对 8259,就是handle_level_irq 3句应答PIC的中断,并禁用这条IRQ线。(为串行处理同类型中断) 4调用handle_IRQ_event()执行中断服务例程,例如timer_interrupt 5句通知PIC重新激活这条IRQ线,允许处理同类型中断 10/21/2021 Linux OS Analysis 82
中断服务例程 一个中断服务例程实现一种特定设备的操作, handle_IRQ_evnet()函数依次调用这些设备例程 这个函数本质上执行了如下核心代码: do{ action->handler(irq, action->dev_id, regs); action = action->next; }while (action) � 10/21/2021 Linux OS Analysis 83
在softirq_vec中定义 优先级对应于softirq_vec的 下标 软中断函数 及其参数 10/21/2021 Linux OS Analysis 88
软中断的初始化 初始化软中断函数 分别在softirq_init和net_dev_init、blk_dev_init等 中初始化 例如 10/21/2021 Linux OS Analysis 89
软中断的触发 raise_softirq 10/21/2021 Linux OS Analysis 90
Ksoftirqd内核线程 …… …… 10/21/2021 Linux OS Analysis 93
Tasklet Tasklet是I/O驱动程序中实现可延迟函数的首选 方法 建立在HI_SOFTIRQ和TASKLET_SOFTIRQ等软 中断之上 Tasklet和高优先级的tasklet 分别存放在tasklet_vec和tasklet_hi_vec数组中 数组的每一项针对一个CPU,代表这个CPU上的tasklet列表 分别由tasklet_action和tasklet_hi_action处理 找到CPU对应的那个项,遍历执行 10/21/2021 Linux OS Analysis 94
0:enable >0:disable 10/21/2021 Linux OS Analysis 95
激活tasklet的方法 即将tasklet插入到合适的链表中 Tasklet_schedule Tasklet_hi_schedule 10/21/2021 Linux OS Analysis 97
作队列和 作线程 相关数据结构 workqueue_struct;cpu_workqueue_struct work_struct;delayed_work 入列 queue_work;queue_delayed_work 作队列的处理 run_workqueue worker_thread 10/21/2021 Linux OS Analysis 98
作业 名词解释:故障和陷阱 10/21/2021 Linux OS Analysis 101
- Pic8259
- Features of 8259
- Pic 8259
- Linux security modules
- Uclinux
- Edu.sharif.edu
- Autumn summer
- Consonance poetic device
- The happy autumn fields
- Autumn landscape tiffany
- Spring summer winter
- "israeli autumn"
- Words that rhyme with autumn
- Taylor paxton
- Spring is green song
- Rhyme royal example
- Every autumn comes the bear
- 59 swans poem
- Summer winter rainy spring autumn
- Jackral
- Aquarius water bearer meaning
- First day of autumn 2014
- Hello goodbye poem
- Autumn is a season of mellow
- Autumn rhythm (number 30) 1950
- Last autumn i was in india during diwali
- The wild swans at coole imagery
- Autumn rhythm 1950
- Matt monro autumn leaves
- What happens in autumn
- Us digital millennium copyright act ethics
- Autumn unscramble
- Autumn leaves metaphor
- Spring, summer, autumn and winter
- "israeli autumn"
- Whatever the weather tongue twister
- Autumn rhythm (number 30) 1950
- Thanksgiving facts
- Linux kernel debugging techniques
- Cyusb linux
- Vantagens e desvantagens do linux
- Linux terminal api
- Linux ofed
- Program linux
- R in bioinformatics
- Linux 1991
- Zipf plot
- Shrijana singh
- Usermodelinux
- List of external commands in linux
- Open source summit japan
- Multilevel page tables
- Lfs linux from scratch
- Request tracker system requirements
- Drdos 툴
- Asai linux
- Ts7260
- Cst linux
- Linux process control block
- Webcam server linux
- Embedded linux development using eclipse
- Cmpxchg
- Linux
- Utian ayuba
- Kernel synchronization in linux
- Forcepoint threatseeker
- Linux network troubleshooting
- Ibm linux one specs
- Distrowatch mint
- Linux deep dive
- Uhu linux
- Link file linux
- Suse linux 9
- High performance computing cluster linux
- Ezgo linux
- Linux challenges
- Compile linux kernel with clang
- Windows like linux os
- Diff bw unix and linux
- Petra lovka
- Linux kernel hacking
- Perbedaan unix dan linux
- Linux address space
- Koordinat yang dipakai dalam sistem operasi linux adalah
- Linux kernel internals
- Pplive linux
- Stevens unix network programming
- Linux outline
- Client léger client lourd
- Linux dibuat oleh
- Linux design principles
- Linus torvalds on where will linux
- Linux roadmap presentation
- Tails operációs rendszer
- Dns nis
- Linux kernel longterm
- Linux history timeline
- Components of linux system
- Linux device model
- Low level programming language
- Scsts
- Eclipse linux kernel