Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42444
  • 博文数量: 16
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-28 13:50
文章分类
文章存档

2009年(16)

我的朋友

分类: LINUX

2009-11-30 22:08:07

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()。
5、linux内核对内存对管理
   在linux0.11内核中,内存被划分为几个功能区:首先内存从起始位置开始,划分出一个内核模块区,接着是用于提供硬盘或软盘等块设备使用的高速缓冲区,最后是主内存区,如果含有RAM虚拟盘的系统,主内存区头部还要划分出一部分供虚拟盘存贮数据。
   linux同时采用了intel cpu的内存分段和分页管理机制,因此我们首先要分清3种地址以及它们之间的关系:
   (1)逻辑地址:有程序产生的与段相关的偏移地址部分,在intel保护模式下就是指程序执行代码段限长内的偏移地址。
   (2)线性地址:是逻辑地址到物理地址变换的中间层。段中的偏移地址加上相应段段基地址就生成了一个线性地址。
   (3)物理地址:指的是出现在cpu外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。
   除此之外,我们还需要知道什么是虚拟内存。虚拟内存是指计算机呈现出要比实际拥有的内存大得多的内存量。一个比喻可以让我们很好的把握这个概念:假如说我们把一个大型的程序或者说整个计算机上的程序比喻成一个大型图书馆,cpu就是读者,而实际内存呢就是一个阅览用的书桌,那么假设我们有足够长的时间去看完图书馆所有的书,可是即使是这样,我们也不必一次把图书馆的所有书借来放到你看书的桌子上,当然桌子也放不下。因此,我们只把目前要看的书放到书桌上,等看完了在换另一本书。那么好,在计算机中也是这样的,一个程序的运行一般都是有一定顺序的,我们不用把整个程序全部加载到内存中,只是加载当前运行需要到部分,由cpu来执行,等这部分执行完了,在把另外需要的部分加载到内存中来。这样,虽然每次运行的程序只是内存中的部分,但是对于cpu来说,它面对的其实还是整个“图书馆”。这里的这个“图书馆‘就是虚拟内存!
 
在linux0.11内核中,给每个程序(进程)都划分了总量为64M的虚拟内存空间,因此程序的逻辑地址范围是0x00000000到0x40000000。
阅读(914) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~