我们知道在Linux之中有一个runqueue,
里面有很多内容,但是我们只需要关心红色和蓝色的地方就行。
我们简单理解为蓝色和红色部分其实事被封装成为一个struct queue,然后由array管理两个结构体。
而两个封装的结构体就是cpu能完成优先又公平的调度进程的关键。
cpu的优先调度:当在active队列中的进程会依据在队列的所属位置[100,139]开始逐步检查每个位置是否有进程存在,并且优先去执行在前的进程。
cpu的公平调度:当每次新的进程进入expired队列会于时间片运行完时间片进入进程进行运行时间的对比,而新进入进程会在更前边,以便cpu能更均匀调度到每个进程。
task_struct的链接。
其实tast_struct之间的链接,不是以task_struct*来连接,他里边是有一个专门连接的link结构体,node结构体内只包含next和prev。像要进入其他设备(类似阻塞状态)就能同时在全局链表中,又可以在任何一个其他的有这个link的结构体中,这样我们进入一个设备就不需要离开这个大的链表当中,只需要改变其状态就行。
那这样又怎么样找到tast_struct的其他数据内容呢?
其实只需要计算当前地址的偏移量,再用当前地址减去偏移量就可以访问到tast_struct这个结构体任何一个内容了。具体呢?就不是你我考虑的事情了哈。