Linux作为一种强大的操作系统内核,因其稳定性、安全性和灵活性等优点,被广泛应用在数十亿台设备和各种各样的场景中,并拥有强大的开发者社区支持。
操作系统是计算机的大脑,它和人的大脑一样,经历了从无到有、从弱到强的演化过程。如今,站在万物智联的时代浪潮上,操作系统将如何前进?
9月1日,中国科学技术大学软件学院教授、梦宁软件创始人孟宁,做客异步社区直播间,和大家聊了聊操作系统的前世今生,并带来了他的新书《庖丁解牛Linux操作系统分析》,本书是他在中国科学技术大学多年来执教Linux课程的总结,对于操作系统,听听他怎么说!
嘉宾简介
孟 宁
目前任职于中国科学技术大学软件学院,梦宁软件创始人,多年来专注于自主可控某础系统软件研发和教学。
著作有《代码中的软件工程》和《丁解牛Linux操作系统分析》等。其担任主讲人或讲师的“Linux 内核分析”慕课课程入选2015 年网易云课堂“顶尖中文大学计算机专业课程体系”,课程“Linux 操作系统分析”获得了教育部“国家精品在线开放课程”和“国家级一流本科课程”认定,被中国高校计算机教育 MOOC 联盟评为“优秀课程”。
孟宁首先表示,要深入理解操作系统,不仅需要学习操作系统原理,还要了解其发展的历程。他从封闭式计算站、分时系统、多道程序和系统调用,再到经典操作系统和分布式操作系统等发展阶段,依次为大家梳理了操作系统的发展脉络。
01操作系统的发展历程
在最初的阶段,并没有真正的操作系统存在。IBM 701 开放式计算站(open shop)是由使用者手动操作的,工作效率⼗分低下。为了减少计算时间的浪费并使开发人员从计算机房中解放出来,开发人员被要求在穿孔卡上准备程序和数据,然后提交到计算中心去执行。开放式计算站由此变成了封闭式计算站(closed shop),所以封闭式计算站里的操作员可以被认为是最初的操作系统。
批处理(Batch Processing)系统
当主计算机 7094 执行程序的时候,两台卫星计算机同时做着输入和输出的工作。操作员完成了现代操作系统需要做的主要工作,比如决定程序运行的顺序,也就是任务调度。如果想让你的程序得到优先执行,就得通过操作员想办法插队。
这种计算模式就是批处理(batch processing)系统,IBM 7094 所使用的共享操作系统(shared operating system)是早期的批处理系统。
分时(Time Sharing)系统
然而,批处理费时费⼒,⽽且给了计算机管理员太⼤的权⼒,⿊客痛恨权威的传统,很⼤⼀部分原因归咎于计算机管理员有权决定哪个程序优先运⾏。
1962年MIT的Project MAC (⼈⼯智能实验室的前身)引⼊了分时的概念,之前曾被称为偷时(Timestealing),因为它利⽤⼀个程序运⾏中间的空隙执⾏另外⼀个程序。同时电⼦打字机、电视机和⿏标陆续引⼊计算机系统作为人机交互设备,再也不⽤靠打孔和打印来和计算机交互。
多道程序(Multiprogramming)
多道程序技术改变了操作系统。在大型机时代之后,小型机时代到来,计算机成本降低且硬件功能增强。处理器开始支持程序的并发执⾏和控制。中断技术使得处理器能够控制多道程序的并发执⾏,这时多道程序操作系统开始出现。多道程序操作系统不是一次只运行一个程序,而是将大量程序加载到内存中并在它们之间快速切换,从而提高CPU利用率。这种切换非常重要,因为I/O访问速度很慢,CPU在等待输入数据或输出完成时会空闲,快速切换不同的用户程序可以提高CPU利用率。
系统调⽤(System Call)
所以系统调用的概念诞生了,系统调用(system call)概念的诞生是操作系统发展的一个重要里程碑。Atlas Supervisor 是第一个提出现代操作系统诸多概念的系统,它率先采用了系统调用的工作机制。
系统调⽤将⽤户程序和操作系统内核之间进⾏了隔离,通过添加⼀些特殊的硬件指 令和硬件状态让⽤户程序进⼊操作系统的过程更加正式、可控,这样有效保护操作 系统提供的底层代码,使得整个系统更加稳定,不会让⽤户程序的错误造成整个系统的崩溃。系统调⽤机制的采⽤使得操作系统超越了早期操作系统只是提供⼀些底层 API 函数 库的状况,这时的操作系统超越了 API 库函数,因为通过系统调⽤提供了有效的保护机制。
随后,孟宁向大家介绍了一些经典的操作系统和分布式操作系统,并分析了未来操作系统发展所面临的挑战。
经典操作系统
分布式操作系统
到今天,操作系统需要面对的
挑战主要有这样几个方面:
万物互联的终端多样性,边缘计算、泛在计算、函数计算 …
异构算⼒蓬勃发展, CPU 、NPU 、GPU 、DPU…xPU
软硬件协同优化越来越重要,以CPU为中⼼的ISA作为软硬件的标准界 ⾯受到挑战
在PC和移动互联网时代,整个硬件平台是相对标准的,但是在万物智联的时代,硬件平台不是标准的且差异化非常大,随着计算需求的多样化,异构计算在不同的场景下,不只是终端多样,算力的需求也是多样化的。
这时传统计算机的结构可能会面临困境,以CPU为中⼼的ISA作为软硬件的标准界⾯受到挑战。不管是经典操作系统还是分布式操作系统,所管理的资源都是三大类:计算、I/O和存储。
02未来,操作系统有哪些可能性?
孟宁用几个例子分享了他对于操作系统未来的展望。
操作系统未来展望
第一个例子是
Hypervisor OS
Hypervisor OS
原来的操作系统是场景禁锢的操作系统,现在要创建一个微内核的操作系统平台,通过组件化适配不同的硬件环境。在这个平台上,可以组装出各种类型的操作系统,这是微内核架构的常见做法。然而,智者千虑,必有一失,孟宁指出,当出现新的情况或需求变更时,我们在软件工程上需要的不是稳定性,而是不断的迭代和重构。
另一种思路是
平衡高效、安全、易用的
全系统可编程技术
我们现在需要的是能够跨物联网终端的技术,大到汽车,小到手机、手环等等,目前最常用的两种实现技术分别是当前非常火爆的可以在内核中注入的eBPF和拥有很好的跨平台特性的WEBASSEBLY。
云原生落地困难重重
云原生主要集中在微服务架构和云端来支撑环境的部署。Kubernetes解决了应⽤编排和调度⾃动化问题,但是使⽤Kubernetes不仅要改变开发习惯,还要学习很多新概念新技术。云原⽣落地的难点在于使⽤,将云原⽣底层的复杂技术包装成应⽤开发者熟悉的应⽤层概念⾄关重要,基于FaaS的应⽤层编程框架可能是⼀个有前景的演化⽅向。
云原生技术涉及到的复杂环境决定了想要掌握它就要面临更高的挑战。
“The farther back you can look, the farther forward you are likely to see. ”
—— by Winston Churchill
你能看到多远的过去,就能看到多远的未来!
——温斯顿 丘吉尔
可以做哪些尝试?
选择Wasm字节码
选择的原因:
执⾏速度可以达到原⽣C代码的92.79%;
冷启动性能仅毫秒级,仅1ms左右;
主流的各种⾼级语⾔都可以编译成Wasm字节码,在开发者⽣态上更有包容性;
安全性和模块化能⼒。
选择了Wasm之后,需要面临的问题是我们需要在不同的泛在环境下提供应用开发框架,要给这个应用开发框架提供工具集成开发环境。
基于Wasm的跨平台应⽤开发框架
孟宁提到他们正在开发一个基于WebAssembly的Faas高效资源管理平台,使用Kuasar提供Wasm沙盒管理,在Kubernetes之上构建的基于WebAssemblv的Faas无服务计算平台。使用Wasm替代OCI容器解决函数冷启动问题,实现不需预热环境,按需加载和部署函数,使用Kuasar降低Containerd的Pod沙盒开销,提高冷启动性能,使用WasmEdge SDK定制化运行时,实现Wasm的HTTP函数式启动和函数级的资源限制,以及资源消耗的监控统计与管理。
直播最后,孟宁强调了当前硬件环境的复杂性和重要性。他指出,过去我们所管理的硬件环境相对比较标准,但是现在的情况已经不再如此。现代硬件产品具有多样性和复杂性,一个产品的需求决定了我们需要开发什么样的产品。为了满足这些需求,我们需要从不同的角度进行分解,深入理解产品的需求和功能。
孟宁老师的讲解全面而简洁,相信广大读者和用户听完这一课都能加深对操作系统的了解,也能更好地理解操作系统的本质和精髓,同时对操作系统的未来发展有了更加清晰的认知。
审核编辑:汤梓红
评论
查看更多