从上面图可以看出,进程切换有两种方式:
1.当进程由于需要等待某种资源而无法继续执行下去,这个时候只能主动将自己挂起(调用schedule函数),引发一次任务调度过程;
2.另外一种是进程欢快执行,但是由于各种调度事件的发生(例如时间片用完)而被迫让出CPU,被其他进程抢占。
task_struct --> unsigned int rt_priority;
在OS下如何查看进程的状态信息,/proc/#pid/status中可以说明一个进程运行在哪些cpu上,并且进程分配内存必须在哪些内存节点上:
curtis@curtis-virtual-machine:/mnt/hgfs/share/write_code/cpu_mask_low$ sudo cat /proc/10/status
Name: rcuob/0
State: S (sleeping)
Tgid: 10
Ngid: 0
Pid: 10
PPid: 2
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 64
Groups:
NStgid: 10
NSpid: 10
NSpgid: 0
NSsid: 0
Threads: 1
SigQ: 0/15144
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: ffffffffffffffff
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
Seccomp: 0
Cpus_allowed: ffffffff,ffffffff,ffffffff,ffffffff
Cpus_allowed_list: 0-127
Mems_allowed: 00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 3
nonvoluntary_ctxt_switches: