您的位置:首页 > 运维架构 > Linux

Linux代码阅读笔记----基本概念

2014-04-06 23:38 281 查看
开始看下Linux内核代码了。主要是跟着《深入理解Linux内核-第3版》这本书看,以2.6.11为基础。

基本概念

内核体系结构
宏内核(Monolithic kernel):整个操作系统是一个运行在核心态的单独的a.out文件,这个二进制文件包含进程管理,内存管理,文件系统以及其他。其模块间的通讯是通过直接调用其它模块中的函数实现的,而不是消息传递。
微内核(Microkernel ):操作系统的大部分都作为独立的进程在特权状态下运行 ,而且多数在内核之外。它们之间通过消息传递来通信。内核的任务是处理消息传递,中断处理,底层的进程管理,以及可能的I/O。在这些设计中,微内核部分经常只不过是一个消息转发站:当系统调用模块要给文件系统模块发送消息时,消息直接通过内核转发。这种方式有助于实现模块间的隔离。
Linux提供了模块(module)的概念,实现文件系统、驱动或其他内核上层功能。与微内核不同,模块不是作为一个特殊进程运行,而是一个目标文件,运行时链接到内核或从内核解除链接。

process/kernel model
内核本身并不是一个进程,而是进程的管理者。process/kernel model假定进程通过系统调用(system calls)的特定编程结构来请求内核服务。每个系统调用都设置了标识进程请求的参数,然后执行与硬件相关的CPU指令从用户态切换到内核态。
除了用户进程外,Unix系统还有几个称为内核线程(kernel thread)的特权进程,有如下特点:

以内核态运行在内核地址空间;
与用户没有交互,因此不需要终端设备;
通常随系统启动而创建,随系统关闭而关闭

Process Implementation

为了让内核管理进程,每个进程由一个进程描述符(process descriptor)表示,这个描述符包含进程当前状态的信息。
内核暂停一个进程时,就保存进程描述符中的几个CPU寄存器中的内容,包括:

程序计数器(PC)和栈指针(SP)寄存器;
通用寄存器;
浮点寄存器;
处理器状态字(Processor Status word);
用来跟踪进程对RAM访问的内存管理寄存器;

内核恢复一个进程时,用进程描述符中对应的字段来装载CPU寄存器。因为PC中的值指向下一条要执行的指令,所以进程就从它停止的地方继续执行。
内核控制路径(kernel control path)表示内核处理系统调用、异常或中断所执行的指令序列。
Unix信号(singal)提供了把系统事件报告给进程的一种机制。有两种系统事件:异步通知;同步错误或异常。
现在的CPU包含了能自动把虚拟地址(逻辑地址)转为物理地址的硬件电路。把可用RAM划分为长度为4KB或8KB的页框(page frame),并且引入一组页表来指定虚拟地址与物理地址之间的对应关系,这样一块连续的虚拟地址请求可以通过分配一组非连续的物理地址页框来实现。
内核通过设备驱动程序与I/O设备交互。用户程序想要操作硬件设备时,就利用与文件有关的系统调用以及/dev目录下的设备文件向内核发出请求。设备文件是设备驱动中用户可见的部分。每个设备文件都有专门的设备驱动程序,由内核调用以执行对硬件设备的请求操作。

参考:
1、http://blog.csdn.net/ElephantEar/article/details/382576
2、深入理解Linux内核-第3版
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: