// slot file system driver when completing an IRP (IoCompleteRequest).
//
#define IO_MAILSLOT_INCREMENT2
//
// Priority increment for completing mouse I/O.This is used by mouse device
// drivers when completing an IRP (IoCompleteRequest)
//
#define IO_MOUSE_INCREMENT6
//
// Priority increment for completing named pipe I/O.This is used by the
// named pipe file system driver when completing an IRP (IoCompleteRequest).
//
#define IO_NAMED_PIPE_INCREMENT2
//
// Priority increment for completing network I/O.This is used by network
// device and network file system drivers when completing an IRP
// (IoCompleteRequest).
//
// 网卡IO之所以优先级提升并不是很多,是因为首先网卡是有队列缓存的,而大多数的报文都是burst而来的,队列缓存可以平滑掉首包延迟,其次,由于光速极限,相比于网络延迟,主机调度延迟真的可以忽略不计 。
#define IO_NETWORK_INCREMENT2
//
// Priority increment for completing parallel I/O.This is used by parallel
// device drivers when completing an IRP (IoCompleteRequest)
//
#define IO_PARALLEL_INCREMENT1
//
// Priority increment for completing serial I/O.This is used by serial device
// drivers when completing an IRP (IoCompleteRequest)
//
#define IO_SERIAL_INCREMENT2
//
// Priority increment for completing sound I/O.This is used by sound device
// drivers when completing an IRP (IoCompleteRequest)
//
#define IO_SOUND_INCREMENT8
//
// Priority increment for completing video I/O.This is used by video device
// drivers when completing an IRP (IoCompleteRequest)
//
#define IO_VIDEO_INCREMENT1
//
// Priority increment used when satisfying a wait on an executive semaphore
// (NtReleaseSemaphore)
//
#define SEMAPHORE_INCREMENT1
---------------------
仔细看,你会注意到对于声卡而言,其IO完成时,优先级提升会很大,而磁盘,显卡这种却并不是很多,这充分体现了设计者的贴心 。这充分考虑到了人耳的灵敏度和人眼的分辨率之间的对比 , 声音是作为流顺序输出的,耳朵很容易分辨出声音的卡顿 , 而对于图像而言,完全可以慢慢双缓冲刷层 , 人眼相比之下没有那么高的分辨率识别到,因此声卡事件必须优先处理 。
同时,对于磁盘,网卡之类的,人就更是感觉不到了 。除了声卡之外,键盘鼠标操作的IO完成对于优先级提升的数值也很可观,因为键盘鼠标如果卡顿,人的输入会明显感觉到延迟,鼠标则显拖沓,这都是很容易识别的卡顿事件,所以Windows给予了进程更高的动态优先级来尽快处理这些事件 。
对于窗口子系统而言,当一个窗口获得焦点时,对应的处理进程的优先级也会得到提升,这会给人一种 你操作的界面总是很流畅 的感觉 , 毕竟你操作的界面就是前台窗口,至于说此时后台窗口的处理进程,即便是僵死了你也不会有感觉 , 因为你并不操作它们呀,当你操作它们时,对应的处理进程的优先级就会提升 。
所有的优先级提升都伴随着时间片的重新计算,但是和Linux不同的是,Windows并没有直接将进程优先级和时间片按照正相关关联起来,时间片是独立计算的,大多数时候,Windows对于所有的进程 , 不管优先级是多少,均采用同一个时间片 。
如此看来,Windows虽然也是优先级调度的系统 , 但是其优先级却是 操作行为驱动的 ,这便是其与众不同之处 。
Linux内核调度系统会精细区分磁盘事件的wakeup和键盘鼠标声卡事件的wakeup吗?不会 。
推荐阅读
- 如何提升新媒体阅读量,新媒体时代如何有效阅读
- go语言上手快吗的简单介绍
- 更改阿里云服务器系统,更改阿里云服务器系统名称
- 斗鱼直播文字介绍,斗鱼直播介绍怎么写
- python类动态函数名 python 动态变量名
- 用cad做gis图,怎样用gis打开cad图
- 年度电子竞技游戏有哪些,2021年电子竞技
- 冒险解谜游戏有哪些,冒险解谜游戏有哪些恐怖的
- linux中计划任务命令 linux的计划任务