开发一个操作系统有多难?
题图:by watercolor.illustrations from Instagram
阅读文本大概需要 6 分钟。
今年上半年,谷歌因为遵循美国政府命令,需要中断与华为的业务往来,不再给华为提供 Android 服务。这也意味着未来华为仅限于使用公开、开源版本的Android系统。如果撤销 Android 系统使用许可,将意味着华为会立即失去接收包括安全更新在内的 Android 系统更新的资格,Google Play商店、Gmail、地图、YouTube等相关应用将不能使用。虽然国内的用户不受影响,但是这会给海外用户致命的打击。特别是欧洲市场,毕竟华为是欧洲市场上第二大手机供应商。
面对这种困境,华为以“华为一直在开发操作系统,名为鸿蒙”面对。但鸿蒙一直处于“犹抱琵琶半遮面”的状态,直到上周末。华为才正式在华为 2019 开发者大会上揭盖鸿蒙的面纱。
华为借着 5G 刚起步的契机发布自主研发系统,在业务造就一方声势。我个人保持支持的态度,希望鸿蒙在下一次能给我们带来一些新的东西。接下来,本文是介绍自己对操作系统的一些理解。
1.操作系统是什么?
我在读大学的时候,有一门《操作系统》的课程,授课老师是一位老教授。他姓龚,人和蔼可亲,我们称他为“老龚”。因为老师人好、授课方式让人很容易接受,所以我这门课学得比较好。我现在还记得,当时老龚对操作系统的定义。
操作系统是控制和管理计算机硬件和软件资源、合理地组织计算机工作流程以及方便用户使用计算机的一个大型程序。简单来是,操作系统是一个大型软件,它内部会有很多设备的驱动程序。这些程序会将各种硬件设备(CPU、内存条、硬盘、外接设备等)运行起来;另外它还给用户以图形化界面或命令行终端提供交互方式。
操作系统是分为内核态和用户态。
内核态也叫做管态、核心态,或者超级用户模式。它拥有所有硬件的完全访问权限,可以执行任何机器指令 ,并且可以访问系统中存储器的位置。如果不了解存储器概念的同学,可以去搜索下计算机原理。因为我们生活和学习用到的计算机都是基于冯诺依曼架构实现的。这里就不多做介绍。用户态是只使用机器指令的一个子集,一般应用程序(游戏客户端等)都是运行用户态。用户态是禁止运行影响及其的控制或可进行 I/O 操作的指令。
2.难在编译工具链
这里需要先了解下本地编译和交叉编译。本地编译是指在当前编译平台下,编译出来的程序只能放到当前平台下运行。例如在 Windows (x86 架构)上编译 EXE 的应用程序,这个 EXE 也只能跑着 Windows 系统上。交叉编译则是在当前编译平台下,编译出来的程序能运行在系统结构不同的目标平台上。例如在Windows(x86 架构)上编译出 Android 系统(ARM 架构)的应用程序。
了解交叉编译,来看看什么是交叉编译链。交叉编译链是为了实现编译跨平台架构的程序代码所构成的工具集。交叉编译链主要由 Binutils、GCC、GLibc 三个部分组成。工具集有免费版和付费版。目前免费版本主要由三大主流工具商提供,第一是 GNC(以源码形式提供、需要我们手动编译制作),第二是 Codesourcery,第三是 Linora。付费版有 ARM 原厂提供的 armcc、IAR 提供的编译器等。
因此,制作一个操作系统的难点之一是如何搞定交叉编译工具链接。再者,编译器的用户群体是应用开发者,会有使用不同平台去开发应用程序。华为推出方舟编译器,称能通过多终端 IDE 开发环境来支撑鸿蒙系统。
3.难在驱动
操作系统需要各种硬件驱动程序来使硬件完成正常的工作,例如让摄像头拍照、声卡播放声音等。如果驱动程序不够稳定,那会引发各种不兼容情况。如显卡驱动不能完全设配显卡,可能会出现玩游戏时画面卡顿、播放视频出现花屏或绿屏等。
4.应用软件难
操作系统最终是面向与消费者。如果一个操作系统没有数量足够多且稳定可用的应用软件,那也是无尽于是。试想一下,如果一个手机只能打电话和发短信,不能安装微信、不能追剧看视频、不能安装游戏,谁还会去买这个手机呢?
推荐阅读:
不积跬步,无以至千里
长按二维码,添加关注!