我们都在说的操作系统,到底是个什么玩意儿?

大家都知道我们每天工作娱乐的电脑或者手机都运行着一个操作系统:电脑上一般用Windows,程序员和黑客喜欢用Linux,手机上的操作系统有Android或者IOS。但是,大家是否真的了解操作系统是什么吗?它每天都在做些什么事呢?

对于非计算机系毕业的大多数人来说,操作系统就像一个黑箱,我们只知道怎么用,而不知道里面到底发生了什么,今天我们就来一层层揭开它的神秘面纱——

首先在了解操作系统之前,我们先来回顾了解一下运行它的平台——计算机。计算机最核心的部件是CPU,也就是下图的小片片。别看它小,如果要给人类创造力排个序,这个小片片可以说处在金字塔尖尖。它的主要功能就是执行指令,比如算个加法、算个乘法、将数据换个位置等。

CPU是执行指令的部件,那么指令和数据来自哪里呢?答案是内存。

这里有两点需要注意一下:

指令和数据没有区别,指令也是一种特殊的数据,都是用一串二进制的0或1来表示的。

这些0或1存储在内存中内存必须要保持上电状态数据才不会丢失,如果掉电数据就丢了。

那么如果数据想要掉电保存,应该用什么呢?答案是外存,也就是硬盘、U盘、光盘等等存储设备。这些设备具有掉电数据不会丢失的好特性,但是它们也有自己的缺点,即CPU读写它们的速度比内存慢得多。

通常我们的软件放在外存里面,一旦需要执行的话,就加载到内存里面,剩下的就是CPU和内存的事情了。

前面我们讲了CPU、内存、外存,其实除了这些外还有很多其他的芯片或外部设备比如鼠标键盘等,他们通过主板和CPU内存连接在一起,所以主板就相当于一堆的连线。

好了到现在我们知道了计算机的组成,下面我们一起来看看在没有操作系统之前,我们怎么执行软件

我们刚刚已经知道软件存储在外存中,需要运行时才被加载到内存中,那么在没有操作系统的情况下,软件是怎么加载到内存中运行的呢?其实是人为约定好的,CPU一上电就会从外存的特定位置加载一部分指令到内存运行,所以我们需要把一些指令放置到外设的特定位置,一般来说就是外部存储的开头部分,比如硬盘的首扇区。这些指令的作用其实是为了加载真正需要被运行的指令到内存。所以这部分指令我们又称为引导软件。

好了,我们再总结一下:引导软件由约定好的CPU上电机制自动加载入内存执行,引导软件的作用就是加载我们需要被运行的软件指令到内存中运行。由上面过程我们知道,我们编写的软件需要放置到外存特定位置然后配合引导软件才能被执行。一般存放方式如下图:

想一想这多麻烦啊,每次修改软件都得用工具重新把软件烧写到外存特定位置,事实上现在我们很多嵌入式系统就是这么干的,玩过单片机的小伙伴肯定秒懂了。

另外这么干还有一个问题,就是计算机只能同时运行一个软件,要想运行另外一个软件就要关机重新烧写程序。想一想我们现在的电脑可不是只能运行一个软件吧,比如我写这篇文章的时候,我开了一个Word软件,我还会开一个浏览器软件去检索一些有用信息,甚至还会开工作聊天软件方便及时与同事协调工作,这些软件在我看来是同时在运行着的,这些都是靠我们的操作系统实现的。那么怎么样实现软件的切换就是我们操作系统面临的第一个问题。

首先操作系统本身也是一种软件,只不过从功能上说稍微特殊一点罢了,我们来看一下操作系统是怎么执行起来的:引导软件由约定好的CPU上电机制自动加载入内存执行,引导代码的作用就是加载操作系统到内存运行。那么外存存放方式可以简化如下图:

操作系统软件常驻内存中运行,如果我们的CPU是单核的那么意味着同一时间它只能运行一个软件,因为操作系统本身也是一种软件,所以这时CPU正在运行我们的操作系统本身,如果想要运行其他软件,操作系统是可以主动把CPU的控制权让给其他软件的。

