【Linux进程篇1】认识冯·诺依曼体系结构(引出进程详解)
---------------------------------------------------------------------------------------------------------------------------------
每日鸡汤:
用这生命中的每一秒,给自己一个不后悔的未来。
---------------------------------------------------------------------------------------------------------------------------------
目录
一:认识冯诺依曼系统
二:冯诺依曼结构——硬件层
2.1:认识冯诺依曼体系硬件设备
2.2:关于内存
2.2.1:内存
2.2.2:为什么要给计算机引入内存
2.2.3:两个内存问题
2.3:两个实例深入理解冯诺依曼结构
2.3.1:实例一:QQ聊天数据流
2.3.2:实例二:实验报告发送流
三:冯诺依曼结构——软件层(操作系统)
3.1:OS是什么?
3.2:OS为什么进行管理?
3.3:OS是怎么管理的?
3.3.1:OS的六字真言
3.3.2:描述被管理对象
3.3.3:组织被管理对象
3.3.4:总结
一:认识冯诺依曼系统
冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器 和 数据存储器合并在一起的存储器结构。 程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,如英特尔 公司的8086 中央处理器 的程序指令和数据都是16位宽。
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
冯诺依曼体系结构:

二:冯诺依曼结构——硬件层
2.1:认识冯诺依曼体系硬件设备
截至目前,我们所认识的计算机,都是有一个个的硬件组件组成:
外部设备(外设):
- 输入设备:包括键盘, 鼠标,扫描仪, 写板等
- 输出设备:显示器,磁盘,打印机等
内部设备(内设):
- 存储器:内存。
- 中央处理器(CPU):含有运算器和控制器等。
关于中央处理器(CPU):
运算器:对我们的数据进行计算任务(算术运算(1+1=2),逻辑运算(1/0))
控制器:对我们的计算过程(计算硬件流程)进入一定的控制。
即;这五大部分都是独立的个体!各个硬件单元必须使用“线”连接起来,进行数据的交互。
2.2:关于内存
2.2.1:内存
内存 (Memory)是计算机的重要部件,也称内存储器和 主存储器,它用于暂时存放CPU中的运算数据,以及与硬盘等 外部存储器 交换的数据。 它是 外存 与 CPU 进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。
在冯诺依曼体系中的存储器指的是内存
先看计算机中存储分级:

其中,L0,L1,L2,L3全部集成到CPU中,主存L4就是内存,L5和L6称为硬盘。
即存储是分级的!并且从上到下:价格越低,容量越大,速度越慢,离CPU越来越远。
2.2.2:为什么要给计算机引入内存
引入内存(RAM,随机存取存储器)是计算机设计中的一个关键决策,它在计算机系统中扮演着至关重要的角色。
那么为什么要给计算机引入内存呢?首先我们要知道外设运行数据的速度是毫秒级别,而CPU数据的运行速度是纳秒级别。【1ms = 1000000ns】,若没有内存设备,外设直接将数据给入的CPU,根据木桶原理,这个数据运行速度的大差别导致整个计算机的运行速度大大降低到外设级别的速度。即计算机的运行速度取决于外设输入数据的速度。所以,引入内存(速度级别是微秒),调整各个部分的速度差,提高计算机的运行速度。还有一点是,可以使用更少的钱买到不错的计算机。这就会使得计算机被大众所购买。
即引入内存的原因总结有以下几点:
- 提高数据访问速度
- 临时存储空间
- 支持多任务处理
- 虚拟内存的支持
- 数据一致性
- 支持复杂计算
提高数据访问速度
- 快速读写。内存是一种高速存储设备,其读写速度远高于硬盘或固态硬盘。通过将频繁使用的数据和程序代码加载到内存中,可以显著提高计算机的处理速度。
- 减少等待时间。CPU可以直接从内存中读取数据,而不需要频繁地访问较慢的外部存储设备,从而减少了数据访问的等待时间。
临时存储空间
- 工作区。内存为操作系统、应用程序和正在运行的任务提供了一个临时的工作区。这些任务可以在内存中快速执行和交换数据。
- 缓存功能。内存可以作为缓存,存储最近使用过的数据和指令,以便快速访问。这有助于提高系统的整体性能。
支持多任务处理
- 并发执行。现代操作系统允许多个任务同时运行。内存提供了足够的空间来存储多个进程的数据和状态,使它们能够并发执行而不互相干扰。
- 上下文切换。当操作系统在不同任务之间切换时,内存中的数据可以迅速恢复,确保任务之间的平滑过渡。
虚拟内存的支持
- 扩展内存。虚拟内存技术允许操作系统将一部分硬盘空间用作内存的扩展。虽然硬盘的速度较慢,但虚拟内存可以在物理内存不足时提供额外的空间,从而提高系统的稳定性和灵活性。
- 内存管理。通过内存管理和虚拟内存技术,操作系统可以更有效地分配和管理内存资源,优化系统的性能和响应时间。
数据一致性
- 实时更新。内存中的数据可以被实时更新,确保所有正在运行的任务都能访问到最新的数据。这对于需要频繁更新和共享数据的应用尤为重要。
- 减少磁盘I/O。通过将常用数据保存在内存中,可以减少对磁盘的读写操作,延长磁盘寿命并减少I/O瓶颈。
支持复杂计算
- 大数据处理。内存可以容纳大量的中间结果和临时数据,支持复杂的计算任务,如科学计算、数据分析和机器学习等。
- 高性能计算。对于高性能计算应用,内存的容量和速度直接影响计算效率。充足的内存可以支持大规模并行计算和高吞吐量的数据处理。
总结:内存是计算机系统中不可或缺的一部分,它通过提供快速的数据访问、临时存储空间、支持多任务处理、虚拟内存支持、数据一致性和复杂计算等功能,极大地提高了计算机的整体性能和用户体验。没有内存,计算机的运行效率将会大大降低,无法满足现代计算的需求。
2.2.3:两个内存问题
一个程序要运行,必须要先加载到内存中运行,为什么?
答:因为有冯诺依曼系统规定!
为什么当时写的进度条,默认显示的数据是可能会缓存起来的,在哪里缓存?
答:是在存储器(内存)中缓存的。
即:代码也是数据,是数据就必须要在CPU中运行,CPU无法从外设中拿取数据,CPU只能从内存中拿取数据。
2.3:两个实例深入理解冯诺依曼结构
2.3.1:实例一:QQ聊天数据流
当开启电脑时,就将操作系统加载到了内存中了。所以当打开QQ软件时,同样也将QQ软件加载到了内存中了。

2.3.2:实例二:实验报告发送流

具体步骤:实验报告发送给我的朋友整个过程(实验报告从我的磁盘拷贝到对方的磁盘)
实验报告=文档=文件,将其推拽发送给朋友。数据从磁盘中读取,到内存。CPU从内存中拿取实验报告数据进行解密加密等一系列操作,完成后将其加载到内存,之后内存再加载到输出设备(网卡,显示器等),通过网络,到朋友的输入设备(网卡),将其再加载到内存中,CPU从内存中拿取经过解密等操作完成后再加载到内存中,再加载到输出设备(显示屏,磁盘等)中。
总结:所有设备都只能和内存打交道!!!
三:冯诺依曼结构——软件层(操作系统)

3.1:OS是什么?
操作系统是一款进行管理(硬件和软件)的软件!!!
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS),笼统的讲,操作系统包括:
- 内核(进程管理,内存管理,文件管理,驱动管理)
- 其他程序(例如函数库,shell程序等等)
3.2:OS为什么进行管理?
先说结论:
- 操作系统帮助用户,管理好下面的软硬件资源。
- 为了给用户提供一个良好(稳定、高效、安全)的运行环境。。
即:操作系统通过管理好底层的软硬件资源(手段),为用户提供一个良好的执行环境(目的)
OS硬件部分:
操作系统通过其内部的驱动程序来管理下部的底层硬件,因为硬件肯定会有众多的属性,所以可以通过一份结构体来描述这些硬件,注定了操作系统肯定有大量的数据结构。即操作系统和硬件直接打交道。
OS软件部分:
操作系统是一款软件,在操作系统里面,里面会有各种数据,可是操作系统并不相信任何用户!!!所以操作系统为了保证自己的数据安全,也为了保证给用户能够提供服务,操作系统以 接口 的方式给用户提供调用的入口,来获取操作系统内部的数据【类似于银行柜台,只留下一个小小的窗口与用户沟通交互】。

所以所谓的接口:是操作系统提供的用C语言实现的,自己内部的函数调用——系统调用。
系统调用:所有访问操作系统的行为,都只能通过系统调用【System call】来完成。与用户进行交互。
用户操作接口(shell外壳,lib库,部分指令):简称“王婆”,在它们上面进行的编程称为系统编程。即程序员通过用户操作接口来对操作系统进行操作。
例如:当我们输入一个printf打印函数时,通过l找到用户操作接口的【lib函数库】,然后命令到系统调用接口,再往下操作系统,操作系统通过执行显示器驱动程序,显示器驱动程序再调用底层的显示器硬件,将信息打印到显示器上,供给用户看到。
3.3:OS是怎么管理的?
3.3.1:OS的六字真言
面向对象最最最最重要的真言:先描述,在组织!
3.3.2:描述被管理对象
举个形象的例子:“大学就是在管理体系下的一套系统”
在学校学生就是最典型的被管理者,而最典型的管理者就是校长。所以,学生和校长并不是经常见面的。即特点一:管理者和被管理者是不需要见面的!但是校长是如何管理好学生的呢?是通过导员向校长传递关于学生的一系列信息,校长通过这些信息来进行发布相关的管理政策。即特点二:管理者在不见被管理者的情况下,只要能得到管理信息,就可以在未来进行管理决策【管理的本质:通过对数据的管理达到对人的管理】。而辅导员的情况,大部分是没有决策权的,不算管理者。只是传达管理者的决策,即执行者角色。此时得出事情可分为两种:1.决策;2.执行。即特点三:管理者和被管理者不见面的情况下,是通过执行者拿到对应的信息的。
即当前:校长就相当于计算机中的操作系统(OS),辅导员相当于计算机中的驱动程序,学生相当于计算机中的软硬件资源。
一个计算机故障实例:当计算机中的网卡出现问题时,驱动程序将故障信息传递给操作系统,若操作系统能修复则自动修复,若修复不了的,就往上报给用户,提醒用户出现故障(网卡)。
因为软硬件资源的数据量实在是太大了,所以要管理它们,就必须对它们进行描述。例如大学来描述学生:
| 学生学院 | 专业 | 班级 | 学号 | 姓名 | 性别 | ... |
| XXX | XXXX | XXXXX | XXXXX | XX | XX | X |
| ... | ... | ... | ... | ... | ... | ... |
会将学生描述成为这样一个excl表格形式。
但是只要是事物或者物体,就能通过一系列属性将其表示出来。描述一个学生:
struct Student
{char 学生学院[];char 专业[];char 班级[];char 学号[];char 姓名[];char 性别[];// ...struct Student* next;
}
这就是描述的过程。
3.3.3:组织被管理对象
组织,就是将一个一个的对象组织起来。通过管理好这个组织起来的大家伙(链表、二叉树...)来管理好内部的一个个对象。
例如,将一个学生定义出来:
struct student stu1 = {};
struct student stu2 = {};
//...
通过一个个学生结构体,将众多学生通过链表形式连接起来,这样就可以将这个学生链表结构管理好就可以了。

