如何理解一个操作系统

如何理解一个操作系统

操作系统从无到有的关键几点

操作系统通常比较复杂,各种系统服务和功能组件非常丰富,深入研究一个操作系统可能会经常感到无从下手,特别是没有很多资料的时候。我认为一个操作系统从雏形到成为流行的、好用的操作系统有以下几个关键节点:

  1. 具备任务切换能力,从而实现了突破处理器个数限制的多任务处理。切换能力之于操作系统,犹如供血能力之于人。本身也许没有那么复杂,但如果没有的话,操作系统的一切都是白谈。
  2. 具备任务选择能力,即所谓调度,能够从众多任务中选择出合适的任务进行运行。各种调度无论听起来多么高大上,其根本目的就是当前任务无法运行时(或者停止运行时)该让哪一个任务接着运行。
  3. 具备任务间的协作能力,即任务间的同步与通信。如果各个任务之间完全独立,相互没有任何联系,那么将非常适合并行处理,但是联系本身具有普遍性,即使抽象成程序的任务也不例外,这就有内在的通信要求。
  4. 提供适当的用户接口。这是一个关键性的步骤,操作系统如果不能为用户所使用,那么就不能发挥其价值。除非这个系统仅仅为其开发者自己所使用。这是一个在通用操作系统领域非常明显的步骤,但在嵌入式操作系统(MMU-Free OS)里关注度没有那么高的步骤。但是,这个步骤的实现好坏,对整个系统的可用性至关重要。

有以上四点,我认为一个操作系统的关键内容已经有了,系统大厦的奠基完成。要让操作系统具备竞争力,还需要在上面的基础上考虑下面这几点,当然这些也更虚,很多也不是技术层面的事情:

  1. 提供更加完备的系统服务,例如内存管理,中断管理、文件管理、IO管理、网络服务、GUI界面、可观测性、关键功能组件等等。
  2. 融入现有的生态圈,如何让形形色色的已有应用简单、方便地接入到当前的操作系统上来。已有生态不好接入,将会使得用户需要承担过高的使用成本,这很容易造成寸步难行的尴尬局面,毕竟建立全新的生态需要非常长的周期。
  3. 让各应用提供商愿意使用或者愿意为该系统开发引用,开发产品。利益才是驱动发展的关键,这是商业模式上的选择。

剖析操作系统的一种视角

鉴于以上的分析,我们可以将一个操作系统抽象成为下面这一个标准模型,这可能与教科书模型有些差距,但我认为这个模型更利于剖开一个操作系统。
在这里插入图片描述

在逻辑上,我们可以把任何一个操作系统分成处理器层(上下文层)、调度层、同步层、服务层和应用层。各个层的内涵显而易见,但是需要强调一下处理器层。

上下文层

上下文是一个任务的运行状态的集合,有了一个任务的上下文就能够在任何想要的时候将任务重新投入运行。上下文是什么?可以有一个很明确的定义:运行时的寄存器和任务的私有栈。这两个东西如果没有发生变化,那么可以认为任务的运行环境没有发生变化,当任务执行流被打断后需要重新运行时,只要能够提供这两个成分,那么没有理由认为任务不会按照原有的程序执行流执行。

按照我的理解,甚至可以实现跨设备的任务迁移:将任务的上下文传输到另外一个设备,然后再目标设备上利用镜像重新构造任务,之后将上下文更新到接收到并且矫正好的上下文上。

在做上下文保护的时候,需要将寄存器的状态保存在任务的栈上(总需要一个线程独有的地方存储),因此上下文层有两个重要的功能:

  1. 提供如何构造上下文的方法(在任务栈上设定初始的寄存器值)。
  2. 提供上下文切换的方法。这包括任务与任务、任务与中断、中断与中断等。

用户接口层

用户接口层是一个非常关键的一层,甚至可以决定整个操作系统的实现形态和组织架构以及一些关键的功能。为了体现其重要性,我认为需要回答下面几个问题:

  • 用户如何在操作系统上开发应用?与操作系统是耦合(需要于系统一起编译)的吗?
    答:在通用操作系统例如linux上,提供系统调用,这种方式可以使得应用开发和操作系统本身的开发和更新独立。对于嵌入式操作系统,一般是应用与操作系统一起编译,成为一个镜像,也就是应用开发是与操作系统开发是强耦合的。
    这里进一步会有一系列新的问题。前面的方式会生成很多独立的镜像文件,如何控制这些镜像的地址布局?使用同一种地址布局吗?一定能够使用同一种地址布局吗?如果不能,只能够特事特办具体问题具体分析吗?(MMU和MPU)

  • 需要控制用户权限吗?
    答:权限控制也是可选的,如果需要权限控制,那么就不能直接使用API调用的方式使用操作系统提供的服务,而只能使用系统调用。

  • 应用开发者如何使用系统服务?
    答:对于没有权限控制的部分,可以直接采用API的方式进行调用。对于有权限控制的部分,需要通过一些间接手段,例如系统调用。

  • 如何执行用户的程序?
    答:对于与内核一起编译的模式,可以直接创建任务。对于单独编译的,需要提供例如命令行、脚本、任务启动器等方式来为用户程序创建任务。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值