Chinaunix首页 | 论坛 | 博客
  • 博客访问: 306542
  • 博文数量: 86
  • 博客积分: 2050
  • 博客等级: 大尉
  • 技术积分: 1215
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-29 10:29
文章分类

全部博文(86)

文章存档

2011年(2)

2010年(77)

2009年(7)

我的朋友

分类: LINUX

2010-01-11 15:26:31

首先,我们得明白,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) |
给主人留下些什么吧!~~