了解一下,相当于语文里面的略读,一是看下学习操作系统到底是在学习哪些内容?二是为后面更深层次的理解打个基础。
操作系统我大概分成三个部分去“了解一下”:
- 第一部分,是操作系统的一些基础认知,比如是什么、为什么(哲学的三步走:是什么、为什么、怎么办中的前两步)。即什么是操作系统,为什么要用操作系统。
- 第二部分,操作系统的基本功能。这没啥好解释的。
- 第三部分,就是操作系统相关的概念。对我说的东西,咱们先有一个统一的认识,才能说得清楚。不然你我谈论的东西都风马牛不相及的,那我写个🔨。
来,整。
第一部分 两步走
是什么,怎么理解操作系统
虽然说我们平时在工作、生活当中对操作系统都有所接触,但是迄今为止我们都没有对操作系统进行一个比较严谨的定义。那什么是操作系统呢?
操作系统是管理计算机硬件和软件资源的计算机程序
也就是说,操作系统它实际上是计算机程序,是一款软件。它的功能,是管理计算机硬件和软件资源。
那么它怎么管理呢?它可以通过管理配置内存,决定资源的供需顺序以及控制输入、输出设备等等的方法去管理硬件资源。其次,操作系统也提供了让用户和系统交互的操作界面。
当然,这样的定义其实并不只局限于计算机。在一些手机、平板电脑中也都有操作系统的存在,并且也都符合刚才的定义。
在不同的设备里,操作系统可简单也可复杂。同时,操作系统可以向用户呈现出多种的操作手段。比如说在手机上,我们主要是通过手指的触摸去控制手机里面的硬件设备比如说摄像头、录音设备。在我们的普通的PC机(个人计算机,Personal Computer)里面,主要是通过鼠标、键盘去操作计算机。当然,比如艺术专业的朋友可能用到数位板之类的输入设备。
(以下聊天式小白普及,可跳过)
我们平时生活中接触到哪些操作系统呢?
首先,手机。现在分为安卓和IOS两大阵营,那么我们所说的安卓(label : Android),就是在说安卓操作系统;同样地,我们说苹果的ios,也是在说IOS操作系统。
其次,电脑。我们平时所说的电脑里面,有Windows,由微软所提供的操作系统,还有开源的Linux操作系统以及这个苹果的闭源的MacOS操作系统。后两者其实属于Unix阵营的操作系统,只不过Linux和MacOS是Unix的两个不同的派系。
回到一开始所提到的安卓(goto Android)。我们在国产手机里,经常会听到小米的MIUI,OPPO/VIVO的ColorOS和FuntouchOS以及魅族的Flyme,这一些属不属于操作系统呢?其实它们是操作系统,但是严格来说,不能从安卓系统中剥离出来,因为这些操作系统,其实是基于这个安卓系统改造而来的。比如替换了一些UI设计,比如在摄像功能方面做了一些深度的优化。但是本质上,它们都还属于安卓操作系统。
同样,Linux系列也有CentOS(CentOS将死,Ubuntu称王(狗头保命))、Ubuntu,国产的有Deepin、红旗(我发现只要是国产,总有个叫红旗的系列)等等的一些操作系统。这些操作系统,其实从本质上来讲,都是属于Linux操作系统的。只不过是在Linux基础上面,开发扩展了一些不同的UI,不同的接口而已。
圈里的胖友,应该都知道,前两年,美狗(不好意思,手误)要求谷歌,禁止华为继续使用安卓系统了。华为出于反制(最近制裁和反制出现频率极高),就推出自己开发的一个系统,鸿蒙。至于鸿蒙属于不属于新的操作系统,这里不讨论。
(别跳了,跳到这里行了!)
了解到这里,我们其实就可以对操作系统下一个终极的定义了。
操作系统,是管理硬件并且提供用户交互的软件系统。
也就是说,操作系统它是一款软件,这个软件的功能是管理硬件并且提供用户交互功能的。
为什么,为什么要用操作系统
了解了什么是操作系统,那么我们为什么一定要使用这个操作系统呢?
有几个方面的原因:
首先第一点,我们不可能直接地去操作计算机的硬件设备。比如,我需要计算机去算这个1加1等于几,我们不可能直接告诉CPU:我需要算1加1。而是需要我们借助这个操作系统,让操作系统为我们转告硬件,我们要算1+1。这,就是操作系统必须存在的原因之一。
第二点,计算机发展到今天,各种外接设备纷繁复杂,而操作系统,就为我们提供了统一的操作界面,屏蔽了不同设备之间的差异。有了操作系统,我们就不需要去关注不同的设备,不需要关注不同设备之间不同的接口等等的一些内容。我们只需要使用操作系统,让操作系统帮助我们管理硬件,使用硬件就可以了。
第三点,操作系统的简易性使得更多的人可以使用计算机。更多的人能够使用计算机,就意味着解放和发展了生产力,对人类科技的提升也是大有裨益的。
所以在现代社会,操作系统是必不可少的。
第二部分 操作系统的基本功能
先给尔等列出来,想看的看一下,熟悉的可以跳过讲解。
-
统一管理计算机资源
-
处理器资源
-
存储器资源
-
IO设备资源
-
文件资源
-
-
操作系统实现了对计算机资源的抽象
- 用户无需面向硬件接口编程
- IO设备管理软件提供读写接口
- 文件管理软件提供操作文件接口
-
操作系统提供了用户与计算机之间的接口
- 图像窗口形式
- 命令形式
- 系统调用形式
一、统一管理计算机资源
首先,来看第一点。回顾一下计算机里面,重要的一些硬件的资源:
- CPU资源
- 存储器资源,如内存,硬盘
- IO设备资源,如打印机
- 文件资源
那么操作系统都在这些资源之间发挥了什么作用呢?
操作系统统一管理着这些计算机资源
举一个例子,比如说我需要操作某一个文件。我们并不是直接操作这个文件存储的位置,而是通过操作系统去操作这个文件。再比如,存储器资源。我们在保存一个文件的时候,或者说我们读取一个文件的时候,我们也不是直接去控制这个存储器里面的机械设备去读取的,而是通过的操作系统去管理和读写相关的设备。再比如处理器资源,我们也不是直接的去告诉他,我们需要算什么,而是有操作系统帮我们翻译我们具体要做哪些工作,这个就是操作系统的第一个基本功能。统一管理计算机的资源。
二、操作系统实现了对计算机资源的抽象
操作系统的第二个基本功能,还是从资源的角度去考虑的。
有了操作系统,我们在使用这些资源的时候,有什么不一样呢?
最直接的就是,我们程序员无须面向这个硬件接口进行编程了。也就是说我们无须面向这个处理器、存储器或者是IO设备以及文件,我们程序员只需要面向这个操作系统去编程就可以了。举一个例子,操作系统里面有IO设备管理软件,这个软件就提供着读写的接口,程序员在进行编程的时候,直接使用这个接口就可以了。我们并不需要具体的去接触某一个IO设备。就比如说文件管理软件,它也是属于操作系统里面的。它提供了操作文件的接口,我们编程的时候,直接使用这些接口就可以了,没必要直接去操作这个文件。这就是操作系统第二个功能:操作系统实现了对计算机资源的抽象。
这里面对计算机资源的抽象,其实是通过管理软件来实现的,它屏蔽了硬件的设备。向上给程序员提供了逻辑上的设备,使得我们在使用设备的时候都是面对着一样的逻辑设备。什么叫逻辑设备呢?它对应的就是物理设备,比如我们没有办法直接通过键盘去操作摄像头,但是,我们通过操作系统提供的接口,就可以通过代码去调用一个叫Camera_01的设备,物理上它有名字吗?它没有。只是它在逻辑上,操作系统给它命名为Camera_01,所以我们操作的是这个逻辑设备。比如,我们通过编程,发送信号“0X01”,摄像头就会拍摄照片,那么此时,我们就是通过操作OS(Operating System,操作系统,这里写OS是为了防止两个“操作”给大家带来阅读障碍)给我们提供的逻辑设备来间接操作物理设备摄像头的。这就是操作系统对计算机资源抽象出来的逻辑设备。
以上。
三、操作系统提供了用户与计算机之间的接口
有哪些形式的接口呢?
-
图形窗口的形式
-
命令的形式
-
系统调用的形式
对于图形窗口的形式,也就是编程中常说的GUI(Graphical User Interface,图形用户界面),大家都比较熟悉了,我们在使用Windows系统的时候,我们都是通过鼠标的点击,以及鼠标的滑动去操作计算机的。
命令的形式,多数是在这个Linux操作系统里面使用。当然Windows也有DOS。操作系统提供了一些Shell终端,一般称为Terminal,。通过终端,我们就可以使用命令的形式去使用Linux操作系统。
还有系统调用的形式,这里主要是编程的时候所使用的了。比如说打开文件、关闭文件、读取数据的一些操作都是通过操作系统的系统调用形式来完成的。
以上三个就是操作系统所提供的,用户与计算机之间的接口。用示意图来表示就类似下面这样。
底层是计算机硬件,上面是管理着硬件的操作系统,而操作系统之上,就提供了这个系统调用、命令、图形窗口的接口形式,在接口的上面,是有应用程序以及这个用户。
用户可以直接的通过命令和图形窗口去使用操作系统,也可以通过一些应用程序去使用操作系统。
以上就是操作系统提供的接口在层次结构里面的一个表现。
第三部分、操作系统的相关概念
主要有四个概念,需要我们重点理解:
-
并发性
-
共享性
-
虚拟性
-
异步性
已经了解的可以跳过讲解了。
并发性
首先,并发性。并发性,是后面的三种特性的一个前提,我们必须要了解这里面的并发性才比较好理解后面的三个概念。
提到并发,一定绕不开并行。
什么是并行?
并行是指两个或者多个事件可以在同一个时刻发生
什么是并发?
并发就是指两个或者多个事件可以在同一个时间间隔发生
可以看到,并行是在同一时刻发生,而并发是在同一个时间间隔发生。并行和并发,从文字上面的定义就只有这样的差异。可能还比较难理解,举一个例子。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0dnjQ4Dp-1646720212363)(https://image.codepro.top/img/%E5%B9%B6%E8%A1%8C%E4%B8%8E%E5%B9%B6%E5%8F%91%E5%9B%BE%E7%A4%BA.jpg)]
看上面的时间轴,晚上8点10分,在这个时刻,我正在整理笔记,同时我的猫在吃冻干。也就是说,如果此时拍一张照片的话,这两件事情是可以同时被拍进画面的。此时,我整理笔记和猫吃冻干这两件事就是并行的关系。
那么什么是并发呢?我们再来看一下,同样地,上面的时间轴,20:30到20:40这个时间间隔内,我在整理笔记,我也在这个时间间隔内喝了99杯水。也就是说,此时如果拍一张照片的话,你只能捕捉到我要么在整理笔记,要么手拿着杯子在喝水。当然一般情况下我是不会左手打字右手喝水的哈,我双手打字,以证清白。那么,在这一个时间间隔里面,从20:30到20:40这个时间间隔里面,就发生了并发。
通过这个例子,我们就可以看到,并行和并发的关键的地方就在于是否是在同一个时刻发生的(拍个照片看看)。如果是在同一个时刻发生的话,就是并行的关系,如果是在一个时间间隔之间发生的话,就是并发的关系。
这个并行和并发,又是怎么样在计算机里面体现的呢?
此时需要回想我们前一章学习的一个概念:多道程序设计。
多道程序设计,是并行和并发的基础。没看的可以去看一下。
对于单个处理器来说,程序主要是并发的执行。
这里面我们假设这个绿色的程序A和粉色的程序B。在某一个时刻,只能有一个程序占用这个CPU(处理器),(拍一张照片,只能看到一个程序在运行)此时,两个程序,就是交替运行的。这样,在单处理器里面就只存在这个并发的关系。
什么是并行呢?我们假设有这个双处理器的环境,对于双处理器,每一个处理器上面的程序,都是交替运行的,但是对于两个处理器来说,某一个时刻都是有两个程序并行地在执行。当我们强调这个双处理器的时候,主要就是强调并行的概念。
如果我们强调这个双处理器里面的每一个核(CPU,处理器)的话,这个时候主要就是强调并发的关系。
这就是并行和并发在计算机里面的体现。
共享性
第二个概念,共享性。什么是共享性?
共享性指的是操作系统里面的资源可以提供给多个并发的程序共同去使用,这种共同使用的形式,我们就称之为资源共享。这种资源就具有共享性。
举个例子,假如说上面一整片是在主机里面的内存。红色的内存块,被程序A所使用了,绿色的内存块被这个程序B所使用了。虽然说A和B在使用储存里面不同的部分,我们还是说这个储存被共享了。程序A和程序B都可以使用这个主存,这种多个程序可以同时使用存储资源的性质,我们就称之为共享性。
资源共享,根据属性可以分为两种形式,第一种是这个互斥共享的形式,第二种是这个同时访问的形式。
互斥共享
什么是互斥共享?
当某一个资源被程序A所占用的时候,其他程序想使用就只能等待。等待到这个程序A使用完成并且成功释放之后,其他程序才可以使用这个资源。这种资源共享的形式,就称之为互斥共享的形式。
举个例子,比如摄像头。假如说摄像头被程序A使用,正在录制某一个画面。此时,程序B调用操作系统提供的接口,申请使用摄像头,那么程序B的这个申请就不会成功,因为此时程序A正在使用摄像头。用编程的方式理解就是,此时这个摄像头被“加锁”了。当程序A录制完成之后,准确地来说,是程序A给操作系统发送释放摄像头锁的信号之后,程序B才可以成功地申请使用。这就叫互斥共享。
同时访问
什么是这个同时访问的形式呢?
同时访问就是指某一个资源,在一段时间内,可以并发地被多个程序访问。
这里的同时,是指宏观意义上的同时,假设你给这个资源拍一张照片,它在某一时刻仍旧是只能被一个程序访问或调用。只是在频繁交替调用的时候,我们从宏观角度来看,它就是“同时”的。
举个栗子。比如我们从浏览器下载文件,这是在调用硬盘存储的读写接口(前面讲过文件读写是通过操作系统去调用磁盘存储)。此时,当你下载文件A的时候,浏览器调用了操作系统的文件读写接口,同时,你又在保存Office Word文档。总不能说你下载文件的时候就不能保存Office文档吧?或者,不会是下载完成之后才能保存Office文档吧?就是可能保存文档会比平时慢一些。下载文件和保存Office这两件事,在我们人肉感知上是可以同时进行的,虽然在它内部是频繁交替进行的。这就是同时访问。
当然,如果我们强调某一时刻,一瞬间,那肯定是互斥共享,因为一般情况,在微观条件下硬件资源在某一时刻只能干一件事。如果强调某一段时间间隔,那从宏观角度来看,它就是同时访问的。
虚拟性
虚拟性就是说:
把一个物理实体,转变为若干个逻辑实体。
这里面这个物理实体它是真实存在的,可能是我们计算机里面的某一个设备,逻辑实体是虚拟的。
虚拟的技术主要分为时分复用技术和空分复用技术。
什么是时分复用?
-
资源在时间上进行复用,不同程序并发的去使用
-
多道程序,分时地去使用计算机的硬件资源。
比如刚才这个单核CPU的例子里,在时间轴上多个程序交替的执行,交替地使用CPU的资源,这个就属于时分复用的一种。这样可以提高资源的利用率。
这里面的这个时分复用技术包含虚拟处理器技术以及虚拟设备的技术。
虚拟处理器也就是刚才我们所提到的,借助多道程序设计为每一个程序建立进程
然后,多个进程分时复用,分时地去使用处理器来执行相关的逻辑。
虚拟设备则是把一个物理设备,虚拟为多个逻辑的设备,每一个程序占用一个逻辑的设备,多个程序通过逻辑设备进行并发地访问。
后面学到设备管理的时候,spolling技术就是属于虚拟设备技术的一种。
空分复用技术
-
主要是用来实现这个虚拟磁盘和这个虚拟内存的
-
可以大大提升资源的利用率和编程的效率
对于虚拟磁盘和虚拟内存这里做一个简单的介绍,后面学到设备管理会具体给大家展现我的笔记。
虚拟磁盘就是把一个物理磁盘虚拟为多个逻辑的磁盘。
比如说一块硬盘可以虚拟为C盘、D盘、E盘,这就是属于虚拟磁盘的技术。这个技术可以使得我们在使用磁盘的时候更加安全、方便。比如我们在C盘破坏某些文件,但是不会影响D盘的内容,同样地,在D盘做一些操作的时候,也不会影响到C盘的内容。
虚拟内存技术,从逻辑上扩大了程序的存储的容量
如此一来,程序就可以使用比实际内存更大容量的内存。采用虚拟内存技术,也可以大大提升这个编程的效率,对普通人来说,电脑的体验(流畅度)会更好一些。
异步性
异步性
-
在多大程序的环境下面,允许多个进程并发地执行。
-
进程在使用资源时,可能需要等待或者需要放弃
-
进程的执行并不是一气呵成的,而是以走走停停的形式推进的
在前面我们也介绍了某些资源,他是互斥访问的,如果进程在使用了这些互斥资源的时候,可能就需要等待或者需要放弃。另外,进程的执行,并不是一气呵成的,而是以走走停停的形式推进的。还是以这个资源作为例子,假如说这个进程
在运行到某一个时刻的时候,需要使用某一个资源,而如果这个资源恰好正在被占用的话,这个进程就会停止,或者等待。等待这个资源被释放之后,再获取这个资源继续执行操作。这样,进程就会是以走走停停的形式推进的。
举个栗子理解一下异步性。
假设这一个是这个时间推进的时间轴,这里面有ABC三个程序在交替运行。在某一时刻,程序A释放了摄像头的资源占用,此时 ,程序B和C都需要使用这个摄像头资源。那么这个时候程序B和C就会发生竞争。假设C成功的抢占到了这个摄像头资源,在这个剩下的时间轴里面,可能就是程序C在运行了。另外一种可能,就是程序B潜占到了这个资源,此时可能程序B就先会运行一段时间,然后轮到程序C运行。因此,在这里面,由于我们不知道是程序B抢占到了摄像头,还是程序C抢占到了。所以,进程是以不可预知的速度向前推进的。也就是说我们不知道程序何时执行,也不知道这个程序何时暂停,也不知道这个程序何时完成。这么多不可预知的事情,就导致了这个程序的异步性。