比如打开一个Word的过程:首先操作系统把Word软件从外存加载到内存,然后操作系统把CPU控制权交给Word软件,Word就运行起来了。

那么这里问题就来了,假如这时又想运行浏览器,Word会直接把控制权交给浏览器吗?答案当然是否定的,Word程序压根就不知道浏览器程序的存在。那么Word程序会主动把控制权交给操作系统吗?答案仍然是否定的,Word不会主动交权。那岂不是问题无解了,Word要永久霸占CPU了?其实也不是,Word不主动交权,那就被动交权!这依赖于我们CPU的一个机制,就是中断机制。

比如定时器中断,设置了20ms的中断时间,如果没屏蔽CPU中断,CPU就会每隔20ms停止当前正在执行的指令序列,跳转到特定位置执行对应的中断指令序列,而这些中断指令序列实际就是操作系统的一部分,也就是说即使你word不主动交权,有CPU的这套机制保障,我操作系统还是能每隔一段时间获得CPU的控制权。一般我们把这个中断时长叫做时间片比如20ms,操作系统获得执行权后,就会去执行一系列调度算法程序决定下一个时间片应该让哪一个软件执行。

我们再回顾总结一下Word切换到浏览器程序的简单过程:

定时器中断到了Word保存内存现场,便于下次执行时能还原。

操作系统获得控制权,执行调度算法,发现下一个时间片应该交给浏览器软件执行。

操作系统把控制权交给浏览器执行。

以上便是操作系统最核心的功能:「进程调度」。进程是相对操作系统而言的名词,软件被操作系统管理后就叫做进程。进程的生命周期有运行、停止、休眠等等,同一个软件可以被同时打开两次或多次,比如打开两个Word文件,那么对于操作系统而言就会产生两个进程。

除了进程调度这个功能外操作系统还要做一件重要的工作,那就是内存管理。在没有操作系统的年代,我们的计算机同时只需要执行一个软件,那么我们只需要告诉引导软件,加载我们的软件到内存的固定位置执行就可以。我们编写软件时,软件内部的跳转指令要跳转到的地址,全部写成内存的物理地址就行。但是有了操作系统之后,就行不通了,因为操作系统加载软件到内存中运行的物理地址是不确定的,是不能事先约定好的。比如你这一次打开word软件它被加载到内存的一个地方,下一次再打开就是内存的另一个地方了。

因此,我们编写软件时软件内部的跳转指令要跳转到的地址,就不能写成内存的物理地址,而是写成一个相对地址,在真正被操作系统加载进内存运行时才由操作系统确定真正的内存物理地址。除此以外,进程在运行过程中可能需要临时增加内存,比如图片处理软件,需要一块内存容纳需要处理的图片。软件需要向操作系统申请内存空间,操作系统就需要根据当前内存的使用状况,划分一块内存给到进程。

操作系统是如何进行内存管理的,限于篇幅这里就不展开细说,希望这里能起到一个抛砖引玉的作用。

程调度和内存管理是操作系统最核心和本质的功能,一些微内核的操作系统可能只有这两个最核心的功能,当然我们想让计算机真正能用起来一般还需要一个管理磁盘的软件,我们称为文件系统。

另外还有很多的设备驱动程序,对于微内核的操作系统而言这些功能都做成了独立于操作系统的应用软件,而宏内核操作系统就把这些做进了内核变成了操作系统本身,对于微内核和宏内核的优劣势一直存在争议的,一般来说就稳定性而言微内核更胜一筹,因为它足够小,所以足够可控。就效率而言宏内核相对高一些,因为很多常用功能做进内核就意味着更少的进程切换,因为进程切换也是需要消耗CPU资源的。

好了,通过以上介绍,相信操作系统在大家面前也不再是一个黑盒了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200308A0Q42400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券