- 论坛徽章:
- 0
|
我自己来回答自己的三个问题:
第一个小问:记得在学操作系统的时候,老师曾经提过进程上下文切换,说进程上下文切换比较耗时,在这点上线程要比进程有优势,那么进程的上下文是什么了?切换的时候都做了些什么?我相信这个对于看过内核代码的兄弟都比较容易,那好,我们知道在进程切换的时候:在古老的Linux中采用的方法和现代版本的Linux中采用的是不同办法?这两个办法有什么差别了?为什么新版本的内核采用现在的切换机制?其实,这个问题我想考察大家对Linux各种版本之间的关系,因为Linux内核不停的再优化,为什么会这么优化基于什么样的考虑?这个可以从内核不停的修改这方面可以看得出,这样也可以为我们去优化内核提供思路
关于进程上下文是什么,简单的说一下:那就是一些寄存器!具体的不讲了!稍微看一下代码就OK了,着重讲解进程的切换!
其实,当时我在看0.11版本的内核时,发现进程上下文的切换是这样做的:
通过一个jmp语句直接跳到下一个进程中去执行了,这也就是我们所说的通过硬件完成自动的切换!这样带来一个问题,那就是浪费时间,有没有更好的办法了?
后来的Linux的版本提出了软件切换,也一直延续到现在的内核版本:关于具体的切换代码,我就不贴出来了,切换的过程主要是通过; switch_to这个函数完成的,那么问题又来了,为什么软件切换的速度要比硬件切换的速度要来得快了?这貌似和我们平时理解的有点不太一样,因为我们都觉得让硬件做一般比硬件快,这个到现在我也不是特别的理解,后来看到Linux内核情景分析上提到过,但是讲的也不是很详细,后来想通过intel的手册去找到答案,最后也是无果而终!
我的理解和猜测应该是这样:对于硬切换虽然是通过一个Jmp操作,但是在JMP之后有很多隐含要执行的指令,这些指令要比软切换执行的指令要多!如果其他兄弟有更好的看法可以提出来!从这一段小小的代码就可以发现,Linux内核的设计是多么的慎密,其实还有很多细节可以体现出Linux设计的博大精深!比如:我记得以前看到过的*(unsigned long*)&jiffies++!
其实,发现看内核代码对我们程序员有太多太多的好处:我觉得最重要的两点:
1. 提高我们自身的编码能力
2. 提高我们优化程序的能力
3. 给我们解决问题提供一些不可估量的思路,其实我在做嵌入这块,有的时候会无形当中参考了内核的一些方面的设计的思想 |
|