系列文章目录
第三章 进程概念
文章目录
- 系列文章目录
- 前言
- 一、计算机的硬件结构
- 二、运行过程
-
- [2.1 程序文件存储](#2.1 程序文件存储)
- [2.2 程序的加载与本质](#2.2 程序的加载与本质)
-
- [2.2.1 程序加载过程](#2.2.1 程序加载过程)
- [2.2.2 程序加载的本质](#2.2.2 程序加载的本质)
- [2.3 内存的意义](#2.3 内存的意义)
- [2.4 数据的流动](#2.4 数据的流动)
- 三、操作系统
-
- [3.1 认识操作系统](#3.1 认识操作系统)
- [3.2 操作系统的作用](#3.2 操作系统的作用)
- [3.3 操作系统的管理](#3.3 操作系统的管理)
- [3.3 系统调用](#3.3 系统调用)
- 总结
前言
我们学习完如何使用应用软件后,让我们来了解一下应用使用的底层,本节我们将开始接触进程,将注意到更加深刻的变化,理解计算机的运行原理。
一、计算机的硬件结构
我们的计算机并不是由硬件随意堆叠形成的,它有具体的构造布局,具有分工明确的执行过程,这是我们在计算机学习中必须要了解的知识。
硬件结构多种多样,不同的结构有着不同的应用情况和特性,而我们主料的硬件结构为:冯・诺依曼结构

想要理解该体系结构的运行过程,就得先了解各个部件的组成与功能:
- 输入设备: 向计算机传递数据、指令、信号的硬件。常见的有:网卡、键盘、鼠标、磁盘
- 输出设备: 计算机处理后的数字数据,转换为人类可感知形式的硬件。常见的有显示器、磁盘、网卡、打印机
- 中央处理器: 即CPU = 运算器 + 控制器,前者负责数据运算,后者负责解析命令、调动硬件
- 存储器: 即内存,计算机用于存放数据、程序、指令的部件。
说到内存:就会有
外存。外村就是磁盘中的存储空间。
在计算机中,输入和输出设备被统称为外设 ,其中的网卡与磁盘特殊,它们具有双重身份。磁盘的双重体现在:对文件的读写(Input / Output ,这是一内存的角度看的)
二、运行过程
2.1 程序文件存储
我们可知:程序运行,必须先加载。那么程序运行之前存储在哪?从我们之前的Linux上翻译过程可知,可执行程序是由源文件处理而来,因此程序运行就存储在磁盘当中。
2.2 程序的加载与本质
2.2.1 程序加载过程
软件运行,必须要加载。那么为什么要加载呢?我们回到计算机的硬件体系:

我们从体系中数据流动 可以发现:CPU的获取与写入只能从内存中进行,而我们知道程序是由CPU执行,访问数据并处理 。所以,程序就必须从磁盘加载到内存当中,可以说:软件运行先加载是由体系结构决定的。
2.2.2 程序加载的本质
其实,数据加载的过程本质是IO操作,将磁盘中的数据Input到内存当中,
同理我们的printf也是先输入到缓冲区从而再加载到显示器的。以上的过程其实就是:数据的流动,实际上是从一个设备"拷贝"到另一个设备。
从上可以得出,体系结构的运行效率是由设备"拷贝"的效率决定的,并且数据层面上CPU之和内存交互、外设和内存交互。
2.3 内存的意义
那我们发现其实不需要内存,这个结构其实也可以运行即:

你的直觉是对的,但是这就涉及到另一个概念------存储分级。
存储分级:按读写速度、容量、成本、与 CPU 距离划分层级,形成存储层次结构,逐级衔接,解决 CPU 高速运算和低速存储的速度矛盾。
这个概念说明了:离CPU越远的存储空间越来越大、越来越便宜、效率降低,越近则相反。就如磁盘与CPU的交互来说,磁盘如果读写速度为毫秒,那么CPU读写速度就是纳秒,这就是我们常知的木桶效应了,最拉的决定了上限。
如果你用
CPU级别存储的当磁盘,就可以忽略这个问题。但别忘了,现在市面上的内存条的价格。
而内存的存在,就可以减小这之间的速度差距,很好地平均了效率与价格的反比关系,实现较低的成本实现计算机的产生。
冯诺依曼体系的出现实现了计算机的普及,构成了现在互联网万花齐放的环境,这是跨时代的一步。
2.4 数据的流动
通过QQ实现两人的异地聊天过程:本质是冯诺依曼结构的电脑进行数据传输,登录QQ将其加载内存,然后通过这里重复的步骤。

这样也是体现了数据流动的本质:数据的拷贝
三、操作系统
3.1 认识操作系统
操作系统定义:管理计算机硬件、软件资源,为应用程序提供运行环境的系统软件,是硬件与用户 / 应用软件之间的桥梁。
操作系统是个基本程序的集合,进行软硬件管理的软件,由内核、其他程序等组件组成。
- 内核: 内核常有进程管理、内存管理、文件管理、驱动管理等功能
- 其他程序: 如函数库、shell程序。
另外,操作系统还分为:广义和狭义。
狭义 的操作系统指的是内核,通常被指向处理底层的工作方式,而广义 的操作系统指的是内核+软件,当然这些软件是系统级别的,是为应用市场上的软件提供基本环境的。

市场上便捷设备的操作系统安卓,就是在LInux内核的基础上重设外壳程序形成的,实现安卓上的程序开发。
3.2 操作系统的作用
让我们注意到日常:我们的键盘、U盘、鼠标连接电脑时,连接上后几秒,才能够进行操作。这是因为不同的硬件设备具有不同的管理方式即驱动方式 ,而驱动系统的上层就是操作系统。
而操作系统为什么要管理这些硬件呢?让我们想一想没有os管理的情况:你想使用鼠标,需要自己先打开该设备的驱动,同理其他的设备也是这样。所以,我们就能理解到:操作系统是通过管理这些硬件的手段,为我们用户提高方便的操作环境

这样的操作系统能够做到:
- 对上: 为⽤⼾程序(应⽤程序)提供⼀个良好的执⾏环境
- 对下: 与硬件交互,管理所有的软硬件资源
软硬件体系
上面的体系,从用户到硬件体现了一种层状结构,体现出一种:高内聚、低耦合的表现方式。
高内聚:相同功能、逻辑的代码放在一个内部
低耦合:层层之间只有接口调用的关系,层内的改变不影响其他的层
我们学过语言层面的C++中的封装、继承、多态就是这样的体现,当然硬件层面的电脑DIY也是如此,可以说计算机世界就是这样的。
这样的设计还有这样的特点:访问操作系统,必须使用系统调用。如在屏幕上打印,使用printf是属于用户操作接口的,其中的printf是封装了系统调用的,它会一层层访问到硬件,最后表现出来。
3.3 操作系统的管理
从上面我们可以知道:操作系统是⼀款纯正的"搞管理"的软件。
让我们使用类比来理解这个管理的作用。一个学校有三大组成部分:校长、辅导员、学生,三者分别为管理者、执行者、被管理者。而在这样的学校当中决策和执行是分离的 ,校长只负责决策,将执行工作分给辅导员。这样的学校结构恰好符合了操作系统的作用,校长作为os,辅导员是驱动程序,学生是底层硬件。
在上方的关系情况中,管理者与被管理者是没有交集的,校长不需要见学生就可以管理,通过数据进行管理:如处理挂科情况时,不需要一个个面谈理解,直接通过教务系统查看成绩就可以。
那管理者如何得到被管理者的数据呢? 这就需要执行者去处理了,就是辅导员这一身份,录入各个数据 。当然校长也不能随便需求数据,于是校长做了个表格记录信息:姓名、性别、年龄等,于是校长就可以将对学生的管理转为对数据(表格)的管理。
当学生人数过多后,校长浏览数据的工作量就过多了,于是校长通过C语言中的结构体来直接管理,但这样的结构体无法贯穿,只能一个个查看,于是在结构体中新增了 * next,就形成了一个学生链表,成功地实现了管理工作变为链表的增删查改。

上面的管理过程,体现了一个本质表现:先描述,在组织。
这样的表现就是面向对象的本质,如C++中的类和STL,前者解决描述的问题,后者解决的是组织的问题。
3.3 系统调用
操作系统为用户提供服务,但不相信、不允许用户自己去跃层访问服务层一下的功能。 这样的例子体现在银行的服务当中,因此os为我们提供的系统调用 就是这些服务。

现在的主流操作系统都是由C语言编辑的,因此服务本质其实就是C函数,用户通过参数输入数据,系统通过返回值返回结果,从而实现调用。
我们在使用时不了解os的具体操作,那我们是如何使用的呢?其实设计者已经通过封装提供接口为我们简化了使用流程,常见的就是函数库。系统调用和库函数就是上下层的关系,只要涉及到硬件那么一定会使用到系统调用。
总结
本节我们初步了解了计算机的体系和在计算机中的重要操作者------操作系统,并大体地了解了它们的原理和操作,下一节我们将学习操作系统是通过操作什么进行管理软硬件的。
