ParalleX OS 设计与实现 一致性理念设计

本文介绍了一种基于微内核的多核操作系统设计方案,采用一切为消息的理念,将消息传递作为核心机制,并详细阐述了如何通过消息传递进行进程管理和调度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


 

                         基于微内核的多核操作系统设计V0.1

概要

这是一个基于微内核的能体现多核调度的试验性质操作系统。以“一切为消息”为一致性理念。希望将消息传递模块抽象出来成为一个单独的进程。将调度和消息传递分来。整个操作系统由进程管理模块,消息传递模块,内存管理模块,信息调度模块,文件系统模块组成。每一个模块相当于是自己功能的封装。模块之间相互独立。在MINIX中它的内核就是我们所描述的消息传递模块。可以说它就是一个类MINIX的操作系统。

开发环境

硬件环境 I386 系统开发环境 开发语言: C语言,X86 32位汇编语言 编译器: GCC 汇编器: nasm 连接器: ld 调试器: gdb 运行环境:qemu 引导方式 将系统镜像制作成ISO镜像格式以GRUB引导方式启动。

一切皆消息

希望贯彻“一切皆消息”的一致性概念,一个操作系统如果没有一个一致性的概念,就会在设计与开发的时候变的混乱,没有目标。例如LINUX、UNIX的一致性理念是“一切皆文件”,IBM 设计的OS一致性理念是“一切皆批处理”。MINIX确实是使用消息机制,但是消息的发送接收是在一个函数里的,执行的,每次调用send后立即调用recv 可以理解为两个操作被打包成一个“原子”的操作了。他使用了“消息沟通”但是没有实现“一切皆消息”,我们尝试将所有的“沟通过程”抽象成消息的传递。   将发送和接受消息分离开,将消息作为调度对象。 每个模块的功能性例程作为调度实体。根据调度的结果分配CPU资源。 以创建一个进程为例:

Fork : 
   Fork(){
         Send_to (MM);    /*发送请求内存消息*/
		  Send_to  (exec);   /*发送请求加载执行映像消息*/
         Send_to  (sched);  /*发送请求就参加进调度消息*/
         Ready_OK();        /*等待所有组成部分就位*/
   }

  创建一个进程,我们需要从内存管理模块获取内存,从进程管理模块加载进程映像,将自己加入到进程的调度队列中。在这里发送消息是非阻塞的,如上图代码,Send_to()只负责将消息发送进调度队列,Ready_OK()函数会阻塞这个函数,因为需要保证进程所需要的操作都完成后才能从fork()返回。 当消息都发送到消息队列中后,调度模块周期性得到CPU,处理消息队列,安排相应模块例程被调用。每个例程完成操作后,都会对这个进程设置相应的标志位。当调度消息最终被处理后。函数返回,进程进入就绪状态。 当然并不打算将消息调度和进程调度分开来做。进程管理程序会将会变成消息的一种被添加进消息队列中。我们也肯定不可能只有一条队列。如果需要调度某个进程只需要将执行流切换到相应进程就行。当这个进程在放弃CPU之前需要将自己的状态做成消息发送到消息队列。 一种最简单实现方式,也是计划第一版最初级代码: 调度程序写进时钟中断处理程序,保证每次时钟产生中断时调度程序会跑一次。创建一个内核线程,创建这个线程只需要两步:分配内存,指定相应任务函数。创建时将分配内存和指定任务函数作为两个消息写进全局消息队列,时钟产生中断运行调度程序处理这两条消息。处理完成后,进程的状态被制成可调度的消息发送到消息队列。等下次调度程序发起调度时,就可以执行这个线程了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值