题目: Outlook on Operating Systems
作者: Dejan S. Milojicic, Timothy Roscoe
单位: Hewlett Packard Labs and ETH Zurich
出版: IEEE Computer 49 (2016)
2025年的操作系统是否还会像现在这样,Unix-like?
作者认为,会发生极大改变。理由如下:
- 硬件复杂度增加;I/O种类繁多,OS要负责通信协议;处理器或主板互联方式趋于复杂(异构),寻址模型和RPC方式也在改变。
- 能耗:除了CPU周期、RAM大小、网卡带宽外,电能源也成为OS要管理和珍惜的对象。OS要支持在系统执行的任何时间,对CPU主核、设备和内存的电量进行动态管理。
- 非易失性主存的流行:NVM会在未来取代Disk和DRAM,同时异构体系结构与下的主存寻址模型可能会更加统一(UMA)。主存控制器会独立出CPU,由软件来控制数据的加密、压缩甚至QoS服务。
- 非rack-scale型集群:传统的通用OS并不胜任现代集群模型,中间件也会换掉。
- 多样化:硬件类型太多(CPU、SoC),同时更新速度太快,现代系统的开发经常跟不上速度。一些本用于嵌入式领域的芯片也使用了通用操作系统,系统开发面临更多挑战(可扩展性、性能和能源节约上)。
- 应用演进:目前的系统并不能很好地支持在上面运作的应用(挑战),但作者认为,我们依旧可以很轻松做出改变,因为过去定下的规矩(如向下兼容、API标准、已公布的编程模型)还算轻便。由于应用改变了,我们的系统接口也有了很大的自由度。对于这一点,我持怀疑态度。
- 大规模Rack-scale计算:集中化运作,业务支持文件存储、关系/非关系型数据库、以及大数据分析等;硬件模型:高性能服务器集群,外加用户自定义的加速硬件,彼此用高带宽内联网络连接,保证好电源和网卡配置,对系统进行配置,然后进行7*24小时不间断运作。此时允许CPU远程访问内存资源(RDMA),同时有了分布式调度,因此OS设计面临更多思考与挑战。
- 数据中心:企业面临应用的部署、升级和维护难题。数据中心的安全问题除了传统的网络流量外,还有大量的用户。作者认为,资源访问控制模型已不再使用,关于信息流的复杂安全策略才是适用的。
评论:最近的研究报告指出,由于万物互联的出现,此时集中式的数据中心、移动个体终端、小型嵌入式设备都接入广义的互联网中,目前尚没有一个工作能解决该互联情况下的安全、可靠以及软件更新带来的各种附加问题的。这将是未来工业界和学术界的目标。近三十年,OS给应用提供的进程抽象一直没有改变。然而一个应用程序已由原先的单进程变为多线程、甚至是多进程、跨主机的多进程协同工作(协程与远程过程调用),因此作者认为OS提供的抽象也要适应需求而改变。这点我认同。对此,我观察到如下两个工作:
- Beyond Processor-centric Operating Systems. HotOS 2015,该工作对系统进行了新的探索,从以处理器为中心转移到了以内存为中心。个人认为,这是从关注计算到关注数据的转变。
- Light-Weight Contexts: An OS Abstraction for Safety and Performance. OSDI 2016,另一篇是对OS对应用提供的抽象进行了新的探索。
重新思考内核是什么?
现代传统通用系统的内核设计:是将其设计为单一的(同一地址空间的)、多线程的共享内存模型,运行在硬件提供的最高特权级别下,处理I/O硬件的异步中断和应用程序的同步异常。
现代的机器硬件又是怎么样的呢?异构处理器(不同体系结构)、不同ISA、物理内存储分立、不同CPU核看到的地址空间不同甚至不共享。后两者涉及到了存储的一致性。
作者提到的硬件特性:不同核之间的数据传输延迟和单核上发生的末级Cache不命中的时间同一量级。
安全机制过时:
- 早先的Unix自主访问控制DAC机制是针对小部分互信(互认识)的组织群体内部人员的。对如今云上的多租户环境一不再适用。安全挑战依旧是隐私、信息流和不可信的第三方应用。更细粒度的(如TapFlow)分布式安全手段(比如distributed capabilities)将是现代研究的议题。
调度:
- 1995年时期没有一个系统预料到,要提供针对一个完整应用的安装环境(如用户态虚拟机)或者突然接手一个正在运行的实例(热机迁移和SMP架构)。空间调度的重要性远胜于现在传统意义上的时间调度。作者认为,调度器要引入集群级别的算法了。
- 思考:Containers are a step in the right direction, but they don’t yet make sense in a distributed machine. 如何理解作者的思路?
虚拟内存:
- 基于页的地址转换硬件最初是为了给应用提供更多的内存空间,后来被神奇地设计成了每个应用有独立完整的和物理内存一致的地址空间。再后来,伴随着编译技术的进步,MMU还被用于代码和数据的重定位、内存区域的写时拷贝COW、判断特定区域的读写操作等(笔者注:几乎现代很多对内存操作的插桩都是对缺页中断动手脚)。
网络协议栈:
- 现代网络适配器的速率和带宽在不断增加,同时几乎所有NIC现在都使用DMA,因此网络通信几乎不受内核约束,详见文章Arrakis: The Operating System Is the Control PlaneOSDI 2014。这个想法最早见于VMM对网络虚拟化的设计“SR-IOV”,并大获成功,由是人们开始发现NIC不再是硬件接口,而是一个交换设备,OS是这个设备的控制面。
数据存储:
- POSIX类型的文件抽象不具备扩展性。现代分布式采用HDFS文件系统,其暴露了数据共享存储节点的情况,以及面向记录的高阶抽象。移动手机上的数据存储也隐藏了OS文件系统细节,取而代之的高度隔离的自定义“容器”,在存储设备上的字节数组对应用程序并不关心,重要的是反序列化后的数据结构。由于现实应用场景下,某些应用的生命期很长,它们的数据可能永远也不用换到磁盘中,因此基于内存的数据库等中间件研究成为热点,OS的设计者也要了解这一部分的诉求。
展望
关于结构:
- 未来是高度异构、分布式的网络组成,一台完整的物理节点上将运行多个内核程序。作者认为他们提出的multikernel会胜出。同时不看好per-application vm/container(请阅读文章EbbRT: A Framework for Building Per-Application Library Operating Systems. OSDI 2016)。但他们都觉得微服务是未来的主流,这是软件工程学决定的。
- 个人认识:不论是unikernel还是multikernel,都是从microkernel到exokernel的各种尝试,libOS已经是大家认可的一种OS的组成方式了。我认为现代全虚拟化中的VM内核也就是libOS,Dune其实是做了一次反向操作,把VM削弱为Process,剔除过多的I/O抽象和内核(系统服务转发给实际的底层内核),可以看成是最轻量级的Container。
关于存储:
- 主存和二级存储会分化。由于主存存在异构和分布式的情况,因此该团队认为OS会把更多底层的信息暴露给应用程序。按需分页只是libOS的一个可选项。
关于网络:
- SDN会成为OS既定事实标准的一部分。OS此时作为NIC网卡的控制面,负责多路复用和包过滤的功能。
关于安全:
- 该团队对安全没有研究(短板),他们只想到了对capability的扩展。不过他们认为,要重新思考和设计可扩展规模下的系统级安全机制。
关于应用:
- OS的接口应该要改变了,Unix-like API不再适用。为了尽量维持现有的生态圈,中间件和运行时生产商会首先考虑这个问题。
关于硬件:
- 现代软件的发展对硬件发展的作用越来越显著。现代硬件的开发周期越来越短,模拟器功能越来越强大,甚至由于FPGA的出现,系统开发者再也不用受制于硬件。因此操作系统和硬件设计人员的界限正在缩小,二者要具备相当的眼界和灵活的思维。
关于测试:
- 最后,形式化工具会被更多用到系统的开发上。seL4是这个方向的开山鼻祖。
收获
- 存在不少具备前瞻性的“干货”。推荐系统入门者阅读。
- 之前德国的团队给出了他们认为的未来世界计算生态圈的图景。
- 这里瑞士的团队也结合他们目前的工作,对OS蓝图进行了展望。
苏黎世联邦理工学院是世界最著名的理工大学之一,享有“欧陆第一名校”的美誉。