日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux Kernel5.10的核间通信(SGI中断)的本质

發(fā)布時間:2025/3/21 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux Kernel5.10的核间通信(SGI中断)的本质 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈


說明:
在默認情況下,本文講述的都是ARMV8-aarch64架構(gòu),linux kernel 5.14


1、核間中斷本質(zhì)

核間中斷其實就是SGI中斷(Software Generated Interrupt),在gicv3架構(gòu)中,共有16個SGI中斷(不算后來extension的),ARM推薦的軟件規(guī)定,0-7 SGI給REE使用,8-15 SGI給TEE使用。 我們查看Linux Kernel 5.14的代碼也可以看到,它恰好只用了0-7 SGI.

補充SGI中斷的介紹

在gicv3中斷控制器中,0-15號中斷是SGI中斷


產(chǎn)生SGI中斷的寄存器,如ICC_SGI0R_EL1 、ICC_SGI1R_EL1 、ICC_ASGI1R_EL1所示


2、核間中斷概念

處理器間中斷就是一個 CPU 向系統(tǒng)中的目標 CPU發(fā)送中斷信號,以使目標CPU執(zhí)行特定的操作

在Linux Kernel操作系統(tǒng)中,默認定義了8中IPI中斷(SGI0-SGI7)

(linux/arch/arm64/kernel/smp.c)enum ipi_msg_type {IPI_RESCHEDULE,IPI_CALL_FUNC,IPI_CPU_STOP,IPI_CPU_CRASH_STOP,IPI_TIMER,IPI_IRQ_WORK,IPI_WAKEUP,NR_IPI };
  • IPI_RESCHEDULE :0號中斷, 重新調(diào)度進程,scheduler_ipi()
  • IPI_CALL_FUNC :1號中斷, 調(diào)用generic_smp_call_function_interrupt()
  • IPI_CPU_STOP :2號中斷,調(diào)用local_cpu_stop(), 使處理器停止
  • IPI_CPU_CRASH_STOP :3號中斷,調(diào)用ipi_cpu_crash_stop(),使處理器停止
  • IPI_TIMER :4號中斷,調(diào)用tick_receive_broadcast(),廣播時鐘事件
  • IPI_IRQ_WORK :5號中斷,調(diào)用irq_work_run()
  • IPI_WAKEUP :6號中斷,調(diào)用acpi_parking_protocol_valid(cpu), 喚醒處理器
  • NR_IPI :7號中斷,沒有使用

3、核間中斷處理函數(shù)的注冊和調(diào)用

  • 在Linux Kernel5.0之前,在gic_handle_irq()的gic處理函數(shù)中,會判斷硬件中斷號,中斷小于16的屬于SGI中斷,單獨走handle_IPI()函數(shù),用于處理核間中斷。
  • 而到了Linux Kernel 5.0之后,就不再單獨將handle_IPI()拎出區(qū)分了。

    那么在Linux Kernel 5.0之后是怎么實現(xiàn)的?
    在Linux Kernel 5.0為硬件中斷號0-7的每個中斷號都注冊了一個中斷處理函數(shù),其指向ipi_handler()函數(shù)

4、觸發(fā)一個核間通信

核間中斷的相關(guān)的API:

  • smp_call_function(func, info, wait) //在所有其它處理器執(zhí)行一個函數(shù)
  • smp_call_function_single(int cpuid, smp_call_func_t func, void *info,int wait) //在指定處理器執(zhí)行一個函數(shù)
  • smp_send_reschedule(int cpu) //指定處理器重新調(diào)度進程

SMP(IPI)的這類函數(shù),最終都是調(diào)用到gic_send_sgi(),給core發(fā)送要給SGI中斷

5、核間通信–任務的調(diào)用

ipi_handler()就是中斷號0-7所注冊的handler程序,在觸發(fā)中斷異常后,它和一般的request_irq注冊的中斷沒有什么不同,都是從異常向量表調(diào)過來,然后調(diào)用到這個ipi_handler()程序,該程序再調(diào)用do_handle_IPI() 真正處理核間通信的任務。

總結(jié)

以上是生活随笔為你收集整理的Linux Kernel5.10的核间通信(SGI中断)的本质的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。