task_struct内容
1,标识符
内核用来识别不同进程,用户程序通过进程pid发送命令,新创建的进程的pid比前一个进程多1,最大进程号是32767;
2,进程状态:
1>运行时状态:分为两种,正在运行和等待运行,都位于运行队列中。current所指向的就是正在运行的进程,cpu是这些进程唯一等待的资源。(task_running)
2>等待状态:位于等待队列,可以被信号唤醒从而进入运行状态的成为可中断等待信号,反之因为硬件资源的缺失称为不可中断信号,(task_interruptible,task_uninterruptible)
3>暂停状态:当收到SIGSTOP,SIGTTIN,SIGTOUT,SIGTSTP时,进程从运行态到暂停态。例如正在调试的进程;(task_stopped)
4>僵死状态:子进程已经停止但是父进程没有执行wait()系统调用。此时仍然占领折系统资源(task_zomble)
3.进程调度信息
need_resched:(调度标志):一旦被设置,在下一次调度中就会调用schedule();
Counter(动态优先级):递减,剩余时间片;
Nice(静态优先级):用于对Counter赋值,可以通过nice()系统调用改变这个值;
Policy(调度策略):先来先服务,时间片轮转和其他调度策略,只有root用户可以通过sched_setscheduler()系统调用改变调度策略;
rt_priority(实时优先级):
4,进程通信;为了多个进程可以互相协调高效的完成一项任务,进程之间就需要互相通信。有UNIX通信机制(管道(pipe),信号(signals))和System V/ Posix( 共享内存,信号量,和消息队列)
5,进程之间链接关系
一个父进程可以通过fork()或clone()函数创建一个或几个子进程,子进程之间成为兄弟进程,通常子进程拷贝了除pid等进程独有的信息外其余进程描述信息,子进程与父进程之间进行通信,比如父进程向子进程发送kill()信号时,系统有必要建立这种“亲属”链接,每一个进程的task_struct结构体中有多个指针指向其余父子进程,这样系统中所有进程通过指针形成了一个以初始化init进程为根的大树。
6,时间定时器信息
Start_time:进程创建时间
Pre_cpu_utime:进程运行时在用户态下耗费的时间;
pre_cpu_stime:进程运行时在系统态下耗费的时间;
Counter:进程剩余的时间片;
7,页面管理:当物理内存不足够时,linux内存管理子系统将内存中部分页面置换到外存。