全新的操作系统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
在Unix 中, user 本来是用作不同的户登录共享服务器机制
user 是真正的用户
后来主要用作权限控制,弱化的沙箱机
在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的主要内容,如果未能解决你的问题,请参考以下文章