全球人工智能


文章来源:聊聊架构  作者:Nur Hussein



2016谷歌开始研发Fuchasia操作系统


Fuchsia是谷歌开发的一个操作系统,这是一个差不多从头研发的新系统。2016年8月,Fuchsia的开发新闻在技术新闻网站上引发了轰动,不过很多细节依旧成谜。Fuchasia是一个开源项目,无论开发工作还是相关的文档都还在持续完善中,除了该项目为开源之外,谷歌并未透露更多信息,包括其真正用途。根据零散分布在网上的文档、源码等信息,我们可以推测:Fuchasia是一个专为PC、平板电脑及高端手机所开发的一套完整的操作系统。


核心硬件管理层Magenta的介绍


Fuchsia的核心是Magenta microkernel,它负责管理硬件,并为系统的使用者空间组件提供抽象层,类似于Linux对GNU等项目的支持。而Magenta建立的基础——Little Kernel则是Fuchasic的开发者Travis Geiselbrecht在加入谷歌前所研发的一个项目。LK的目标是要建立一个能够运行在有限资源的微型嵌入式系统(类似于FreeRTOS或ThreadX)之上的小型内核,而Magenta则是针对更复杂些的硬件——想要允许的话,需要至少64 bit的CPU,配以一块内存管理单元。因此,Magenta在LK的有限功能上进行了扩展,它使用了LK的“内部构造”,包含线程、互斥锁、计时器、事件(信号)、等待队列、信号及虚拟内存管理器(VMM)。在Magenta中,LK原本使用的VMM已经有了实质提升。


Magenta的一个关键设计在于运用了capability,这是一个计算机科学的抽象概念,封装了访问某个对象的权限。这一概念是1966年由Dennis和Van Horn首次提出的(点击这里查看原PDF),指的是一个不可伪造的数据结构,在操作系统中担任控制访问权限的基元。在Magenta中,开发人员使用了capability的模型,以定义某个进程与内核、与其他进程的互动方式。具体实现中,Magenta采用了名为handle的构造,只要有进程请求创建内核对象,就会自动生成handle,用于处理与该内核对象的“会话”,几乎所有系统调用都需要通过handle来实现。handle包含与其相关的权限,也就是说它们定义了在使用时允许哪些操作。此外,handle可以通过进程复制或转移。可授予handle的权限包括读写相关核心对象的权限,只要是虚拟内存对象即可,无论能否被映射为可执行对象。对于沙盒中的特殊进程来说,handle非常有用。因为经过调整,handle可以设置为仅允许对系统的某个子集可见、可访问。


由于我们将内存作为可通过核心对象访问的资源,各个进程可通过handle来获得对内存的应用。在Fuchsia中创建进程,代表着一个负责创建的进程(比如shell)必须手动为子进程完成创建虚拟内存对象的工作——这一点与传统不同:在传统的Unix类内核,比如Linux中,内核会完成大部分的虚拟内存设置,自动处理进程。Magenta的虚拟内存对象可通过多种方式来映射内存,而且在进程执行中灵活性很高。甚至可以想象完全不对内存做映射的场景,在此场景下,通过类似文件描述符之类的handle,也可以对系统进行读写。尽管这种设置允许任何类型的创造性使用,这也意味着想要运行进程,需要通过使用者空间的环境完成许多的基础架构工作。由于Magenta是按照微内核来设计的,操作系统的大多主要功能组件也是当作使用者空间进程来运行的,其中包含驱动程序、网络堆栈以及文件系统。最初从IwIP引导的网络堆栈最终被Fuchasia团队所编写的用户网络堆栈所取代。网络堆栈是一个中间性应用,简于使用者空间的网络驱动,以及需要网络服务的应用之间,通过网络堆栈,系统提供了一个BSD socket API。


Fuchsia的文件系统:minfs


默认的Fuchsia文件系统被称为minfs,也是从零开发的。驱动管理器创建了根文件系统内存,为其它安装在下面的文件系统提供虚拟文件系统层(VFS)。然而,由于文件系统是作为使用者空间的服务器来运行的,需通过服务器的相应协议来访问。文件系统中的各个实例都包含后台运行的服务器,以处理所有的数据访问。借助使用者空间的C library,对于只进行调用以开关、读写文件的用户程序来说,协议都是透明的。Fuchsia的图形驱动程序也作为使用者空间的服务存在,按照逻辑分为系统驱动以及应用驱动。两者之间促进沟通的软件层被称为Magma,是一个提供合成与缓冲区共享的框架。绘图堆栈的某部分即Escher,这是一个基于物理的渲染器,通过Vulkan来提供渲染API。


