
🎬 个人主页 :艾莉丝努力练剑
❄专栏传送门 :《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》
《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》
⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平
🎬 艾莉丝的简介:

文章目录
- [1 ~> 冯·诺依曼体系结构](#1 ~> 冯·诺依曼体系结构)
-
- [1.1 概念区分](#1.1 概念区分)
- [1.2 计算机的模块化问题](#1.2 计算机的模块化问题)
- [1.3 标准](#1.3 标准)
- [1.4 图解:计算机是如何组织硬件的?为什么要存在内存?](#1.4 图解:计算机是如何组织硬件的?为什么要存在内存?)
- [1.5 通过两个情景,加深对冯·诺依曼体系结构的理解](#1.5 通过两个情景,加深对冯·诺依曼体系结构的理解)
- [1.6 针对冯·诺依曼体系结构的高度总结](#1.6 针对冯·诺依曼体系结构的高度总结)
- [2 ~> 操作系统OS(Operator System)](#2 ~> 操作系统OS(Operator System))
-
- [2.1 是什么------OS的概念](#2.1 是什么——OS的概念)
- [2.1.1 概念认识](#2.1.1 概念认识)
-
- [2.1.2 OS概念图解](#2.1.2 OS概念图解)
- [2.2 为什么------为什么要设计操作系统?](#2.2 为什么——为什么要设计操作系统?)
-
- [2.2.1 目的](#2.2.1 目的)
- [2.2.2 图解](#2.2.2 图解)
- [2.3 怎么办------操作系统是如何进行软硬件资源管理的?](#2.3 怎么办——操作系统是如何进行软硬件资源管理的?)
- [2.4 操作系统的核心功能](#2.4 操作系统的核心功能)
-
- [2.5 如何理解"管理"?------以学校为例](#2.5 如何理解“管理”?——以学校为例)
-
- [2.5.1 管理的例子:学校](#2.5.1 管理的例子:学校)
- [2.5.2 小故事图解](#2.5.2 小故事图解)
- [2.5.3 小总结](#2.5.3 小总结)
- [2.6 系统调用和库函数概念](#2.6 系统调用和库函数概念)
-
- [2.6.1 系统调用和库函数概念初识](#2.6.1 系统调用和库函数概念初识)
- [2.6.2 第二个小故事](#2.6.2 第二个小故事)
- [2.6.3 承上启下](#2.6.3 承上启下)
- 结尾

1 ~> 冯·诺依曼体系结构
冯·诺依曼体系结构,体系架构即电脑是如何组织硬件的!
1.1 概念区分
我们常见的计算机,如笔记本;我们不常见的计算机,如服务器,大部分都遵守冯·诺依曼体系。
比如说英特尔就是遵循着冯·诺依曼体系结构,除此之外还有像哈佛架构(嵌入式------哈佛结构在嵌入式系统里的应用、一些小型设备、手机等采用这个架构)等架构。
我们需要区分一下概念,如果问题问的是电脑的体系架构,就是英特尔、ARM。
如果问题问的是计算机的架构或者计算机的体系架构,就回答冯·诺依曼体系结构。
1.2 计算机的模块化问题
计算机的硬件、软件,都有模块化的处理,包括我们之前写C语言、C++的代码也是,进行了模块化的处理。
模块化的好处就是如果你配一个台式机,可以自己拿着一张配置清单,自己购买、组装,这是硬件厂商和主板厂商约定俗成的结果。

还有诸如游戏主机的配置清单------

拿着这样一张清单,你就可以去配一台电脑出来了,这就会引出我们下一个话题------为什么明明是不同厂商的产品还可以这么配?
1.3 标准
从计算机的模块化问题我们可以进一步引出一个话题------就是 标准 的话题。
人们常说,秦始皇最大的功绩,就是"车同轨,书同文,统一度量衡",也就是定标准。秦始皇大概是历史上第一个指定标准的人。
定标准的往往是行业内的领头羊,要么有技术优势,要么有资本优势。
"车同轨,书同文,统一度量衡"减少了沟通成本,而硬件的标准让硬件单元在尺寸上可以拼在一起。
1.4 图解:计算机是如何组织硬件的?为什么要存在内存?


关于【为什么要存在内存?】这个问题,我们分成三个阶段来介绍,分别是------

关于第一点,我们在前面的图中已经解释过了,接下来,我们来看看存储分级的问题和内存的问题------

也就是说,内存的存在就是让我们不会用很多的钱去买一台效率一般的电脑,而是能够用较低的成本获取一台效率不错的电脑。换言之,内存的存在就是为计算机提供性价比------让我们能够用较低的成本获取一台效率不错的电脑。
1.5 通过两个情景,加深对冯·诺依曼体系结构的理解
了解了冯·诺依曼体系结构之后,我们再来理解一下在日常生活中双方在基于各自电脑进行通信时的整个数据流向问题。
对冯·诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上。比如,请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程。如果是在qq上发送文件呢?

1.6 针对冯·诺依曼体系结构的高度总结
冯·诺依曼体系结构是我们计算机(尤其是英特尔架构下的计算机)的一个主要的计算机的骨骼,那么当我们把硬件以及数据在硬件下如何流动搞清楚了,后面我们谈论到诸如操作系统如何加载、可执行程序加载、动态库加载、包括从网络当中获取数据、或者从键盘里输入数据等等,整个过程我们也就能够理解了,至少有一种情况我们已经可以理解了,比如说在以前写C语言和C++时候用过的scanf / printf(获取键盘的输入),从冯·诺依曼体系结构角度,是把scanf / printf对应的可执行程序先加载到内存------键盘输入是先输入到内存------相当于到了程序内部(因为程序本来就在内存内部),即相当于把内存加载到内存内部的程序了,至此我们就获得了用户所输入的数据,这也就相对比较基础地解释了当时为什么scanf写数据的时候能够让我们看到,包括之前艾莉丝更新的进度条的博客里面写过的进度条,为什么printf打印的东西没有直接显示出来------因为printf打印的东西是放在内存当中,之前在软件层面上我们的说法叫"缓冲区",后面我们在硬件层面上就是写入到内存里面了,写入到内存里面只不过是没刷新出来因而看不到罢了。
现在只要清楚了,后面再谈的时候就会清楚一点。
2 ~> 操作系统OS(Operator System)
2.1 是什么------OS的概念
2.1.1 概念认识
任何计算机系统都包括一个基本的程序集合,我们称之为 "操作系统(OS)"。
操作系统是一个什么样的角色?------我们下面解释。
硬件层面呈现的就是冯·诺依曼体系结构 ;在计算机内部,软件层面还有进程、线程、文件、驱动、内存这样的概念。

我们之前在讲Shell外壳(命令行解释器)的时候讲过一个找媒婆相亲的小故事,uu们可能还记得这张图------

2.1.2 OS概念图解
我们用一张思维导图来理解一下OS的概念------

2.2 为什么------为什么要设计操作系统?
为什么要设计操作系统?实际上就是在问设计OS的目的。
2.2.1 目的

2.2.2 图解
没有操作系统,计算机系统无法正常工作 。


驱动程序(访问对应硬件),操作系统访问硬件(用驱动程序控制)。
底层硬件驱动硬件,操作系统和硬件并不直接关联。
2.3 怎么办------操作系统是如何进行软硬件资源管理的?

2.4 操作系统的核心功能
在整个计算机软硬件架构中,操作系统的定位是:一款纯正的"搞管理"的软件。
我们下面会用一个生动的🌰或者说小故事带大家来理解!
2.5 如何理解"管理"?------以学校为例
2.5.1 管理的例子:学校

2.5.2 小故事图解
如下图所示------

学校里面有校长、辅导员、学生,辅导员是管理者吗?不是。辅导员只是执行者!学生是被管理者,而校长才是管理者。管理者要管理被管理者,本质就是管理数据。这里的校长------管理者就是操作系统,辅导员就是驱动(执行者),学生------被管理者------就是硬件。
这里有两个细节问题------
细节1:管理者要管理好被管理者,不需要和被管理者见面(客观事实)!管理者是如何把"我(被管理者)"管理好的的呢?被管理者身上的相关有效数据才是管理的核心。 管理的本质是对数据做管理!!! 需要根据数据做决策!我们要对特定数据结构做管理。
细节2:管理者和被管理者连面都没见过,管理者又是怎么拿到我的数据的呢?------辅导员。
本来要用Xcell表格对数据做管理的,现在我们让计算机完成这个管理工作!如上图所示,也就是说,我们把日常问题,转换成为对数据结构的增删查改!比如这里就是对链表进行增删查改(管理),即通过对数据结构进行增删查改完成对数据的管理!实际上是对学生的管理工作,进行了一个建模的过程!现实问题转换成为计算机问题。
现实中:任何系统要进行管理,任何问题要让计算机进行解决。
先描述,再组织------这个也是外面的世界里对事物管理的真相。现实问题转换成为数据结构问题。
2.5.3 小总结
我们计算机管理硬件------"先描述,再组织"。
1、描述起来,用struct结构体;
2、组织起来,用链表或者其他高效的数据结构。
2.6 系统调用和库函数概念
2.6.1 系统调用和库函数概念初识
前面我们是往下看的(操作系统---驱动程序---底层硬件),现在我们往上面聊(操作系统---系统调用接口---用户操作接口---用户)。
如下图所示,因为直接让用户访问操作系统内核存在安全问题------比如随意修改内存大小什么的。
操作系统内部会存在大量的结构体和数据结构------为了管理。

库函数的存在就是为了减少用户使用操作系统的成本!但是,不一定每一个库函数都会有对应的系统调用。
操作系统基本上是用C语言写的,C语言需要传参和返回值。
用户要访问操作系统内核中的数据(我们下面会举一个银行的例子,或者说银行有关的小故事,这个访问操作系统内核中的数据的操作就类似于访问银行系统进行存款取款操作),有且只有一种方式------就是通过系统调用(也就是我们后面所说的银行小窗口)。

有个问题,我们使用printf(C语言)cout(C++)向显示器打印,需要通过操作系统吗?需要------操作系统是硬件的管理者。
printf即格式化打印,也是一个库函数,有系统调用,因为操作系统(OS)是硬件的管理者,通过操作系统访问硬件。
2.6.2 第二个小故事
大家应该都有去银行存钱的经历吧?但是,不是所有人都有这样的经历,大家设想一下:正常情况下,银行都会有一个大堂经理,这个大堂经理平常看见年轻人进来会觉得你多少有来银行的经验,简单引领一下就可以了------但是也有例外,我们后面介绍。

银行不能让群众直接进入到银行里面,登记之后再自己进金库存钱,因为群众里面有坏人!如果让群众直接进入到银行里面,会有严重的安全风险!银行又不能不给群众提供服务,但同时又要防止群众里面有坏人!这时候,银行想出了一个好办法------开设一个小窗口,外面的人想要办理业务只能通过这个柜台小窗口,这样银行就能在可控的情况下,保证安全,而且也为群众提供了服务。
这个柜台小窗口就是办理业务的唯一途径,这样也避免了有人不熟悉银行业务办理流程的问题,由工作人员登记电脑、存款取款。

不是所有人都熟悉银行流程,所以银行有大堂经理,比如如果是一位大字不识一个的老大爷呢?老大爷别说电脑了,连字都不会写。是不是就需要有一个大堂经理领着老大爷过一遍流程?这个大堂经理或者说工作人员就是所谓的库函数,有对应的系统调用,目的就是为了降低用户(这里是老大爷)的使用银行的成本的。
我们把系统调用比作银行的办业务的小窗子。

在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。
2.6.3 承上启下
那在还没有学习进程之前,艾莉丝问一下uu们,操作系统是怎么进行进程管理的呢?就是那六个字,"先描述,再组织"------我们先把进程描述起来,再把进程组织起来。
结尾
uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!
结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主"一键四连"哦!
往期回顾:
【Linux基础开发工具 (七)】Git 版本管理全流程与 GDB / CGDB 调试技巧
🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა
