1、linux内核模式和体系结构
一个完整可用的操作系统主要由4个部分组成:硬件、操作系统内核、操作系统服务和用户应用程序。最底层的使硬件,其上使操作系统内核,再上一层使操作系统服务,最上层使用户应用程序。
linux内核的主要作用就是与计算机硬件进行交互,实现对硬件对编程控制和接口操作,调度对硬件资源对访问,并为计算机上的用户程序提供一个高级的执行环境和对硬件对虚拟接口。
操作系统内核的结构模式主要可分为整体式的单内核模式和层次式的微内核模式。linux的内核在初期的版本采用了单内核模式。单内核模式单主要优点式内核代码结构紧凑、执行速度快,不足之处式层次结构性不强。
在单内核模式的系统中,操作系统所提供的服务流程为:应用主程序使用指定的参数值执行系统调用指令(int x80),使CPU从用户态切换到核心态,完成功能以后再切换回用户态。
linux内核主要有5个模块组成:进程调度模块、内存管理模块、文件系统模块、进程间通信模块和网络接口模块。所有到模块都与进程调度模块存在依存关系。
2、linux中断机制
使用了两片8259A可编程中断控制芯片。每个芯片可以管理8个中断,可以多片级联。对linux内核来说,中断信号分为两类:硬件中断和软件中断 (异常)。每个中断是有0~255之间对一个数字来标识。软件中断通常可以分为故障(fault)和陷阱(traps)两类。
中断int0~int31是Intel公司保留对中断,int32~int255可以是用户自己定义的中断。
3、linux系统定时
在linux0.11内核中,系统没隔10ms就发出一个时钟中断(IRQ0)信号,称为一个系统滴答。
4、linux内核进程控制
程序是一个可执行文件,而进程(process)是一个执行中的程序实例。对linux0.11内核来讲,系统最多可以有64个进程同时存在。除了第 一个进程是“手工”建立对以外,其余进程都是进程使用fork函数来创建对。被创建的进程叫做子进程(child process),创建者称为父进程(parent process)。每个进程有一个惟一的ID。
每个进程只能执行自己的代码和访问自己的数据和堆栈区。进程之间的通信需要通过系统调用来进行。
linux系统中,一个进程可以在内核态或用户态运行,因此linux内核堆栈和用户堆栈是分开的。
内核程序通过进程表(又叫做进程控制块或者进程描述符)来管理进程,其中包含了进程当前运行的状态信息、信号、进程号、父进程号、运行时间累计值、正在使用的文件和本任务的局部描述符等信息。
进程在其生存期可有以下几种状态:
(1)运行状态,即正在被CPU执行的状态或者准备运行状态。
(2)可中断睡眠状态,即进程在处于睡眠状态时,可以被系统的中断,它正在等待的资源或某个信号等方式唤醒。
(3)不可中断睡眠状态,即睡眠中的进程只能被wake_up()函数明确唤醒时才能转换到可运行到就绪状态。
(4)暂停状态,即当进程收到SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU时进会进入暂停状态。
(5)僵死状态,即进程已经停止运行了,但其父进程还没有查询其状态信息时,进程就处于僵死状态。
进程的抢占发生在进程处于用户态执行阶段,在内核态执行阶段时不能被抢占的。linux0.11采用了基于优先级排队的调度策略对进程进行调度。调度函数为schedule()。
from http://hi.baidu.com/minyuanyang/blog/item/e0e1dd3defd2b4c69e3d6263.html