当前位置: 首页 > 操作系统 > 正文

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

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

概要

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

开发环境

硬件环境
I386
系统开发环境
开发语言: C语言,X86 32位汇编语言
编译器: GCC
汇编器: nasm
连接器: ld
调试器: gdb
运行环境:qemu

引导方式
将系统镜像制作成ISO镜像格式以GRUB引导方式启动。

一切皆消息

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

 

将发送和接受消息分离开,将消息作为调度对象。 每个模块的功能性例程作为调度实体。根据调度的结果分配CPU资源。

以创建一个进程为例:

 

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

调度程序写进时钟中断处理程序,保证每次时钟产生中断时调度程序会跑一次。创建一个内核线程,创建这个线程只需要两步:分配内存,指定相应任务函数。创建时将分配内存和指定任务函数作为两个消息写进全局消息队列,时钟产生中断运行调度程序处理这两条消息。处理完成后,进程的状态被制成可调度的消息发送到消息队列。等下次调度程序发起调度时,就可以执行这个线程了。

本文固定链接: http://zmrlinux.com/2016/07/21/parallex-os-%e8%ae%be%e8%ae%a1%e4%b8%8e%e5%ae%9e%e7%8e%b0-%e4%b8%80%e8%87%b4%e6%80%a7%e7%90%86%e5%bf%b5%e8%ae%be%e8%ae%a1/ | Kernel & Me

该日志由 root 于2016年07月21日发表在 操作系统 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: ParalleX OS 设计与实现 一致性理念设计 | Kernel & Me