LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 935|回复: 1

请教一个内核态与用户态的问题

[复制链接]
发表于 2005-5-27 16:37:51 | 显示全部楼层 |阅读模式
1.
内核程序是一直在运行的,如果一个用户态程序要运行,那么它是不是要跟内核程序争用cpu,(cpu只有一个,总不可能同时跑两个程序吧)???
譬如现在有一个用户程序test.c ,代码就一行  while(1),那么当cpu执行test时,内核在哪运行??

2。
我测试加载了一个模块,init_module中代码也只有while(1),按理说内核应该就卡在这里了,但是为什么还能响应系统调用?

3.
宏CURRENT是不是总是代表的某一个用户态的process?

谢谢了先 :)
发表于 2005-5-28 01:30:41 | 显示全部楼层
Post by nhjidle
1.
内核程序是一直在运行的,如果一个用户态程序要运行,那么它是不是要跟内核程序争用cpu,(cpu只有一个,总不可能同时跑两个程序吧)???
譬如现在有一个用户程序test.c ,代码就一行  while(1),那么当cpu执行test时,内核在哪运行??

2。
我测试加载了一个模块,init_module中代码也只有while(1),按理说内核应该就卡在这里了,但是为什么还能响应系统调用?

3.
宏CURRENT是不是总是代表的某一个用户态的process?

谢谢了先 :)

1. 内核当然不是一直在运行,现代os是interrupt driven的,当系统启动起来之后,每当有interrupt/exception的时候,比如timer interrupt,或者进程系统调用时内核才运行
进程和内核不存在竞争关系,内核服务于进程:处理系统调用,处理中断
进程间才存在竞争关系,所以要靠内核来做决断
有个名词叫上下文转换(context switch)了解么?
如果你的进程只有一个while(1),内核基本不会理会它,除了调度

2.只是insmod进程卡住

3.current只在processs context下才有意义,指向当前进程的task_struct。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表