全新的操作系统Fuchsia

Posted bzero

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全新的操作系统Fuchsia相关的知识,希望对你有一定的参考价值。

以下为参加HelloGCC 笔记,不是做编译的,其他场次听不懂,只能听懂这个,内容来自许中兴博士的ppt。

Fuchsia 的来历

  • 多年的 android, ChromeOS  开发经验一方面让 Google 在操作系统方面 积累了 足够多的人才和组件,另一方面也充分认识到Linux kernel 很 多的局限性

  • Fuchsia 是一个全新的操作系统称。 Google 挑选了一系列它认为合 适的技术和组件进入这个操作系统,比如:微内核基于能力访问控制, Vulkan 图形接口, 3D 桌面渲染 Scenic ,Flutter 应用开发框架。目 前支持的编程语言是: C/C++, Go, Rust, Dart

  • Google2016 年中放出了所有的代码,但是没正式宣布这个项目 标,开发社区目前有一个 IRC 频道进行交流

  • 支持的架构是 X86 -64 和ARM 64 ,支持的设备从 IoT 到服务器

Fuchsia 解决现代 OS 痛点

  • 原生进程沙箱,解决应用安全和分发问题(黑客) 原生进程沙箱,解决应用安全和分发问题(黑客)

  • Linux: namespace, control group, unionfs => docker

  • 稳定的驱动接口,硬件厂商可独立维护(硬件)

  • 系统模块化,分层设备厂商可以灵活定制专有(友商)系统模块化,

  • 基于 Vulkan 和物理渲染的纯 3D UI 3D UI ,全局光照(用户)

  • Flutter 应用开发框架(开发者)

关于进程沙箱, Fuchsia 重新思考 三个 Unix 的基础抽象机制

  • 全局文件系统

  • 用户

  • 进程的创建

全局文件系统

  • 在UnixUnix 里,存在一个全局的根文件系统 里,存在一个全局的根文件系统

  • 它是每个进程共享的基础资源

  • 文件系统涵盖了非资源: /proc, sys

  • 网络是例外

  • 在Fuchsia Fuchsia 里,没有全局根文件系统

  • 文件和系统成为一个局部概念(局限在每进程里),从而内核数据结构没 有file

  • 用namespace  来定义一个进程能够访问的资源

  • 每个 name(路径)对应一个资源进程

User

  1. 在Unix 中, user 本来是用作不同的户登录共享服务器机制

  • user 是真正的用户

  • 后来主要用作权限控制,弱化的沙箱机

  1. 在Fuchsia 中,在底层 (Zircon, Garnet) 没有用户的概念

  • 用namespace 来控制进程能够访问的资源

  • Capability -based access control

  • 从而在进程里没有 uid

进程的创建
  • 在Unix 中,新的进程 由老fork fork而来

  • 新的进程继承父全部资源

  • 一种偷懒的设计

在Fuchsia Fuchsia Fuchsia 中,新进程的创建需要从头开始
  • 创建 process, thread process, thread

  • 父进程建立初始的 namespace 到资源 channel handle的映射

  • 调用 process_start 显式的告诉内核新进程可以跑了

  • Fuchsia 内核的 process 数据结构里,没有 file 和uid

仿佛是专门针对漏洞利用作出的设计

典型的漏洞利用步骤
  • fork()/exec() fork()/exec() 开反向 shellshell shell

  • 继承 uid( 或者通过获得 root uid root uid root uid 进行提权 )获得泛在授权

  • 访问全局文件系统

在Fuchsia Fuchsia 里,以上机制全都不存在
  • 创建进程时显式立 root namespace

  • 没有 user ,从而没有 ambient authority (DAC/MAC)

  • Capability-based access control:

  • 能访问的资源是父进程赋予namespace

  • 看不到初始 namespace 之外的任何资源

微内核

Linus vs Tanenbaum 的论战

  • Tanenbaum: Linux是七十年代的技术。。在 1991 年写宏内核是错误的。争论早就结 年写宏内核是错误的。争论早就结 束了, 微内核已经赢。我是教授Minix ,只是我的 hobby,所以别拿 Minix 说事。

  • Linus: Linux 比你写的 Minix 强多了。微内核只是你们学术界的 玩具,我看过所有强多了。它们实际上只是在重复宏早就用过技巧

  • Mach, Hurd

  • Performance overhead :

  • Context switching (user space <=> kernel space)

  • Thread scheduling


Fuchsia 架构

channel

channel 是进程间通信的(唯一)机制
  • 一个 channel 有2个handle ,h1, h2 ,从一头写入消息,另一头读出

  • 一个进程在创建时有些初始 channel handle

  • 要与一个服务 x建立通信,进程创建一个 channel ,自己拿 h1 ,把 h2 通过已有的 channel(root_svc)

  • 发 送给相应的服务,拿到 h2 ,将其放到自己的事件监听循环里 ,

  • 示意 api :connectToService(root_svc, “x”, h2)

  • 比如 open() ,在 linux 里会在进程的内核数据结构增加打开文件描述符,不涉及到其他;在fuchsia里则是创建一个 channel, 把远端发送给相应的服务,建立通信道

Fuchsia 在各个平台上的可能优势
  • 在服务器平台上,原生的进程沙箱机制将带来新安全特 在服务器平台上,

  • 在桌面平台上,类似于游戏 在桌面平台上,类似于游戏 3D 引擎 pipeline 的图形栈以及毫 的图形栈以及毫 无遗产负担的实现将使电子娱乐应用变得更为高效;兼容庞大的 Android 生态

  • 在移动平台上,系统的模块化方便第三设备厂商全面 在移动平台上

Fuchsia 分层
  • Fuchsia 是一个像 Lego Lego玩具一样组装起来的操作系统

  • 谷歌在设计时已经考虑了其他厂商可能会深度定制适配自己产品的操作系统,所以模块 谷歌在设计时已经考虑了其他厂商可能会深度定制适配自己产品的操作系统,所以模块化做得比 Android彻底很多

  • 厂商的深度定制可以从下任意一层开始

  • Zircon:  微内核, 基础服务进程(设备管理器心驱动libc 进程间通信接口库 fidl)

  • Garnet: 设备层面的系统服务:软件安装,通信媒体图形包管理更新等

  • Peridot:  用户体验的基础设施层:模块,存储服务等

  • Topaz:系统的基础应用, Web, Dart, Flutter Web,

  • 这些名字来自于 Steven Universe

以内存为中心的设计
  • Virtual memory object (vmo)

  • 代表一个内存对象,懒分配 

  • vmo 通过 handle  在进程之间传递

总结

  • Fuchsia 在安全方面具有重要的创新

  • 在未来 Fuchsia 会成为一个非常重要的操作系统 


以上是关于全新的操作系统Fuchsia的主要内容,如果未能解决你的问题,请参考以下文章

谷歌秘密研发的全新操作系统Fuchsia,到底有多流畅?

如何看待 Google 最新的系统 Fuchsia?

鸿蒙OS与谷歌Fuchsia

另一个安卓?华为测试全新操作系统

google为啥要从头开发一套新的操作系统fuchsia

谷歌公布全新操作系统:取代Chrome OS和安卓两款操作系统