|
发表于 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。 |
|