【Linux进程概念】冯 诺依曼体系结构 操作系统 进程 fork 进程状态 优先级

文章目录

【写在前面】

从此篇开始,就开始学习 Linux 系统部分 —— 进程,在正式学习 Linux 进程之前,我们需要铺垫一些概念,如冯诺依曼体系结构、操作系统的概念及定位、进程概念,我们会先铺垫理论,再验证理论。其次对于某些需要深入的概念我们只是先了解下。本文中的 fork 只会介绍基本使用,以及解答 fork 为啥会有 2 个返回值、为啥给子进程返回 0,而父进程返回子进程的 pid;而对于用于接收 fork 返回值的 ret 是怎么做到 ret == 0 && ret > 0、写时拷贝、代码是怎么做到共享的、数据是怎么做到各自私有的等问题会在《Linux进程控制》中进行展开。

一、冯 诺依曼体系结构

?? 体系结构

在这里插入图片描述

冯 诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。数学家冯 诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑程序存储执行以及计算机由五个部分组成 (运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯 诺依曼体系结构。我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。其中:

  1. 输入设备:键盘、鼠标 … …。
  2. 输出设备:显示器、音响 … …。
  3. 存储器:如没有特殊说明一般是内存。
  4. 运算器:集成于 CPU,用于实现数据加工处理等功能的部件。
  5. 控制器:集成于 CPU,用于控制着整个 CPU 的工作。

各个组件之间的互通是通过 “ 线 ” 连接实现的,这可不是那种电线杆上的线,因为计算机更精密,所以使用 “ 主板 ” 来把它们关联在一起。

?? 数据流向

冯 诺依曼体系结构规定了硬件层面上的数据流向,所有的输入单元的数据必须先写到存储器中 (这里只是针对数据,不包含信号(通过外设直接对 CPU 交互)),然后 CPU 通过某种方式访问存储器,将数据读取到 CPU 内部,运算器进行运算,控制器进行控制,然后将结果写回到内存,最后将结果传输到输出设备中。

我们在 C/C++ 中说过,可执行程序运行时,必须加载到内存,为啥
在这里插入图片描述
在此之前先了解一下计算机的存储分级,其中寄存器离 CPU 最近,因为它本来就集成在 CPU 里;L1、L2、L3 是对应的三级缓存;主存通常指的是内存;本地存储(硬盘)和网络存储通常指的是外设。

如图所示,这样设计其实是因为造价的原因,对于绝大多数的消费者,你不可能说直接把内存整个 1 个 T 吧,当然,氪金玩家除外。

其中通过这个图,我们想解释的是为啥计算机非得把数据从外设(磁盘) 三级缓存(内存) CPU,而非从外设(磁盘) CPU。

原因是因为离 CPU 更近的,存储容量更小速度更快成本更高;离 CPU 更远的,则相反。假设 CPU 直接访问磁盘,那么它的效率可太低了。这里有一个不太严谨的运算速度的数据,CPU 是纳秒级别的;内存是微秒级别的;磁盘是毫秒级别的。当一个快的设备和一个慢的设备一起协同时,最终的运算效率肯定是以慢的设备为主,就如 “ 木桶原理 ” —— 要去衡量木桶能装多少水,并不是由最高的木片决定的,而是由最短的木片决定的。也就是说一般 CPU 去计算时,它的短板就在磁盘上,所以整个计算机体系的效率就一定会被磁盘拖累。所以我们必须在运行时把数据加载到内存中,然后 CPU 再计算,而在计算的期间可以同时让输入单元加载到内存,这样可以让加载的时间和计算的时间重合,以提升效率。

同理因为效率原因 CPU 也是不能直接访问输出单元的,这里以网卡为例,我刚发条 qq 消息给朋友,发现网络很卡,四五秒才发出去,而在这个过程,你不可能让 CPU 等你四五秒吧,那成本可太高了,所以通常 CPU 也是把数据写到内存里,合适的时候再把数据刷新到输出单元中。

所以本质上可以把内存看作 CPU 和所有外设之间的缓存,也可以理解成这是内存的价值。
在这里插入图片描述
??小结:所有数据 外设 内存 CPU 内存 刷新到外设,其中 CPU 不直接和外设交互,外设只和内存交互。注意一定要区分清楚某些概念是属于 “ 商业化的概念 ” 还是 “ 技术的概念 ”。

?? 实例

对冯诺依曼的理解,不能只停留在概念上,要深入到对软件数据流理解上,请解释,你在qq 上发送了一句 “ 在吗 ” 给朋友,数据的流动过程 ?如果是在 qq 上发送文件呢 (注意这里的计算机都遵循冯 诺依曼体系结构,且这里不谈网络,不考虑细节,只谈数据流向) ?

消息:
在这里插入图片描述
文件:
在这里插入图片描述

本质上发消息和发文件是没有区别的。学习这里实例的意义是让我们在硬件层面上理解了它的数据流,你的软件无论是 QQ、WeChat 等都离不开这样的数据流。

二、操作系统 (Operator System)

?? 概念

操作系统是进行软硬件资源管理的软件,任何计算机系统都包含一个基本的程序集合,称为操作系统 (OS)。笼统的理解,操作系统包括:

  1. 内核 (进程管理,内存管理,文件管理,驱动管理)。
  2. 其他程序 (例如函数库,shell 程序等等)。

为什么要有操作系统

  1. 最明显的原因是如果没有操作系统,我们就没有办法操作计算机。换句话说,操作系统的出现可以减少用户使用计算机的成本。你总不能自己拿上电信号对应的电线自己玩吧,那样成本太高了。
  2. 对下管理好所有的软硬件对上给用户提供一个稳定高效的运行环境。其中硬件指的是 CPU、网卡、显卡等;软件指的是进程管理、文件、驱动、卸载等。不管是对下还是对上,都是为了方便用户使用。
?? 计算机体系及操作系统定位

在这里插入图片描述
在这里插入图片描述

其中用户可以操作 C/C++ 库、Shell、命令、图形界面;底层可以通过操作系统接口完成操作系统工作;操作系统目前主流的功能有四大类 —— 1、进程管理2、内存管理3、文件管理4、驱动管理。后面我们重点学习进程管理和文件管理,其次内存管理学习地址空间和映射关系就行了。

其次操作系统是不信任任何用户的,所以用户不可能通过某种方式去访问操作系统,甚至对系统硬件或者软件的访问。而对系统软硬件的访问都必须经过操作系统。也就是说作为用户想要去访问硬件,只能通过操作系统所提供的接口去完成,但是操作系统提供的接口使用成本高,所以我们就有了基于系统调用的库等。就比如银行不信任任何人,你要去取钱 (硬件),你不能直接去仓库拿钱,你也不能私底下指挥工作人员 (驱动) 给你去仓库拿钱,银行规定你要拿钱,必须通过银行提供的窗口 (操作系统提供的接口) 来取钱。

也就是说我们使用 print、scanf 等库函数时,都使用了系统接口,称之为系统调用。

系统调用和库函数概念

  1. 在开发角度,操作系统对外会表现为一个整体,它不相信任何用户,但是会暴露自己的部分接口ÿ
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值