- 我的博客:www.shishangguan.net
-
进程的七种状态
在内核源码的 include/linux/sched.h文件中:-
task_struct的status可表示
1 #define TASK_RUNNING 0 2 #define TASK_INTERRUPTIBLE 1 3 #define TASK_UNINTERRUPTIBLE 2 4 #define TASK_STOPPED 4 5 #define TASK_TRACED 8
-
task_struct和exit_status均可标识
#define EXIT_ZOMBIE 16 #define EXIT_DEAD 32
-
-
进程标识符
一个线程组中的所有线程和该线程组的领头线程具有相同的pid。
pid存放在task_struct结构的tgid字段中,但使用getpid()时返回的时tgid。
线程组领头线程的pid和tgid是相同的。 - linux进程切换实质
1.切换页全局目录
2.切换内核态堆栈和硬件上下文,即TSS段中的值。但linux是软件进程切换,所有的进程共享一个TSS段,使用mov指令手动装填TSS而非切换。 - switch_to宏为什么是三个参数
最后一个参数last用来存储上个运行进程,因为切换到新进程时,从堆栈中恢复的prev指针很可能不是目前该进程的真实前一个进程。 - linux创建进程的关键技术
1.写时复制
2.线程的创建可以共享父进程的地址空间,打开文件等信息。
3.vfork创建的进程共享整个父进程的地址空间,并且可以保证子进程比父进程有限执行。-
- 我的博客:www.while0.com
-