回眸操作系统

我们在常年的业务开发中,往往会把眼光聚焦在自己所开发的领域中去,老话说「善百技而专一长」,我们在专一长的时候,也不能忘记了 善百技。特别是程序员,如果局限于自己的领域,个人的发展往往会比较受限,因而也要学会时不时地回顾过往的知识,特别是那些经典的东西,比如算法操作系统编译原理概率论其他编程范式等等,往往会有温故而知新的体验,那些年少时还不太理解的东西,现在回头看看,那都是珠玑呀。

如果回头想想操作系统是干啥的?我想这是一个很有意思的问题。可以试着从这几方面来看这个问题,为什么(Why)?做什么(What)?怎么做(How)?

  1. 为什么要有操作系统?
  2. 操作系统又做了什么?
  3. 操作系统又是怎么做的?

带着问题去回顾以前学过的操作系统,总没有错。

为什么要有操作系统?

在开发 Android 应用的时候,往往会用到某些别人或者自己开发的轮子,例如 RetrofitOkHttp 等等。用这些轮子的目的在于,这些轮子帮我们屏蔽了一些困难,节省了一些开发时间,而不需繁琐地去处理其他冗余细节。操作系统一定意义上也是这样的,如果直接与硬件进行交互,直接操作内存地址等等,那真是哔了狗。

why os

我们认为计算机主要有硬件和软件组成,而操作系统就是介于两者之间的系统,屏蔽了底层的实现细节,暴露出美观的接口。操作系统是为了给应用软件提供一个运行时环境而存在的,这就是操作系统存在原因。

操作系统做了什么?

知道了为什么要有操作系统,那么看看操作系统又做了什么。操作系统的客户是应用程序,所以我们从这个层面来分析操作系统要做什么。每个应用都可以认作是从输入到输出的模式,操作系统也不例外。操作系统接受应用程序的输入,并为应用程序提供运行环境,并输出到硬件上(例如存储到本地上、显示到屏幕上等等)。

  1. 输入输出。

这里面的输入输出,主要涵盖了二个方面,一是硬件 I/O,二是软件 I/O。操作系统的主要功能之一是控制所有的输入/输出设备,它必须向设备发出命令,捕获中断并进行错误处理,它还要提供一个设备与系统其余部分之间的简单易用的接口。

  1. 存储管理。

storage manager

应用程序的运行需要内存空间,操作系统必须提供良好的内存管理机制,内存是相对有限的,操作系统也必须有设计良好的内存策略以性价比最高的方式来满足需求。另一方面,应用程序还需要持久化处理,操作系统也做了支持,一般也就是文件系统。

操作系统怎么做的?

在明白为什么要有操作系统,操作系统要做什么之后。接下来就是操作系统怎么做的了?但这部分确实最难的地方,在简短的章节里面,很难涵盖所有知识。只能是大家去看看 《现代操作系统》这样的书籍了,T_T。写这篇文章的目的在于提示大家,在忙于业务开放的同时,也要记得回眸下以前的知识,经常地串一串各个知识点,融汇贯通。例如这些知识点,和 Android 系统做一下对比,你会发现很多惊喜的东西哦。


文档信息


Published: January 23 2017