Linux kernel成功的两个原因:(1)灵活的架构设计使得大量的志愿开发者能够很容易加入到开发过程中;(2)每个子系统(尤其是那些需要改进的)都具备良好的可扩展性。正是这两个原因使得Linux kernel可以不断进化和改进。 一、Linux内核在整个计算机系统中的位置分层结构的原则:the dependencies between subsystems are from the top down: layers pictured near the top depend on lower layers,but subsystems nearer the bottom do not depend on higher layers.
这种子系统之间的依赖性只能是从上到下,也就是在上图中位于顶层的子系统依赖位于底层的子系统,反之则不行。 二、内核的作用虚拟化(抽象),将计算机硬件抽象为一台虚拟机,供用户进程(process)使用;进程运行时完全不需要知道硬件是如何工作的,只要调用Linux kernel提供的虚拟接口(virtual interface)即可。 多任务处理,实际上是多个任务在并行使用计算机硬件资源,内核的任务是仲裁对资源的使用,制造每个进程都以为自己是独占系统的错觉。
PS:进程上下文切换就是要换掉程序状态字、换掉页表基地址寄存器的内容、换掉current指向的task_struct实例、换掉PC——>也就换掉了进程打开的文件(通过task_struct的files可以找到)、换掉了进程内存的执行空间(通过task_struct的mem可以找到); 三、Linux内核的整体架构中心系统是Process Scheduler(SCHED):所有其余的子系统都依赖于Process Scheduler,因为其余子系统都需要阻塞和恢复进程。当一个进程需要等待一个硬件动作完成时,相应子系统会阻塞这个进程;当这个硬件动作完成时,子系统会将这个进程恢复:这个阻塞和恢复动作都要依赖于Processor Scheduler完成。 上图中的每一个依赖箭头都有原因: Process Scheduler依赖Memory manager:进程恢复执行时,需要依靠Memory Manager分配供它运行的内存。 IPC子系统依赖于Memory manager:共享内存机制是进程间通信的一种方法,运行两个进程利用同一块共享的内存空间进行信息传递。 VFS依赖于Network Interface:支持NFS网络文件系统; VFS依赖于Memory Manager:支持ramdisk 设备 memory manager依赖于VFS,因为要支持swapping,可以将暂时不运行的进程换出到磁盘上的swap分区,进入挂起状态。
四、高度模块化设计的系统,利于分工合作。只有极少数的程序员需要横跨多个模块开展工作,这种情况确实会发生,仅发生在当前系统需要依赖另一个子系统时; -
(编辑:ASP站长网)
|