内核开发文档----概述

        内核开发文档
一 概述

    此实验内核采用微内核方式,内核做最小化处理,进程间协同工作靠IPC完成.内核仅仅进行消息的传递和部分必要的硬件维护,如中断,分页.
    整个内核是一个Kernel结构.内核任务就是对这个结构进行维护.其余模块都才有微内核经典设计,交由用户进程来维护.该实验进程不对进程进行区分,所有进程同等对待,没有服务进程,客户进程之分.进程之间的区别只有权限区别,优先级区别.IPC使用类IP协议方式传递消息.IPC是一套协议,而非实现机制.

二 内核简要工作过程

    内核不自己实现引导过程,而是遵循多重引导协议,有第三方引导程序来加载内核.使内核开发过程简化,得到一个统一的运行环境.
    首先,多重引导程序加载内核运行环境设置模块,setup和env到内存3MB处,setup是汇编程序,负责必须的硬件初始化工作,设置GDT,临时栈,初始化8259A.然后调用env模块,env模块之后经由C语言完成,env模块负责完成setup未完成的任务,给内核提供一个统一的运行环境.该统一的环境是,一个线性内存空间,默认的中断处理程序.env完成环境初始化工作后调用内核main,内核正式开始运行.main得到控制权,对起Kernel结构进行初始化,设置die进程,然后人工初始化进程管理器pm,内存管理器mm.内核工作完成.
    环境模块setup,env,内核主模块main,进程管理器pm,内存管理器mm为了编程方便,和内核对他们的依赖性,被编译在同一可执行文件vmgmL中.

三  内核数据结构Kernel

    Kernel在include/kernel.h中定义.其结构如下
    typdef  struct kernel{
        Proc ready;     //就绪进程队列,可以被调度
        Proc block;     //阻塞进程队列,缺乏资源而被阻塞不能被调度
    }Kernel;

    Proc在include/proc.h中定义,其结构如下
    typedef struct proc *Proc;
    struct proc{
        pid_t    pid;        /* 进程ID */
        unsigned long  core;    /* 进程内存空间 */
        unsigned long  stack;    /* 进程调度出去的栈,保存了进程的恢复数据 */
        Message  massage;       /* 发送给进程的消息队列 */
        Proc    next;           /* 下一个进程 */
    };

四 内核API

    内核向对外只提供3个API,
        int send(pid_t pid,void *massage,int length); /* 该API像pid进程发送大小为length字节的消息,消息内容由massage指出. 返回成功发送的字节数 */
        void *recv(int *length);    /* 该API返回消息队列中第一条消息,*length保存了消息的大小 */
        void *recvForm(pid_t pid,int *length); /* 该API接收来至pid的消息,*length保存了消息的大小 */

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值