前提:

今天在应用嵌入式最新技术的过程中,突然觉得有一股空洞感。自己经常通过站在巨人的肩膀之上去观看的巨人所看到的结果,是否会忽略掉堆砌这些结果的底基呢?

这就使得自己在使用这些结论的时候运气好,使用过程中没有出现差错还好,但是一般情况下或多或少的都会出点问题。由于成果是直接抄来的,这分析问题的时候很难以理清:是使用他人成果的实践过程有问题?还是由于自己当前的技术早已跟新,导致某些当初借鉴基础原理的成果发生了变动,使得这项成果使用的基础条件早已不适合出现在最新的使用方向上了?又或者是这个成果本身就有问题这些我无从得知,只知道结果有问题

因此,想要使用前人提出的成果,最好是在理解前人建立这些成果的基础原理之后,再加以使用。否者在使用过程中往往会降低研究的效率甚至从一开始就往一个错误的方向前进。因此,在网上大致遍历了一遍嵌入式系统的鼻祖——计算机系统之后,特此做下记录,以供之后复习,同时在脑海深处潜意识种下对于嵌入式系统使用原理的基础理解;不过由于是以前的历史,所以但当涉猎往事耳。(此处借鉴的是网上资料[1]

                   

了解计算机系统的第一步:

分析其组成部分哪些,这样在分析结果问题的时候,可能只需要将这些组成部分通过排列组合的形式关联起来,进行多种情况的分析即可(但也不排除他们之间可能会相互影响);

计算机系统组成分析图如图1-1所示,通过图中可以得知,计算机系统作为第零层,在进行第一层分解的时候,可分为硬件系统,软件系统;

图1-1 计算机系统组成

而硬件系统可分为主机、外部设备,软件系统可分为系统软件、应用软件。由于本人在半导体物理方向的理解存在空白区(目前没有进行过相关知识学习),因此硬件方向就暂时只需要知道其各个组成部分的功能即可,其组成原理不便过多研究。(例如CPU只需要知道他是如何处理数据,至于其内部的布局或者如何使用工艺方面等细节一律当做黑盒子处理)。

软件部分由系统软件、应用软件构成。系统软件分为操作系统、语言处理程序、数据库管理系统;应用软件由定制系统、应用软件包、通用软件包构成;本文重点强调部分主要围系统软件;

下面开始从计算机的发展史来进行重点讲解计算机的基础构成原理是怎么样形成的一个过程;

操作系统发展史

先看看目前操作系统的品牌有哪些?功能有哪些?作用有哪些?

操作系统品牌图如图1-2所示,从图中可以得知目前主流的品牌有window、Linux、Mac、UNIX等,目前个人比较熟悉的操作系统可能只有Linux,主要是开源且免费,而且方便的模块化管理使得其在通过嵌入式移植的时候非常方便;

图1-2 操作系统品牌图

操作系统具备的功能至少含有以下几点:

1、进程管理

 进程控制:创建、暂停、唤醒、撤销等,进程调度:调度策略、优先级,进程通信:进程之间怎么通信。

2、设备管理

 设备的分配和调度,设备的无关性动作,设备的传输控制,设备的驱动管理。

3、内存管理

 内存分配、内存共享、内存保护、虚拟内存 —— 我们运行程序从来因为内存过小而失败,只会变慢、卡。

4、文件管理

 存储的空间管理、文件的操作、目录的操作、文件和目录的存取权限管理等。

通过上述操作系统功能来进行分析,我们可以得知操作系统的作用主要是通过控制各个功能模块的来使得彼此间的运作过程井然有序,互不影响;

从资料来看我可以得到关于计算机需要用到操作系统的主要原因有以下这些:

1、有效性:提高系统的利用率,提高系统对于数据处理的吞吐量;

2、方便性:可以不再使用类似于 0 和 1 的计算机语言去控制计算机,能够使得使用高级语言去操作计算机,例如C语言等;

3、可扩充性:适合新功能的加入,最开始初代操作系统是没有当今的联网、多处理操作等要求的,这些都是后面加入的。因此想要操作系统能够长期使用下去,就需要扩充性;

4、开放性:通过定义统一的计算机系统标准,使得系统凡是具备世界标准(OSI)具有兼容其他硬件和程序的功能;

还有个问题现阶段是这个框架是怎么如何发展来的?首先要搞懂这个问题就需要明白,操作系统的前进方向究竟是哪些因素推进的?通过遍历资料[1]我们可以得知用户需求提升和硬件技术进步是操作系统发展的两大动力;所以推进操作系统前进的不仅由技术导致的,所以下面讲解计算机在硬件的进化方面的四个典型阶段;

计算机硬件的四个典型阶段

电子管时代【1946 - 1955】

晶体管时代【1955 - 1965】

集成电路时代【1965 - 1980】

大规模集成电路时代【1980 - 至今】

伴随着硬件的不同阶段进步,操作系统也衍变出今天的框架

手工操作时代 50年代早期;

单通道批处理系统 50年代初;

多通道批处理系统 60年代初;

分时操作系统 60年代中;

下面仔细分析这几个年代的操作系统的特点和功能。

1、手工操作时代

硬件:电子管、接线面板(按钮\开关)(如图 1 - 3所示)

软件:二进制程序,打孔:纸袋和卡片(如图 1 - 3所示)

缺点:需要人手工操作输入、输出、启动,导致效率极低,尽管计算机计算任务比人工处理快;但是一个人只能操作一台机器,而且人工切换任务的时候,机器是处于停止运行状态的,为后面多通道批处理阶段埋下了伏笔;

图1-3 手工操作时代计算机图

2、单通道批处理

硬件:晶体管时代

软件:磁盘,由人将多个任务输入到磁盘中去,形成一个作业队列,然后再按照:装入 —— 运行 —— 输出 —— 装入 —— 运行 —— 输出的循环运行顺序进行,如图1 - 4计算机晶体管时代图所示;

缺点:效率低,处理器虽然能够一次性处理比之前要多的任务,但是老毛病:需要人工操作的问题还是没解决,而且资源利用率也不高,因为装入和输出这个步骤,计算机是没有工作的,处于休眠的,还有就是只能一个人用一台机器,使得多人都需要同时处理任务的时候,需要多台机器;

图1 - 4 计算机晶体管时代图

可能有人觉得逻辑上,确实可以多个人共用一台机器,但是如果将计算机的处理流程转换成时序图,如图 1 - 5 单道批处理系统CPU时序图所示那样去分析,或许能够看到CPU更多的空闲时间。

图 1 - 5 单道批处理系统CPU时序图

通过图可以得知:操作系统在处理任务的时候主要分为三部分。

第一部分:执行完用户程序;

第二部分:控制I/O接口;

第三部分:等待外设完成;

虽然第一和第二部分都是由CPU完成,但是第三部分却是由外设完成,因此此时的CPU处于空闲时间,所以为了能够提高效率,便演变出了多道批处理系统;

单通道处理处理任务的流程如图1-6单道批处理系统流程图所示;

图1 - 6 单道批处理系统流程图

3、多通道批处理

硬件:集成电路

程序:放入到了内存当中,通过数据线传输给CPU

特点:在内存里面存放多道程序,当程序因为某种原因不能继续运行而放弃CPU时,操作系统便调度另一个程序投入运行。这样就能够将单道批处理系统的空闲处理时间,用在其他单道任务上。简而言之,就是在一个任务在运行空闲时间里面添执行另外一个任务,这样子基本上CPU都是一直处于运行状态,可以无脑视为CPU一直在跑,倘若还想要继续提升效率,那么此时从硬件技术上提升可能会比较可观。

至此我可以想象几个非硬件技术上问题:

1、此时的CPU基本可以最大化同时处理多个任务,但如果有些任务比较重要,而此时又CPU被其他一些琐碎的任务给占住了该咋办?之前单通道的时候,人可以还可以通过手动停止的办法切换任务。

2、有的任务时间长,有的任务时间短,如果说时间长又不重要的任务卡在时间短且重要的任务前面,那CPU该怎么办?是否能基于这个问题优化时间长的任务?

3、每个任务的运行时间都不一样,我该怎么知道当前任务运行到哪里了?什么时候轮到下一个任务?

4、你还能想到什么能优化的任务?我思考的问题暂时这么多

多通道处理系统的CPU流程图如图1-7所示,通过对比单通道的时序图我们可以明显的看得出来,这就是

图1-7 多通道处理系统的CPU流程图

4、分时/实时操作系统

硬件:集成电路

软件:程序放入到了内存当中,通过数据线传输给CPU

分时操作系统特点:

实时操作系统特点:实时操作系统强调完成任务的时间限制,必须要在合理范围内,否则会出现系统奔溃等严重问题;但是一般分为两种实时,硬实时和软实时。

由于个人知识暂时短缺,其中具体例子不便过多详述,但到了这里后个人对于后面的计算机的整体功能和作用的理解较于之前直接学人家抄系统,切内核要来的实在得多,踏实的多了。

 

-----待续-----

 

 总结:

1、这是我个人通过一个网站的碎片化知识对于计算机系统的初步了解,因此认知可能具有局限性;

2、笔记的知识没有参照标准书籍去做对比处理,所以可能会有问题,但最大的问题是我不知道问题在哪里,因为我没遇到;

3、较于之前踩在空中楼阁上学习嵌入式,现在心中踏实了不少,至少我知道计算机进步过程不仅仅只是依赖于硬件的进步还有人们对于计算机功能的需求;(至少在写了这篇笔记前,我是这么认为的)

4、计算机系统的进化过程:手工 --> 单通道 --> 多通道 ---> 分时操作 ---> 实时操作,

 

 

 

PS:后续这篇文章肯定还会再改改,再完善的,所以如果有看到这里的人,后续有时间可以再回头看看,笔记只会变动的更加完善;(这个我可以肯定,毕竟这是对自己负责)最后一次改动时间 2024年3月5日

                   

网上资料[1] 操作系统原理(一)操作系统的认识-CSDN博客