您的位置:首页 > 运维架构 > Linux

《深入理解linux内核》第三章 进程

2014-01-04 23:43 260 查看

进程的七种状态
在内核源码的 include/linux/sched.h文件中:

task_struct的status可表示

#define TASK_RUNNING            0  
#define TASK_INTERRUPTIBLE      1
#define TASK_UNINTERRUPTIBLE    2
#define TASK_STOPPED            4
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: