进程是Linux重要的一部分,了解Linux就必须要去了解进程.
进程是linux资源封装单位,资源指的占用的内存,文件系统,信号,线程是调度执行的单元.
linux可以做到进程间的资源隔离.进程的描述就是资源的描述.PCB(process control block)是操作系统用来描述进程的,linux中PCB就是用task_struct来描述的.
task_struct {
pid;
*mm;
files;
signal;
fs;
}
pid-进程属性. *mm-指向内存资源的指针,fs-文件系统资源,根路径,和当前路径指针.
files-进程打开的文件,文件描述符数组. signal-不同进程可以对信号做不同的处理方式.
2、linux进程task_struct有3种数据结构
1、链表,调度算法会将task_struct挂在链表上。
2、红黑树-父子进程会用树来表示,CFS(完全公平调度算法)会用到红黑树。
3、哈希表-通过pid会用到哈希表。
实时系统和操作系统一般有3种状态,运行,就绪,睡眠。
进程有CPU操作时就为运行态,无CPU是可能是就绪或者睡眠,就绪是指所有资源都准备好了,就等CPU执行了。而睡眠
态指的是进程资源还没有准备好,例如网口读数据。数据还没有发送。此时即便有CPU参与都没法执行,该状态就为睡眠态,一旦收到了数据则变为就绪态,CPU参与后则变为运行态。
僵尸态:子进程退出后,所有资源都消失了,父进程在wait中得知子进程退出的原因,僵尸态就在子进程退出到wait之前。
深度睡眠和浅度睡眠的区别:深度睡眠只能在资源到位的情况下才醒过来,浅度睡眠在资源到位或者信号都能后醒过来,一般都是浅度睡眠。