内核内存管理与并发同步
内核内存分为分页内存与非分页内存。分页内存可以被换页到磁盘,只能在 PASSIVE_LEVEL 使用;非分页内存常驻物理内存,DISPATCH_LEVEL 中断上下文必须分配非分页内存。使用ExAllocatePool2分配内核内存,内核开发必须注意内存泄漏,内核内存泄漏无法依靠进程退出自动回收。MDL(内存描述符列表)用来描述用户态缓冲区对应的物理页面。做 I/O 操作、DMA 硬件访问时,需要用 MDL 锁定用户缓冲区,防止页面在读写过程中被换出,避免内存访问异常。
内核同步原语:自旋锁、互斥体、事件、信号量。自旋锁适合高 IRQL 短时间保护共享数据,自旋锁持有期间不能休眠;互斥体只能在 PASSIVE_LEVEL 使用,会阻塞线程。多核环境下共享数据如果缺少同步保护,会出现数据竞争,随机蓝屏。
哥顶的不是帖子,是寂寞! 学习一下,谢谢!! 膜拜神贴,后面的请保持队形~
页:
[1]