完整的POSIX兼容并非Fuchsia项目的目标,足够的POSIX兼容性可通过C library来提供,C库也是musl项目连接Fuchsia的端口。这样一来,将Linux程序移植到Fuchsia系统会比较方便,但本身运行在Linux平台上的复杂程序自然需要更多的工作。


启动Fuchsia系统运行试用


可按照本文档(fuchsia.googlesource.com/docs/+/HEAD/getting_started.md)中的指南获取自己的Fuchsia安装程序并运行,方法十分简单。该脚本设置了一个QEMU实例,大家可自行尝试。它可以在模拟x86-64系统的q35或“标准PC“的机器上,以及模拟ARM-64系统的virt或Qemu ARM-64虚拟机上运行,也可以在真机上运行。可按照指南来安装,针对机型包括配有Intel Skylake的Acer Switch 12寸笔记本、Broadwell超迷你电脑NUC(next unit of computing)以及Raspberry Pi 3。就目前来说,虽然通过兼容外设也能在类似的硬件上运行,但对这三款机器的物理硬件支持也十分有限。


目前,针对Fuchsia系统编写应用的支持还不充分,还需要很长时间的开发和文档构建。据了解,谷歌的Dart编程语言在该系统中有着广泛应用,而基于Dart、针对iOS和Android的移动应用框架Flutter的SDK就被移植到了这个系统中,似乎是创建图形应用程序的主要方式之一。负责窗口绘制以及用户输入的compositor叫做Mozart,基本上相当于Linux上的Wayland/weston。当引导Fuchsia OS进入图形模式时,我们可以看到在带有选项卡的图形环境中包含了五个dash shell。第一个标签展示的是系统消息,后面三个是可以在Fuchsia环境中启动应用程序的shell。最后一个标签是Magenta shell,里面的内容更为基础简单,由于缺少Fuchsia环境,无法通过它来运行图形应用。标签可以通过Alt-Tab来切换。


目前这套操作系统能够运行的程序并不多,用户组件的大多内容仍在积极地开发中。可以运行的案例应用包括一些命令行程序,比如经典的Unix fortune,还有一个能在屏幕上绘制旋转方块的图形应用,叫做spinning_square_view。尽管目前来说内容确实有限,不过敬请持续关注Fuchsia的资源库,开发者正在积极更新,以便让这个系统功能更加丰富。相信很快就有更多功能可以尝试。


Fuchsia的发展前景总结


看到有新的操作系统出现,并且还需要很多开发工作才能逐渐完善,并投入使用总是颇有趣味。Fuchsia还不完善,但目前看来发展的方向是正确的。由于谷歌在这个项目中投入了许多资源,目前针对Magenta以及其它Fuchsia组件的开发都非常活跃。对大众来说,所有承诺的功能都是能够实现的。


Fuchsia官方介绍:https://fuchsia.googlesource.com/

GitHub资源:https://github.com/fuchsia-mirror/magenta




《全球人工智能》旗下业务


AIJobs:免费为全球数万名AI开发者提供求职服务,目前提供约2000个AI技术岗位

(咨询加微信:aihr007

OpenAI:免费为全球Top30AI开放平台的数十万AI开发者提供最新动态、交流和学习

(咨询加微信:bushyu)

AISchool:专注为全球AI科学家和学习者提供线上线下的技术交流、学习和直播等

(咨询加微信:AIzhineng007)

投稿:news@top25.cn  活动合作:wxsaomu


热门文章推荐

重磅|15种排序算法动画演示(附视频)

爆闻|107篇中国学者论文涉嫌造假遭撤稿,中国科协约谈Springer Nature总裁(附完整名单)

干货|年薪百万的机器学习专家,为什么不产生价值?

论文|谷歌推出最新“手机版”视觉应用的卷积神经网络—MobileNets

Facebook开源Caffe2深度学习框架:开发者可快速训练和迭代AI模型

最新|哥伦比亚机器学习研讨会:GAN理论/应用最新进展总结(附视频)

重磅|微博终结者爬虫






相关问题推荐