zl程序教程

您现在的位置是:首页 >  其他

当前栏目

windows内核系统结构

2023-04-18 12:43:38 时间

CPU中断

  • 中断号,地址
  • 中断向量,中断号+中断服务
  • 中断服务,执行函数

中断只有使用汇编调用,所以很多C++代码里面会有汇编调用中断

IDT表

cpu通过IDT,找到ISR(中断服务)

windbg的!idt可以查看IDT表

GDT全局描述表

windows分为实模式(内核)和保护模式

  • 实模式,Segment+Offset的方式访问,Segment16位(向后兼容,cpu位数增加寄存器位数增加,16位段寄存器数据被写入内存,所以增加了GDT描述段地址、段属性、段界限),每个段地址指向64k(16位cpu)大小,段地址因为左移4位所以地位大都是0,Offset是相对于Segment偏移
  • 保护模式,内存的管理模式分为两种,分段模式(段+偏移)和分页模式

分段内存段间的内存空间太大(16位64k),碎片太多,段+偏移转换为线性地址后,通过分页管理,映射到新的地址空间,页目录+页表+页内偏移(12位4k),减小内存间隙的大小

地址通过三次转换: 逻辑地址(段+偏移)>> 线性地址(分页)>> 物理地址

内核内存管理参考:https://blog.csdn.net/u013928208/article/details/115580324?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162701749516780271539308%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162701749516780271539308&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-12-115580324.pc_search_result_control_group&utm_term=idt+gdt+ldt++%E5%88%86%E9%A1%B5&spm=1018.2226.3001.4187

LDT局部描述表

任务切换,系统当前的局部描述符表LDT也随之切换,LDT实现了任务间的隔离,GDT可以存放任务共享的段

SSDT表

内核到应用层的函数映射