免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1113 | 回复: 0
打印 上一主题 下一主题

Linux内核wait_queue深入分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-11 15:26 |只看该作者 |倒序浏览

首先,我们得明白,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

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/109143/showart_2145707.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP