Linux之进程(一)

认识冯诺依曼体系

计算机要做的就是我们将信息输入,计算机帮我们计算,然后将结果返回给我们.

输入设备:键盘,摄像头,麦克风,网卡

输出设备:屏幕,显示屏,网卡,硬盘

cpu:

数据计算

逻辑运算

1.为什么要有内存?

首先硬盘也叫做外部存储,内存就是内部存储,

计算机存储分级,

层级 存储介质 功能说明
L0 寄存器 CPU 寄存器保存从高速缓存存储器取出的字
L1 L1 高速缓存(SRAM) L1 高速缓存保存着从 L2 高速缓存取出的缓存行
L2 L2 高速缓存(SRAM) L2 高速缓存保存着从 L3 高速缓存取出的缓存行
L3 L3 高速缓存(SRAM) L3 高速缓存保存着从主存高速缓存取出的缓存行
L4 主存(DRAM) 主存保存着从本地磁盘取出的磁盘块
L5 本地二级存储(本地磁盘) 本地磁盘保存着从远程网络服务器磁盘上取出的文件
L6 远程二级存储(分布式文件系统、Web 服务器) 最底层远端大容量存储,无单独配套文字描述

越往上效率越高,价格越贵,容量越小

体系结构效率问题

输入设备-> cpu-> 输出设备

cpu的效率是非常快的,而输入输出设备将数据给到cpu,要进行大量的IO的效率是很低的

也就说计算机的效率由输入输出设备来决定

为了解决这个问题,我们引入内存,效率比较高,另外价格也没有很贵

在数据层面,cpu和外设不打交道,只与内存打交道

局部性原理 是指:程序在执行过程中,倾向于反复访问最近刚用过的数据或附近的数据 ,而非随机访问整个地址空间。它是存储器层次结构(Cache / 主存 / 虚拟内存)能够生效的根本依据

数据可以提前加载到内存,,处理数据时就可以转换为cpu和内存的交互

将计算机性能就由内存为主,这使得普通人可以用较少的钱获得性能比较好的电脑,冯诺依曼为电脑提供性价比.

用例子来加深我们的理解

根据我们上面的理解

一个程序本质上就是数据,在数据层面上cpu不直接和外设打交道,cpu只与内存打交道

我们再回到原来这个图片

将数据从硬件搬到内存上面就是input,将内存数据半岛输出设备上面就是output

搬动本质上就是数据的拷贝,计算机数据的的移动过程,本质就是拷贝,那么计算机的性能在硬件方面的效率就是由设备的拷贝效率来决定.

eg:

  1. 加载与输入:打开 QQ 将其加载到内存;你在键盘输入消息,数据从键盘拷贝到内存。

  2. 处理与加密:CPU 对内存中的消息进行计算处理和加密。

  3. 发送至网卡:处理后的数据再次存储回内存,随后内存将其拷贝到网卡。

  4. 网络传输:网卡将数据发送到物理网络中,经路由跨越云南到浙江,传输至朋友的电脑。

  5. 接收与显示:朋友的网卡接收数据并拷贝到其内存,QQ 软件读取内存中的数据并显示在屏幕上。

操作系统

接下来我们讨论的操作系统都是内核

为什么要有操作系统?

1.人并不擅长直接和机器打交道

普通用户乃至上层应用程序,都不具备直接操控硬件的能力。硬件操作需要编写繁琐、晦涩的二进制机器指令,且需要精准把控硬件时序、地址、寄存器参数等底层细节,门槛极高、容错率极低。如果没有操作系统,每一个软件、每一次操作都需要开发者手动适配各类硬件,不仅效率极低,还极易出现硬件冲突、程序崩溃等问题,普通用户更是无法正常使用计算机。

2.操作系统向下管理软件和硬件,对上给人提供良好的使用环境,要稳定,安全,高效.

对下统一管理CPU、内存、硬盘、外设等硬件资源,以及各类系统进程、文件、数据等软件资源;对上为用户、应用软件提供简洁、安全、高效的使用和运行环境。同时保障系统运行的稳定性、数据安全性和资源调度的高效性,避免多程序、多用户争抢硬件资源导致的系统紊乱。

