Linux是如何工作的?这个可是一个大工程,不是一句两句能够说清楚的。
首先要知道的就是计算机硬件的知识,一个处理器,些许内存,一些输入输出设备,一般还会有一个硬盘功能的一个大的存储外设。启动的过程在上一篇博文中有提到:是一句处理器跟硬件存在的规则设计的一段引导代码,代码运行之后将内核代码加载到内存中。然后处理器的权利就交给了内核代码了,也就是说引导代码的功能还是为了将这个内核加载。Linux最成功的地方就是这个内核,虽然一些功能或者一些模块在从1990年开始被不断的完善着,但是,当初Linus设计的小内核的思想还是一直没有改变的。这些思想就是进程调度、信号、中断、系统调用等。就是这些思想指导着代码实现了将一个冰冷的电路、机器。组织成一个能够自己判断,自己运行的一个有机的内核~
内核的代码从功能上可以分为三类:一类是硬件中断处理,一类是系统调用服务,一类是进程调度。那我们来一个个的解决。
中断处理:中断处理用于实现大部分硬件中断,将物理世界中的一些动作在代码的处理下成为一个让人接受的接口,可以让程序员减少对底层硬件的考虑。硬件中断由8259A中断控制芯片来控制,在中断引脚信号到来的时候内核代码负责将当前CPU的一些参数保存起来去执行中断程序~就像你在斗地主,然后你接到一个电话,你只好把手中的牌扣在桌子上先把电话给接了然后再来把牌翻起来继续斗。而且中断处理是一个内核控制路径,代码量比较短,所以只是借用一下内核的堆栈,速战速决。
系统调用:系统调用是为了将内核跟用户程序分离开来运行,这样能保证内核的干净、安全。系统调用跟中断有类似的地方,都是要用到中断号的只是系统调用的代码权限会比较高一点,用户态就能陷入进去,然后运行内核设定好的安全的代码。系统调用有专门的系统调用表,不同的调用号能够实现不同的功能。所有的程序操作可以说都是通过系统调用来实现的。
进程调度:这个就比较复杂了,有各种各样的机制,各种各样的函数都有进程调度,有好几个进程队列供进程调度函数处理。在进入了进程调度函数之后系统会将各个进程的一些优先级、时间片、信号等信息来比较处理一下,看进程调度改让那个进程继续优先执行。意思大概就是这么一个意思,里面的具体的部分我觉得可以参考uCOS-II的任务调度代码,那是一个小的操作系统,任务调度的判断条件也少很多,但是基本的思想是一样的。等思想理解了再来看看这复杂的Linux。
这就是小小的内核,在小小内核的管理之下我们可以加载很多其他的模块来实现其他的一些功能,这样感觉整个Linux系统就变得很庞大了。其实精练到思想层次的话就那么点~
阅读(768) | 评论(0) | 转发(0) |