对操作系统中的一些概念不清楚,会阻碍对它的深入理解。所以我将我以前不清楚,现在了解的概念罗列出来,并在学习的过程中逐步增加……
微内核(MicroKernel)
在微内核中,大部分的内核都作为独立的进程在特权状态下运行,他们通过消息传递进行通信。在典型情况下,每个概念模块都有一个进程。因此,如果在设计中有一个系统调用模块,那么必然就有一个系统接收系统调用,并和能够执行系统调用的其他进程(或模块)通信以完成所需任务。在这些设计中微内核部分只不过是一个消息转发站,当系统调用模块要给文件系统模块发送消息时,消息直接通过内核转发。这种方式有助于实现模块间的隔离。优点:1.在不影响系统其它部分的情况下,可以在系统运行时将开发出的新系统模块或者需要替换现有模块的模块直接而迅速的加入系统;2,不需要的模块将不会加载到内存中,可以更有效的利用内存。
大内核(Monolithic kernel)
单内核是一个很大的进程。它的内部又可以分为若干模块(或者是层次或其他)。但是在运行的时候,它是一个独立的二进制大映像。其模块间的通信是通过直接调用其他模块中的函数实现的,而不是消息传递。
系统调用
操作系统有内核空间和用户空间之分。系统调用就是软件有计划的调用CPU提供的特殊指令,触发CPU内部产生一个中断,完成一次核内与核外的空间切换。
软中断
在中断即将退出的时候会调用irq_exit,它内部会判断是否还有中断要处理,如果没有了就调用invoke_softirq,这是一个宏,他被定义为do_softirq,此函数最终调用_do_softirq,也就是说,实际上软中断是在处理完所有中断之后才会处理的。而且处理软中断的时候还是处于中断上下文中。
内核下的同步与互斥
同步与互斥是有区别但又互相联系。同步是建立在互斥的基础之上的。只有实现了互斥功能,才能实现同步机制。在大型操作系统实现中,这两者被严格的区分开来。同步一般用semaphore表示,互斥一般用spin lock来表示。主要区别是在semaphore机制中,当进程进不了临界区时系统会调用其他进程进行(不会忙等)而spin_lock必须使所有CPU空转(在smp中是这样,但在单一CPU环境下则是空语句)。
RCU读写锁
RCU(Read-Copy-Update)就是读-复制-修改。对于被RCU保护的共享数据结构,读操作不需要获得任何锁就可以访问它,但写操作在访问它时首先复制一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据指针重新指向被修改的数据。这个时机就是所有引用该数据的CPU对退出对共享数据的操作。它既允许多个读操作同时访问被保护的数据,又允许多个和多个写操作同时访问被保护的数据。
SMP
对称多处理(Symmetrical Multi-Processing)