首先,我们得明白,linux中的所有的进程都由task_struct这个结构管 理。在生成进程的时候将会分配一个task_struct结构,之后将通过这个结构对进程进行管理。 task_struct结构存在于平坦地址空间内,任何时候Linux内核都可以参照所有进程的所有管理情报。内核堆栈也同样位于平坦地址空间内。(平坦 的意思是"独立的连续区间")
下面是tesk_struct的主要成员:
--------------------------------------------------------------------------------
struct task_struct {
struct files_struct* files; //文件描述符
struct signal_struct* sig; //信号控制signal handler
struct mm_struct* mm; //内存管理模块
long stat //进程状态
struct list_head runlist; //用于联结RUN队列
long priority; //基本优先权
long counter; //变动优先权
char comm[]; //命令名
struct thread_struct tss; //上下文保存领域
...
};
我们现在只需了解它里面的state就可以,state有下面几种状态:
状态 说明
TASK_RUNNING 执行可能状态
TASK_INTERRUPTIBLE 等待状态。可接受信号
TASK_UNINTERRUPTIBLE 等待状态。不能接受信号
TASK_ZOMBIE 僵尸状态。exit后的状态
TASK_STOPPED 延缓状态
我们要知道内核没有多进程,就只有一个进程(SMP就不清楚了),这跟在user space下是不同的.在用户空间里,我们可以使一个进程跑起while(1),其他的进程也能用,但是在内核中就不行了,原因在上面。
假设我们在 kernel 里产生一个 buffer,user 可以经由 read,write 等 system call 来读取或写资料到这个 buffer 里。如果有一个 user 写资料到 buffer 时,此时 buffer 已经满了。那请问你要如何去处理这种情形呢 ? 第一种,传给 user 一个错%C
阅读(1011) | 评论(0) | 转发(0) |