您的位置:首页 > 其它

对<王垠:一种新的操作系统设计>一文的批评(3):一个操作系

2014-02-14 07:50 169 查看

一个操作系统

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

请注意

他不是任何现实的语言,也不是一个真实的过程

该过程不是建立在任何已有的系统之上的

这为了让有些东西看起来更直观一些

目前而言没有任何痕迹表明这个系统是确实可行的

//----节点node0
//----这是进程0(或者微函数0,以下的进程和微函数请自行区别)(pid0)----
//微函数是有参数和返回值的,这里的(*)匹配任何类型,我省略了微函数返回值的声明
TINY((*) argv)("/process/pid0")//这是微函数的声明,这里直接将它安装到系统的/process/pid0 目录下,
{
Torrent test = new Torrent("data1/test.torrent");//
//或者可以这样 : Torrent test = System.fs.get<Torrent>("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!)!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