自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

聊聊如何從復(fù)雜中斷簡單化

商務(wù)辦公
arm64的異常向量表vectors中設(shè)置了各種異常的入口,目前有效的異常入口有兩個同步異常el0_sync,el1_sync和兩個異步異常el0_irq,el1_irq,其他異常入口暫時都invalid。中斷屬于異步異常,所以本文重點(diǎn)關(guān)注el0_irq和el1_irq。

 [[386223]]

本文轉(zhuǎn)載自微信公眾號「人人都是極客」,作者布道師Peter。轉(zhuǎn)載本文請聯(lián)系人人都是極客公眾號。

中斷處理流程

arm64的異常向量表vectors中設(shè)置了各種異常的入口,目前有效的異常入口有兩個同步異常el0_sync,el1_sync和兩個異步異常el0_irq,el1_irq,其他異常入口暫時都invalid。中斷屬于異步異常,所以本文重點(diǎn)關(guān)注el0_irq和el1_irq。

通過上圖,我們可以看出中斷的處理分為三個部分,保護(hù)現(xiàn)場,中斷處理,恢復(fù)現(xiàn)場。其中el0_irq和el1_irq的具體實(shí)現(xiàn)略有不同,但處理流程大致是相同的。接下來我們以el0_irq為例對上面三個步驟進(jìn)行梳理。

保護(hù)現(xiàn)場

將CPU寄存器按照pt_regs結(jié)構(gòu)體的定義將第一現(xiàn)場保存到棧上。

  1. 保存PSTATE到SPSR_ELx寄存器;
  2. 將PSTATE中的D A I F全部屏蔽;
  3. 保存PC寄存器的值到ELR_ELx寄存器;

中斷處理

如上圖,大概主要有如下三個動作:

  1. 進(jìn)入中斷棧;
  2. 執(zhí)行中斷控制器的handle_arch_irq;
  3. 退出中斷棧;

在處理之前我們先看下什么叫做中斷棧。

中斷棧

中斷棧用來保存中斷的上下文。

中斷棧的創(chuàng)建:內(nèi)核啟動時中會去為每個cpu創(chuàng)建一個per cpu的中斷棧:start_kernel->init_IRQ->init_irq_stacks

中斷棧的使用:中斷發(fā)生和退出的時候調(diào)用irq_stack_entry和irq_stack_exit來進(jìn)入和退出中斷棧。

恢復(fù)現(xiàn)場

主要分三步:

  1. disable中斷;
  2. 檢查在退出中斷前有沒有需要處理事情,如調(diào)度、信號處理等。
  3. 將之前壓棧的pt_regs彈出,恢復(fù)現(xiàn)場。

 

責(zé)任編輯:武曉燕 來源: 人人都是極客
相關(guān)推薦

2010-12-08 11:33:21

面試

2009-12-10 16:56:39

Ruby on RaiDHH

2010-03-12 19:17:43

Python程序

2015-05-19 17:37:47

移動辦公蘋果filemaker

2017-05-10 10:57:14

互聯(lián)網(wǎng)

2011-03-15 10:44:40

2022-11-01 12:16:47

Nginx微服務(wù)編譯

2012-11-12 14:44:50

F100H3C防火墻

2020-12-09 08:50:55

web組件開發(fā)

2021-12-11 19:00:54

Java中斷機(jī)制

2022-05-09 08:17:37

InstantJava字符

2023-11-29 08:26:38

2024-03-19 08:15:09

云原生云計(jì)算容器

2022-03-17 08:54:59

軟件系統(tǒng)重構(gòu)

2010-03-22 14:42:08

Python包管理

2021-02-05 08:41:44

STM32網(wǎng)絡(luò)中斷

2022-07-21 08:43:01

功能測試測試

2021-08-06 22:43:54

中斷架構(gòu)傳遞

2019-01-07 08:10:54

微服務(wù)單體 Web

2013-07-25 09:27:14

JP1
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號