从操作系统的设计理念感觉Fuchsia可以成为21世纪的主流操作系统
主题 | Windows | Linux | Fushsia |
---|---|---|---|
一切皆? | Object | File | Object |
内核 | 偏微内核 | 偏宏内核 | (偏)微内核 |
事件 | 同步对象Event,需要主动使用 | signal,被动调用函数 | 结合的Object Signal模型 不支持signal及可直接实现它的机制 |
安全 | Object属性 | 文件权限【简单但弱后】+ACL+selinux | Object权限 |
内存权限 | 对内存块Section的封装 | 无【落后】 | pager, VMO,VMAR |
对象跨进程传递 传递成本 | 非常不依赖父子关系 极低(只需复制handle) | 非常依赖父子关系【落后】 极高(参考Android Binder实现) 【落后】 | 仿go.Channel思想 极低(channel移动对象) |
任务组织 | job,进程,线程,纤程 | Session组,进程组,线程对应内核进程 | job,进程,线程 |
进程创建 | 创建新进程并允许继承对象 | 通过fork半复制进程,Bug丛生, 继承全部文件对象,安全性堪忧 【常见场合fork令人恶心】 | launchpad库重新创建进程 不支持fork |
文件读取 | 对Channel IPC服务对话 | ||
目录可见 | 硬盘分区可见 | 操作系统组织的目录 | 似乎只能看到本程序目录 |
posix线程 | 较为完整 | 较为完整 | 部分支持,不支持进程共享的互斥锁 |
signal | 简陋支持,在实践中几乎不采用 | 历史包袱极重, 开发者难以应付且无法避免, 多组织合作开发时极易导致bug 【落后】 | 不提供使其他线程跳出的方法 无信号安全概念 |
fork | 不支持 可以通过Object继承小范围模拟 | 全量继承对象,重度依赖fork, 对多线程程序支持有限,难以使用【落后】 | 完全不支持 |
锁 | 各种锁的Object | 皆抽象为futex | ? |
隔离 | exe几乎谈不上隔离【落后】 wsl&进程级UWP沙箱 | docker小系统级沙箱 | 进程级完全沙箱 |
服务 | 较为先进但可能被流氓软件利用,管理员控制有限 | 内核线程 乱七八糟? | 优秀简明? |
驱动 | 允许闭源的驱动 | 乱七八糟? | 允许闭源的DDK框架 |
我对posix的态度:这是个被某政府要求实现的标准,其指明了一系列应当实现的功能,但如果操作系统仅实现了posix要求的功能,那就是个落后的操作系统,其更新频率缓慢,难以满足现实中复杂的需求。