博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读<王垠:一种新的操作系统设计>
阅读量:7189 次
发布时间:2019-06-29

本文共 3349 字,大约阅读时间需要 11 分钟。

  hot3.png

一个操作系统

为了说明某种情况, 我先写一段伪代码模拟从Torrent到下载MP4,然后创建窗口再到播放的过程!

请注意

  • 他不是任何现实的语言,也不是一个真实的过程
  • 该过程不是建立在任何已有的系统之上的
  • 这为了让有些东西看起来更直观一些
  • 目前而言没有任何痕迹表明这个系统是确实可行的

//----节点node0//----这是进程0(或者微函数0,以下的进程和微函数请自行区别)(pid0)----//微函数是有参数和返回值的,这里的(*)匹配任何类型,我省略了微函数返回值的声明TINY((*) argv)("/process/pid0")//这是微函数的声明,这里直接将它安装到系统的/process/pid0 目录下,{    Torrent test = new Torrent("data1/test.torrent");//    //或者可以这样 : Torrent test = System.fs.get
("test.torrent") String name = test.getName(); String infoHash = test.infoHash().toHexStr();//假设这个种子的InfoHash为:FF //这在标准输出中写入:InfoHash is :FF! System.out.println("InfoHash is :${infoHash}!");//这里借用Dart形式的带变量字符串(${infoHash})来渲染一种智能的气氛!! if(!"abc.mp4".equals(name)){ test.setNmae("abc.mp4",FLUSH);//修改种子的名称,然后直接(算是手动触发)同步到存储器!.至于底层如何同步暂时忽略 } MP4 mp4 = (MP4)test.download2("/data/test.mp4");// 同步下载文件(当然也可以使用异步的写法), //保存到目录/data下(简单的强制类型转换看作是自动的解码把) Window win = System.gui.createWindow("Window Title!");//在系统中创建一个窗口,当然窗口也可以使持久化的数据结构 EventBus hub = mp4.play(win);//将下载之后的视频扔到窗口播放! hub.onEnd([](){ win.close();//播放完毕,自动关闭窗口 }); Process current = System.process.getCurrent();//获得当前进程其路径为:/process/pid0 current.addData("key",mp4.getMeta("a"));//将MP4的Meta跟pid0关联,因为我觉得构建结构化的查询过程比较复杂,在此只用KV数据库的方式将数据与进程关联 current.funsh()//将数据刷到System中 //--这是另外一种形式 //System.send("pid1",mp4); //把mp4发送到进程为pid的外部进程,结构化的进程之间通信 //System.send("pid1",mp4) //这里的进程不仅仅是一个动态的"任务",也是文件系统之上的一个结构(他是持久化的) //直接获得进程1,用路径的形式让他看起来像是从文件系统中得到的(如果文件系统中的进程不存在,则自动创建一个) Process p1 = System.process.get("/process/pid1",true); System.send(p1,mp4)//将"结构化的MP4"发送到进程1, //然后退出或者循环等待!如果是微函数退出,则发送过程就交给操作系统来管理!如果阻塞,提供超时!具体底层实现不解释!}//END OF TINY//----节点node0//----同一系统上的另外一个进程:id为pid1----TINY("/process/pid0"){ System.process.get("/process/pid1");//获得pid0保存在process的进程 System.onReceiveData([](Process sender,MP4 data){//这是进程1,接受进程0的数据 if(sender.name == "pid0") { Window win = System.gui.createWindow("Window 2");//在系统中创建一个窗口 win.show(data);//然后播放 } });}//----不同节点(node1)上的另外一个进程(pid2)----TINY("/process/pid2"){ MP4 m = System.network.get("node0:/data/test.mp4");//这个过程是瞬时 Meta metaFromMP4 = m.getMeta("a");//从mp4中获得meta信息 Process ppp = System.process.get("node0:/process/pid1",false);//从节点0获得关联进程 Meta metaFromProcess = (Meta)ppp.getData("a");//从节点0进程1关联的数据库中获得meta信息! if(metaFromProcess != metaFromMP4){ //... ERROR }}//----这是调用代码---tiny函数可以任意组合,这种每一种组合可以表示为一个任务!!Tiny tiny = System.getTiny("node0:/process/pid0")EventBus busPid0 = tiny.getEventBus();//这里返回一个事件插座!busPid0.onExit(....);//监听pid0是否结束运行tiny.run(1,ANYTIME);//将Tiny加入运行Schedule,这里的1表示只运行一次, //ANYTIME表示系统可以调度在任何时间运行(看操作系统心情),说明时间对函数的影响将不考虑! //当然也可以设置优先级,或者让他立即执行或者安排在哪个函数之前或者之后???System.run("node0:/process/pid1");//同步,立即运行System.run("node1:/process/pid2");//System.exit();//退出系统,继续...Reloop!//Process.onExit(....);//

这个系统的简单说明"

  • 一切都是结构(对象)
  • 数据传输是带类型的结构
  • 这里的System的角色是所谓的操作系统,可以看到他负责管理所有资源,以及负责通信!
  • 分布式系统中所有的节点共享一个System!
  • 所有节点的路径结构nodeX:/someDir/someData,其中nodeX表示特别指定某个节点,缺省为当前节点
  • 这个系统中的任何东西都是可以进行某种持久化的,flush进外存,或者save进KV!
  • 这里的Process是所谓的微函数,同时他是有名称的除了方便调用(他是一个可以持久化的数据结构,当然在运行的时候他是动态的,为什么需要持久化?因为可以作为一些持久化的数据的Root!)!

转载于:https://my.oschina.net/kialun/blog/199728

你可能感兴趣的文章
我的友情链接
查看>>
安装配置管理 之 安装和配置 Java J2SE Development Kit(JDK)
查看>>
ORACLE常用函数实例
查看>>
php 调用webservers 错误,请高手帮助
查看>>
软件包管理 之 Freshrpms.net 资源介绍,及apt 和yum 的应用
查看>>
我的友情链接
查看>>
PHP在Apache下500错误的原因
查看>>
实用cmd指令(4)
查看>>
jenkins pipeline脚本 构建 java 项目例子
查看>>
mybatis的接口实现操作数据库(注解)
查看>>
我的友情链接
查看>>
【Scrapy】 selector 学习记录三(Selector详细介绍)
查看>>
CPU负载观察及调优方法
查看>>
Linux命令-自动挂载文件/etc/fstab功能详解
查看>>
教你玩转django
查看>>
LINUX 安全运维 (一)
查看>>
Maven学习总结(九)——使用Nexus搭建Maven私服
查看>>
Java基础学习总结(1)——equals方法
查看>>
PHP整理笔记七字符串处理
查看>>
我的友情链接
查看>>