对<王垠:一种新的操作系统设计>一文的批评(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!)!
相关文章推荐
- 读<王垠:一种新的操作系统设计>
- [王垠系列]一种新的操作系统设计
- 王垠:一种新的操作系统设计
- 黑马程序员——>第十九天<io流(BufferedWriter-装饰设计模式-流操作规律)>
- 支持分布式数据库同步操作的一个设计点:主键问题
- 题目:多功能按键设计。利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按。
- 用char*实现的一个完整的类,包含类的基本操作:一般构造、拷贝构造、赋值转换、重载 > >,< <
- 如何在一个项目中完美融入GreenDao并使用Facde设计模式操作数据库
- <<一种基于δ函数的图象边缘检测算法>>一文算法的实现。
- <操作系统:精髓与设计原理> 进程描述和控制
- 设计一个string类,通过重载“+=”运算符,实现对两个string类对象m1,m2的操作。
- 于渊<orange's一个操作系统的实现>保护模式部分详解
- <C/C++基础> 设计一个复数类(拷贝函数的使用)
- <<orange‘s :一个操作系统的实现>>读书笔记(3)-loader
- <操作系统:精髓与设计原理>分布式系统
- 多功能按键设计——利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按
- 使用NBear设计一个新的实体类时需要进行的操作
- (转)安装 Apache 出现 <OS 10013> 以一种访问权限不允许的方式做了一个访问套接字的尝试
- 多功能按键设计——利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按
- 用string实现的一个完整的类,包含以下操作:重载运算符 > >,< < ,string模板类,fstream对二进制数据读写