(三)进程
一、进程概念
进程是程序执行的一个实例。操作系统会以进程为单位,分配系统资源,进程是资源分配的最小单位。
二、进程描述符
1.进程描述符包含了与一个进程相关的所有信息。
struct task_struct{
进程信息
}
2.进程描述符处理
对于每一个进程而言,内核为其单独分配了一个内存区域,这个区域存储的是内核栈和该进程所对应的一个小型进程描述符——thread_info结构。
struct thread_info {
}
三、进程状态
可运行(TASK_RUNNING)
可中断的等待(TASK_INTERRUPTBLE)
不可中断的等待(TASK_UNINTERRUPTILBE)
暂停(TASK_STOPPED)
跟踪(TASK_TRACED)
僵死(TASK_ZOMBIE)
僵死撤销(EXIT_DEAD)
线程
线程存在于进程当中,是操作系统调度执行的最小单位。说通俗点,线程就是干活的。
四、进程间关系
进程0和进程1由内核创建,进程1(init)是其他所有进程的祖先。
五、进程与等待队列
等待队列(wait queue)用于使进程带等待某一特定的事件发生,而无需频繁的轮询操作,进程在等待时间内睡眠,在等待的事件发生时由内核自动唤醒
1.等待队列相关数据结构
每一个等待队列都由两部分组成:等待队列头(struct wait_queue_head_t)和等待队列成员(struct wait_queue)。
- struct __wait_queue_head {
- spinlock_t lock; /*因为等待队列可以在中断时随时修改,因此设置一个自旋锁保证一致性*/
- struct list_head task_list;
- };
- typedef struct __wait_queue_head wait_queue_head_t;
- struct __wait_queue {
- unsigned int flags; /*指明等待的进程是互斥进程还是非互斥进程*/
- struct task_struct *task; /*指向任务的task_struct*/
- wait_queue_func_t func;
- struct list_head task_list;
- };
- typedef struct __wait_queue_head wait_queue_head_t
五、进程创建
fork vfork
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。