IOAPI HOOK 未考慮多核心環境

2021-06-29 12:55:13 字數 1619 閱讀 6859

#include #define makedword(low, high) ((dword)(((word)((dword)(low) & 0xffff)) | ((dword)((word)((word)(high) & 0xffff))) << 16))

#define makelowword(data) ((word)(((dword)data) & 0xffff))

#define makehightword(data) ((word)(((dword)data) >> 16))

#define max_idt_vector 256

#define ioapic_regsel_physical_address 0xfec00000

#define ioapic_win_physical_address \

ioapic_regsel_physical_address + 0x10

#define int_vector_max_count 255

typedef unsigned int dword;

typedef unsigned short word;

typedef unsigned char byte;

#pragma pack(1)

typedef structidtr;

typedef structinterrupt_descriptor, *pinterrupt_descriptor;

#pragma pack()

//多核心cpu使用下面函式需要特別注意

//pemptyidtvector 返回空的中斷描述符向量

//status_invalid_parameter 、status_successstatus_unsuccessful 函式返回值有3種

ntstatus getemptyidtvector(dword* pemptyidtvector)

pemptyidt+=1;

} *pemptyidtvector = 0;

return status_unsuccessful;

}//多核心cpu使用下面函式需要特別注意

//number 要修改的irq

//setidt 要替換irq對應的中斷向量

//preturnnum irq對應的舊中斷向量

//status_invalid_parameter、status_unsuccessful、status_success 函式返回值有3種

ntstatus changeioapicidtvector(byte number, dword setidt, byte* preturnnum)

mmunmapiospace(paddr, 0x10+number*2+2);

status = status_success;

return status;

}void unload(__in struct _driver_object *driverobject)

ntstatus driverentry(

__in pdriver_object driverobject,

__in punicode_string registrypath

)

關於單核心與多核心

1 單核心 執行效率 單核心也叫集中式作業系統。整個系統是乙個大模組,可以被分為若干邏輯模組,即處理器管理 儲存器管理 裝置管理和檔案管理,其模組間的互動是通過直接呼叫其他模組中的函式實現的。單核心模型以提高系統執行效率為設計理念,因為整個系統是乙個統一的核心,所以其內部呼叫效率很高。單核心的缺點也...

超執行緒和多核心簡介

在購買cpu的時候,我們往往會發現cpu的引數列表中核心數和執行緒數不一致,且大多數情況下執行緒數是核心數的兩倍。這是為什麼呢?這就涉及到超執行緒和多核心的概念。超執行緒cpu簡介 超執行緒技術是英特爾研發的一種技術,與2002年發布。超執行緒技術把多執行緒處理器內部的兩個邏輯核心模擬成兩個物流晶元...

ARM多核心集群伺服器

方案背景 移動互聯應用的快速發展和雲計算 大資料應用的拓展和深化,資料中心已由傳統的x86架構的大型機 小型機逐步轉移到arm架構伺服器,而隨著人們對伺服器工作負載模式的新需求,越來越多的智慧型場景需要小型伺服器來部署。方案簡介 方案特點 1.超強擴充套件性 集群伺服器支援firefly全系列jd4...