成功的将 对学生的管理工作 转换成为了 对链表的增删改查等工作。
而在计算机中,所有的设备文件都可以将其描述出来。之后就通过对设备的管理转换成为了对数据结构的管理。
这就是组织的过程。
3.3.4:总结
计算机的世界都是围绕“先描述,后组织”这六子真言展开的。
因为这“六子真言”,在操作系统中,管理任何对象,最终都可以转化成为对某种数据结构的增删改查。这就是建模的过程!
所以:计算机管理硬件或者软件:
- 描述起来,使用 struct 结构体。
- 组织起来,使用链表或者其他高效的数据结构。
相关文章:
【Linux进程篇1】认识冯·诺依曼体系结构(引出进程详解)
--------------------------------------------------------------------------------------------------------------------------------- 每日鸡汤: 用这生命中的每一秒,给自己一个不后悔的未来。 -----------------------------------------------…...
使用iviewui组件库的坑
背景 使用view-design组件库的Input组件的时候,按照产品的要求,输入框中只能键入正整数。 使用效果 如果直接使用组件的type属性,设置类型为number时,乍一看没啥问题,但是当我们键入 小数点(.) 或者 e/E 后面没有跟任…...
高级sql使用技巧
窗口函数(Window Functions): 窗口函数可以在结果集的行之间进行计算,例如计算移动平均值、排名等。在使用时,可以使用 OVER() 语句来定义窗口。例如: sql SELECT employee_id,salary,AVG(salary) OVER (P…...
403 Request Entity Too Lager(请求体太大啦)
昨天收到 QA 的生产报障,说是测试环境的附件上传功能报了 403 的错误,错误信息:403 Request Entity Too Lager。我尝试复现问题,发现传个几兆的文件都费劲啊,一传一个失败。不用说,项目用到 ng 代理&#x…...
Flutter 正在切换成 Monorepo 和支持 workspaces
其实关于 Monorepo 和 workspaces 相关内容在之前《Dart 3.5 发布,全新 Dart Roadmap Update》 和 《Flutter 之 ftcon24usa 大会,创始人分享 Flutter 十年发展史》 就有简单提到过,而目前来说刚好看到 flaux 这个新进展,所以就再…...
小白初入Android_studio所遇到的坑以及怎么解决
1. 安装Android_studio 参考:Android Studio 安装配置教程 - Windows(详细版)-CSDN博客 Android Studio超级详细讲解下载、安装配置教程(建议收藏)_androidstudio-CSDN博客 想下旧版本的android_studio的地址(仅供参考…...
NetCore使用Aop和内存缓存对接口、方法进行数据缓存
通过Aop内存缓存对接口、方法进行缓存 源码地址https://gitee.com/wangbenchi66/nuget 1. nuget包引入 必须引入包 至少在2024.11.7以上 <PackageReference Include"WBC66.Cache.Core" Version"2024.11.7" />必须开启内存缓存 否则后续步骤无法正…...
playwright学习记录2--定位方式
快捷导航 定位方式:元素操作断言方式自动等待 定位方式: csspage.get_by_role() 通过显式和隐式可访问性属性进行定位。page.get_by_text() 按文本内容定位。page.get_by_label() 通过关联标签的文本定位表单控件。page.get_by_placeholder() 通过占位符…...
响应式网页设计--html
一,HTML 文档的基本结构 一个典型的 HTML 文档包含了几个主要部分,基本结构如下(本文以下出现的所有代码都可以套入下面示例进行测试): <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8&q…...
C#核心(8) 静态成员
前言 先前我们已经学习了成员变量以及成员属性。 静态成员对于在整个应用程序中共享数据和功能非常有用。它们可以用于跟踪全局状态、共享常量和实现单例模式等。但是需要注意的是,过度使用静态成员可能导致代码变得难以维护和测试,因此应谨慎使用。其…...
关于git使用的图文教程(包括基本使用,处理冲突问题等等)超详细
目录 用户签名,初始化git git提交流程图 提交到本地库 版本穿梭 分支操作 分支合并冲突 团队协作 github的使用 推送代码 克隆 拉取代码 团队协作冲突 团队协作之分支管理 推送分支到分支: 拉去远程库分支到本地库: 本地删除远程分支&am…...
Axios 的 responseType 属性详解及 Blob 与 ArrayBuffer 解析
在前端开发的广阔天地中,Axios 犹如一颗璀璨的明星,为我们与服务器之间的通信搭建起坚实的桥梁。其中,responseType 属性更是赋予了我们灵活处理服务器响应的强大能力。 一、Axios 的 responseType 属性值及示例 1.arraybuffer 当我们将 r…...
redis集群介绍
1. 节点(Node): • Redis集群中的单个Redis服务器实例。每个节点都运行一个Redis服务器进程,并维护自己的数据。 2. 分片(Sharding): • 将数据集分割成多个部分,并分布到不同的节点…...
JDK中常用的包有哪些?
1.java.lang 描述:包含Java语言的核心类,不需要显式导入。 常用类:Object、String、Math、System、Thread、Exception等。 2.java.util 描述:提供了集合框架、日期和时间功能、随机数生成、扫描和格式化等实用工具类。 常用类…...
校园官网练习---web
HTML: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>西安工商学院</title><…...
MySQL中指定字段的某个值排在前面
一 需求 如果我们想讲表中指定的字段的某一个值排序在最前面应该如何处理? 二 实现方式 方法 1、使用<>,xml中使用<![CDATA[跳过解析的特殊符号]]>或者<(小于符号)>(大于符号) ORDER …...
【51单片机】I2C总线详解 + AT24C02
学习使用的开发板:STC89C52RC/LE52RC 编程软件:Keil5 烧录软件:stc-isp 开发板实图: 文章目录 AT24C02介绍存储器 I2C总线介绍I2C时序结构数据帧AT24C02数据帧 编程实例 —— 按键控制数据大小&存储器写入读出 AT24C02介绍 …...
直接插入排序法
任务描述 本关任务:要求编写程序实现直接插入排序的功能。 相关知识 直接插入排序,是指将无序序列中的各元素依次插入到已经有序的数组中。 假设数组中前 i-1 元素已经有序,现在要将线性表中第 i 个元素插入到前面的有序子表中,…...
mysql中InnoDB索引与MyISAM索引
mysql索引 InnoDB 索引存储 主键索引(聚簇索引) 定义:主键索引是 InnoDB 存储引擎的聚簇索引,它决定了表中数据的物理存储顺序。每个 InnoDB 表都有一个且仅有一个聚簇索引。存储:主键索引的叶子节点直接包含表的数…...
Redis如何保证数据不丢失(可靠性)
本文主要以学习为主,详细参考:微信公众平台 Redis 保证数据不丢失的主要手段有两个: 持久化 多机部署 我们分别来看它们两的具体实现细节。 1.Redis 持久化 持久化是指将数据从内存中存储到持久化存储介质中(如硬盘…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...