操作系统是一款软件,是一款进行软硬件管理的软件,管理就是先描述,再组织

eg:

  • 类(class) :对应先描述。我们通过类定义事物的属性和行为,明确要记录、管理哪些数据,完成对目标对象的抽象描述。

  • STL标准容器 :对应再组织。通过数组、链表、队列、哈希表等容器,将多个类实例对象有序存储、统一管理,方便后续对数据进行增删查改、遍历调度。

理解操作系统管理的本质
1.我们先来理解操作系统对下管理软硬件

我们先引入一个例子

在校园体系中,校长不会直接对接、管理每一位学生,而是依靠辅导员统计、汇总学生信息,将零散的学生数据统一整理后,再上报给校长,供校长决策调度。

现在校长要挑选一个c语言考试成绩优秀的同学去参加c语言的比赛应该如何操作呢

就是校长并不管理学生,但是要挑选学生去参赛

关键就是数据,可以将学生的数据进行统计出来,然后挑选成绩较好的同学去参加比赛

存储学生数据

将学生信息用struct student结构体来进行描述

管理学生数据

结构体一个一个不好找,我们由单链表的形式将结构体连接起来,查找数据,就对链表进行遍历

所有业务需求,本质都是对结构化数据的操作:挑选竞赛学生就是遍历链表、筛选成绩数据 ,新增入学学生就是链表新增节点 ,学生毕业就是链表删除节点 ,学生成绩更新就是修改节点数据

通过先描述再组织的方式来进行的

先描述就是要决定存储什么数据

组织就是决定数据的存储方式


2.操作系统对上提供良好的使用环境

操作系统除了对内管理资源,核心另一功能就是封装底层硬件细节,为上层用户和软件提供安全、规范的访问接口 ,实现上层与底层硬件的隔离,杜绝非法、危险的硬件操作。我们通过银行系统类比深度理解:

eg:银行系统

我现在想要去办理业务,可以直接去金库进行钱的交换变化吗?

这显然是不行的,首先可能会多拿,也可能拿错等等不良的影响,这样是很不安全的

外面的人也只能通过银行提供的服务来完成需求,不了解银行如何行动或者作为的,可以通过大堂经理帮助他们填表了解信息的方式间接完成自己的需求

银行的核心金库存储着所有资金(对应计算机的内存、硬盘、硬件资源、核心数据),普通用户绝对不允许直接进入金库触碰、存取现金。如果用户可以直接操作金库,会出现资金错取、恶意盗取、账目混乱、资金丢失等一系列安全问题,整个银行系统会彻底崩溃。

因此银行会封装底层操作,为用户提供统一的业务窗口:用户想要存款、取款、转账,只能通过大堂经理、柜台窗口、自助设备等官方提供的服务接口完成,无需了解金库的布局、资金存放规则、账目核算逻辑,所有底层操作均由银行内部系统完成。


计算机系统完全同理

上层应用程序、普通用户,绝对不允许直接访问内存、修改硬件数据、操控底层寄存器。直接操作硬件会导致内存越界、硬件冲突、数据损坏、系统崩溃,甚至引发安全漏洞。

操作系统内核会完全封装底层硬件的所有操作细节,对外提供统一、安全、规范的访问渠道:系统调用、库函数、终端命令、图形化操作界面

上层所有操作------打开文件、运行程序、读写数据、联网通信、操作外设,都必须通过操作系统提供的接口间接完成。上层无需了解硬件底层的运行逻辑,操作系统会全权完成底层资源调度和硬件操作,同时做好权限管控、资源隔离、安全校验,保障整个计算机系统稳定、安全、高效运行。

总结
  1. 操作系统内++核的本质:++ ++管控软硬件资源的核心管理软件++ ++;++

++2. 一切系统管理的核心逻辑:++ ++先描述(结构体抽象对象),再组织(数据结构规整数据)++ ++;++

  1. 操作系统的两大核心价值:对内高效调度软硬件资源,对外屏蔽底层细节、提供安全规范的服务接口。