• 休闲生活
  • 教育教学
  • 经济贸易
  • 政法军事
  • 人文社科
  • 农林牧渔
  • 信息科技
  • 建筑房产
  • 环境安全
  • 当前位置: 达达文档网 > 达达文库 > 人文社科 > 正文

    一个微内核操作系统的消息传递及中断机制

    时间:2020-10-18 07:54:51 来源:达达文档网 本文已影响 达达文档网手机站

    摘要: 微内核是一个最小化的软件程序,它具有完整的操作系统。微内核组成部分包括一个非常简单的硬件抽象和一组比较关键的原语或系统调用。微内核以完成系统服务的实现和系统的基本操作规则分离为目标,进而简化内核中最核心部分的设计。本文提出了一个微内核的体系结构,并对其消息传递及中断机制做了分析。

    Abstract: A microkernel is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system(OS). These mechanisms include process management, memory management, and inter-process communication (IPC). The goal of microkernel is to separated the implementation of system services and the basic operation of system separated, and this design makes the innermost part of the kernel is more simple.This text proposed to check a microkernel of Architectures,and detail the mechanism of message passing and interrupt.

    关键词: 操作系统;微内核;消息传递;中断机制

    Key words: operating system;microkernel;messaging;interrupt mechanism

    中图分类号:TP392文献标识码:A 文章编号:1006-4311(2012)30-0196-03

    0 引言

    操作系统内核整体上可分为宏内核和微内核两类。宏内核使全部内核功能和设备驱动在相同地址空间运行。此方案强调效率(特别是在x86个人计算机体系结构上,一个任务转换需要不小的花销)。不过,由于宏内核在相同地址空间里运行,一个设备驱动出现问题,整个系统就会瘫痪。微内核的体系结构尝试把多数的服务进程和设备驱动放在用户空间运行。这样一些高效的内存保护机制的机器的就会具有更强的稳定性和更高的安全性。同时,更具灵活性、扩展性、兼容性[1]。自从荷兰学者Tanenbaum提出Minix操作系统以来[2],微内核开始在操作系统内核体系中大展宏图。当前,在微处理器技术不断发展的情况下,主要开发嵌入式系统。我们要迫切解决的是怎样在性能上实现嵌入式实时、多样、高效的应用。

    一个完整的操作系统内核包括三部分:进程管理、存储管理和设备驱动程序。我们要注意的是,某种意义上来讲,虽然操作系统不包括引导部分,但是操作系统与它却紧密相关,因此,引导器也被看成是必不可少的一部分。

    本文实现的操作系统微内核是基于Intel x86个人计算机架构的。

    本文仅论述内核中的消息传递和中断机制,内存管理的实现见参考文献[3],其它的实现将会在后续文章中提到。

    1 内核系统体系结构[3][4][5]

    操作系统内核的结构模式主要有两种:整体式的单内核模式和层次式的微内核模式。我们主要研究的是微内核模式,并将其命名为MKR(Micro Kernel for Research)。

    MKR主要包括:内存管理,进程管理,消息传递,中断机制,系统调用五个模式。

    1.1 内存管理 本设计系统只使用一个页目录,页大小为4KB,整个系统可访问4GB的线性地址空间。系统进程不超过64个,每个进程地址空间不能超过64MB。每个进程的代码段与数据段的基地址是一样的,而且大小也一样,段大小不超过64MB。内核的代码段和数据段的基地址一样,其大小也一样,内核最多可管理64MB的物理内存,所以段大小为64MB,且线性地址和物理地址相对应。

    1.2 进程管理 系统包括四层。第一层是内核,CPU特权值为0。第二层包括I/O进程和系统任务,或称为任务,有很多的系统将I/O任务称作设备驱动程序。这两个名称可换用,CPU特权值为3,IOPL为3。第三层包含向用户进程提供有用服务的服务器进程,CPU特权值为3,IOPL为 0。第四层包含所有的用户进程,CPU特权值为3,IOPL为0。图2展示了这四层结构。

    依据进程表,内核管理进程,在进程表中,每个进程为一项,其中保存着用于控制和管理进程的全部信息。

    进程调度使用一个三级进程队列,分别对应于系统的第2、3、4层的进程。任务队列优先级最高,其次是服务器队列,最低的是用户进程。同一级队列的进程用的是时间片为100ms轮转调度。

    1.3 消息传递 本系统用于发送和接收消息的函数有4个,它们均通过C库例程调用。其中

    small msg send(dest,&msg);用来向进程dest发送一条4B的小消息。

    small msg receive(src,&msg);用来向进程src接收一条4B的小消息。

    big msg send(dest,&msg);用来向进程dest发送一条4KB的大消息。

    big msg receive(src,&msg);用来向进程src接收一条4KB大消息。

    1.4 中断机制 大多数的硬件中断,将转成消息发送给任务处理。因为是硬件,所以不存在自己的地址空间,写时复制机制也不能用,这样一来,只能采用小消息来发送。

    1.5 系统调用 本设计的系统调用包括所有进程都能调用的系统调用和只有任务能调用的内核调用两大类。内核调用是直接调用内核提供的服务,而系统调用将转成消息发送给系统任务,系统调用不一样,发送给系统任务的消息也不一样,再由系统任务来处理,系统任务实现系统调用,可通过内核调用或发送消息给其它进程。

    2 消息传递

    系统中的进程实现通信依靠的是消息来,运用的是进程会合原理。在发送消息的过程中,内核就会检查目标进程有没有等待发送者发来消息。若在等待,则该消息从发送进程拷贝到接收进程,同时这两个进程都被标记为就绪态。如果没有等待,则发送者被标记为阻塞,并挂入一个等待将消息发送的进程队列中。

    当一个进程接收消息时,内核检查该队列中有没有向它发送消息的进程。若果有向其发送消息的进程,则消息从被阻塞的发送进程拷贝到接收进程,并将两者均标记为就绪;若没有,则接收进程被阻塞,直到有消息出现。

    大多数的硬件中断依靠硬件,大多数的软件中断依靠请求系统服务(也就是系统调用)转换为一条消息。由于硬件中断产生的消息不是进程发的,所以不能使用写时复制机制,那么硬件中断产生的消息只能是小消息,大小为4 字节,它将发送给相应的设备驱动程序处理。

    在 MKR系统中,系统调用(内核调用除外)是通过消息来实现的,不同的系统调用,发送不同的消息给系统任务,再由系统任务来处理,系统任务可以使用内核调用或发送消息给其它进程,来实现系统调用。

    MKR使用四个消息等待队列来存放等待的消息,分别是小消息发送队列,小消息接收队列,大消息发送队列,大消息接收队列。内核将通过这四个队列来交换消息,并对死锁进行排除。

    struct msg_struct * small_send_head;

    struct msg_struct * small_send_tail;

    struct msg_struct * small_receive_head;

    struct msg_struct * small_receive_tail;

    struct msg_struct * big_send_head;

    struct msg_struct * big_send_tail;

    struct msg_struct * big_receive_head;

    struct msg_struct * big_receive_tail;

    内核是消息传递的中间过程,消息传递函数是通过直接调用中断int 0x80来使消息进入内核的,其中寄存器 eax、ebx、ecx的内容作为参数。

    3 中断机制

    3.1 80x86微机的中断子系统[6] 在使用80x86组成的微机系统中采用了8259A可编程中断控制器芯片。每个 8259A芯片可以管理8个中断源。通过多片级联方式,8259A能构成最多管理64个中断向量的系统。在PC/AT 系列兼容机中,使用了两片8259A芯片,共可管理15级中断向量。其中从芯片的INT引脚连接到主芯片的IR2引脚上,即8259A从芯片发出的中断信号将作为8259A主芯片的IRQ2输入信号。主8259A芯片的端口基地址是 0x20,从芯片是0xA0。

    在总线控制器控制下,8259A芯片可以处于编程状态和操作状态。编程状态是CPU使用IN或OUT指令对 8259A芯片进行初始化编程的状态。一旦完成了初始化编程,芯片即进入操作状态,此时芯片即可随时响应外部设备提出的中断请求(IRQ0-IRQ15),同时系统还可以使用操作命令字随时修改其中断处理方式。通过中断判优选择,芯片将选中当前最高优先级的中断请求作为中断服务对象,并通过CPU引脚INT通知CPU外中断请求的到来,CPU响应后,芯片从数据总线D7-D0将编程设定的当前服务对象的中断号送出,CPU由此获取对应的中断向量值,并执行中断服务程序。

    3.2 中断向量表 CPU获取中断向量值,是以中断号为依据的,也就是说,对应中断服务程序的入口地址值。80x86微机支持256个中断,每个中断都要有一个中断服务程序。若Intel CPU在32位保护模式下运行,需要使用中断描述符表IDT来管理中断或异常。MKS系统工作于80x86的保护模式下,因此它使用中断描述符表来设置和保存各中断的“向量”信息。

    BIOS进行初始化操作时,设置了两个8259A芯片支持的16个硬件中断向量和BIOS提供的中断号为0x10——0x1F的中断调用功能向量等。那些在实际中没有应用的向量则填入临时的哑中断服务程序的地址。以后若有需要,会根据实际情况变换某些中断向量的值。而MKR系统,只在刚开始加载内核时需要用到BIOS提供的显示和磁盘读操作中断功能,在内核还未正常运行时,在setup.s[7]程序中会重新初始化8259A芯片并且重新设置一张中断向量表。根本不在使用BIOS所提供的中断服务功能。

    3.3 MKR的中断处理 MKR内核,中断信号一般包括硬件中断和软件中断两类。每个中断都用数字标识,数字区间为0-255。对于中断int0-int31(0x00-0x1F),每个中断的功能由Intel公司固定设定或保留用,属于软件中断。在MKR系统中,将int32-int47(0x20-0x2F)对应于8259A中断控制芯片发出的硬件中断请求信号IRQ0-IRQ15(见表1),并把消息传递中断设置为int128(0x80),把内核调用中断设置为int136(0x88)。

    在设置中断描述符表IDT时MKS内核使用了中断门和陷阱门两种描述符。它们之间的区别在于对标志寄存器EFLAGS中的中断允许标志IF的影响。由中断门描述符执行的中断会复位IF标志,因此可以避免其他中断干扰当前中断的处理,随后的中断结束指令iret会从堆栈上恢复IF标志的原值;而通过陷阱门执行的中断则不会影响 IF标志。在设置陷阱门时又分为set_trap_gate()与 set_system_gate()两种,它们之间的主要区别在于前者设置的特权级为 0,后者是 3。如:

    set_trap_gate(i, intr_reserv_enter);

    set_intr_gate(14, intr_enter[14]); //页面错误,中断门

    set_system_gate(0x80, intr_msg_enter); //消息中断

    由于有些异常引起中断时,CPU 内部会产生一个出错代码压入堆栈(异常中断 int 8和int 10-int 14),而其他的中断却并不带有这个出错代码,因此,根据是否携带出错代码,MKR会将所有中断的入口处理过程分成两类分别进行处理。之后的高级处理过程基本上都是通过调用相应的C函数进行的,MKR通过一个地址跳转表intr_table 调用相应的C函数。如:

    intr_table[14] = &do_intr_page;

    intr_table[32] = &do_intr_clock;

    4 结束语

    微处理器技术的不断更新,推动了嵌入式系统的开发热潮。我们需要迫切解决的是怎样在性能上满足嵌入式实时、多样、高效的应用。

    微内核是一个最小化的软件程序,它具有完整的操作系统功能。微内核结构包括一个一点都不复杂的硬件抽象和一组比较关键的原语或系统调用。微内核以完成系统服务的实现和系统的基本操作规则的分离为目标,因此而简化内核中最核心部分的设计。

    参考文献:

    [1]潘清,张晓清.操作系统微内核技术研究[J].软件学报,1998,9(8):609-612.

    [2]Tanenbaum A.S.等著Operating systems: design and implementation[M].清华大学出版社,2006.

    [3]陈少波.一个微内核操作系统中内存管理的实现[J].价值工程,2011,12(总258期/第30卷).

    [4]陈少波.一个微内核操作系统中进程管理的实现[J].制造业自动化,2012,1(上)(第34卷).

    [5]陈少波.一个与微内核操作系统配套的引导器的实现[J].制造业自动化,2012,3(上)(第34卷).

    [6]Intel■64 and IA-32 Architectures Software Developer"s Manual.http://

    [7]赵炯.Linux内核完全剖析[M].北京:机械工业出版社,2006,1.

    相关热词搜索: 内核 中断 传递 操作系统 机制

    • 生活居家
    • 情感人生
    • 社会财经
    • 文化
    • 职场
    • 教育
    • 电脑上网