我正在尝试为linux内核(version 2.4.27
)实现调度程序,我试图找出一个任务是CPU绑定还是I / O绑定。是否有可用于获取此信息的变量/函数?
答案 0 :(得分:1)
如果谈论O(1) 调度器:
根据CPU在CPU上运行的时间片,可以将进程确定为CPU绑定或I / O绑定。
每个进程都会设置其默认时间片(100毫秒),然后才能在处理器上进行调度。
如果进程占用全时片(在处理器上运行整个时间片),则进程称为CPU绑定进程。
同样,任何进程不会消耗其整个时间片,但会在其时间片耗尽之前调用sched_yield,或,如果进程等待/休眠以发生任何事件,然后调用调度程序将其推送到休眠队列,这意味着它正在等待一些I / O发生,是一个I / O绑定进程。
每个这样的CPU绑定进程都将受到优先处罚,保持时间片相同,并且每个这样的I / O绑定进程都将获得优先级的奖励,保持时间片相同。
因此,在GPOS(通用操作系统)上,它是effective_priority或dynamic_priority,它将告诉您进程是否良好(I / O绑定)或不良行为(CPU绑定进程),如新进程的默认优先级为20,除非另有更改。
根据哪些参数,你可以确定相同的。
effective_prio:返回任务的有效优先级(基于静态优先级,但包括任何奖励或惩罚)。
recalc_task_prio:根据空闲时间确定任务的奖励或惩罚。
参考:https://www.cs.columbia.edu/~smb/classes/s06-4118/l13.pdf