一:进程结构体
1 | 声明目录:include/linux/sched.h |
进程的状态
1 | volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ |
进程的进程标识
1 | pid_t pid; |
在linux系统中,所有进程都有直接或间接的联系,每个进程都有其父进程
linux把不同的pid与系统中的每个进程或轻量级线程关联,一个线程组所有线程与零头线程具有相同的pid,存入tgid中;
进程标记
1 | unsigned int flags; |
反应进程状态信息,但不是运行状态,用于内核识别进程当前的状态,以备下一步操作
表示进程亲属关系的成员
1 | /* |
进程内核栈
1 | struct thread_info thread_info; |
ptrace系统调用
提供一种父进程可以控制子进程运行,并可以检查和改变它的核心image;
优先级
1 | int prio,保存静态优先级,可以通过nice系统调用来进行修改 |
调度策略相关字段
1 | policy 调度策略 |
task_struct的初始化
1 | __mmap_switched_data arch/arm/kernel/head-common.S |
`
init进程
linux下有3个特殊的进程,idle进程(PID=0),init进程(PID=1)和kthreadd(PID=2)
ilde进程由系统自动创建,运行在内核态
idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_thread产生的进程。完成加载系统后,演变成为进程调度,交换;
init进程由idle通过kernel_thread创建,在内核空间中完成初始化后,加载init程序;
三:僵尸进程
其他
当一个进程在执行时,CPU的所有寄存器中的值,进程的状态以及堆栈中的内容被称为该进程中的上下文。当内核需要切换到另外一个进程时,它需要保存当前的所有状态,即保存当前进程的上下文;以便在再次执行该进程时,能够必得到切换时的状态执行下去。在linux中,当前进程上下文均保存在任务数据结构中;
当发生中断时,内核就在被中断的上下文中,在内核态下执行中断服务历程。但同时会保留所有需要用到的资源,以便中继服务结束时能恢复被中断进程的执行;
进程优先级
设置SCHED_FIFO和50 RT优先级
#chrt -f -a -p 50 10576
设置nice
#renice -n -5 -g 9394
#nice -n 5 ./a.out
参考资料
linux调度器发展简述
linux进程描述符task_struct结构体详解–linux进程的管理与调度(一)
Linux下0号进程的前世(init_task进程)今生(idle进程)—-Linux进程的管理与调度(五)