Linux:冯诺依曼系统和操作系统的概念
文章目录
- 冯诺依曼体系结构
- 冯诺依曼体系的理解
- 操作系统
- 操作系统的基本定位
- 操作系统的理解1
- 操作系统的理解2
- 总结
本篇主要总结的是操作系统的基本认知和一些概念
冯诺依曼体系结构

那么上图表示的就是冯诺依曼体系结构,那这个体系结构是什么?为什么要先介绍它?
截止目前来说,常见的计算机都是遵循着冯诺依曼体系组成的,可以说有了冯诺依曼体系才能让计算机变得这么普及,才有了现在的互联网的概念,那么他是如何做到的?
在生活中我们遇到的计算机,都是由一个一个的硬件拼接而成的,从大类上来说,一般包括有输入单元,输出单元,中央处理器三个部分,而冯诺依曼体系的基本理解就是,让CPU与内存做交互,也就是图中的存储器这个区域,而不是让CPU与输入单元直接进行交互;输入单元给出的内容和信号传到内存后,内存将信号传递给CPU,CPU进行一些数据处理后再传递回内存,内存再传递给输出单元
关于为什么要采用这样的方式的原因,要从下图说起

计算机中有很多的存储器,而每个存储器对应的存储大小和存储速度也是不一样的,比如对于CPU来说,它的传递速度相当的快,可能是以纳秒为单位进行的计时,而对于内存来说,可能就是微秒或者纳秒的概念,但对于输入单元来说,就可能到达毫秒的概念上了,那么如果让输入单元直接和CPU进行交互,带来的一定是输入单元无法跟得上CPU的速度,导致电脑的效率极低,甚至无法进行正常的工作
那么上图表示的就是存储器的层次结构,说是层次结构不如说是运行速度结构,从某种意义上来说也是造价结构,寄存器的运行速度相当的快,但是它可以存储的内容大小可能只有几十字节,造价也特别高,但对于Web服务器来说,可能只需要几十块或者几百块就可以存储很大的数据了,但进行数据交互的速度和寄存器是不可以比的,那么如何把计算机中的各个存储器合理的分配才能利益最大化?这就成了最大的问题,那么这个时候冯诺依曼就提出了这样的体系,给未来的计算机的整体设计提供了全新的思路
按照冯诺依曼的体系结构来看就能看出,让存储器和CPU进行交互是最合理的,在这里可以近似的把内存看成是一个硬件级别的缓存,它并不直接存储数据,而是作为一个把输入数据和中央处理器进行交互的一个中间单元,因此基于冯诺依曼的体系设计出的计算机是最合理的,因此这个体系才能被保留至今,被大多数计算机进行广泛的应用
因此我们说,基于冯诺依曼体系结构的计算机,是用最少的钱做出最高效的计算机,这样才能让计算机走进普通人的家中,才能让互联网开始发展到现在的盛世,可以说没有冯诺依曼的体系结构是不会有现在的互联网的
上面只是对冯诺依曼体系的概念理解,那么具体来说,根据这个体系可以解释下面的一些现象
冯诺依曼体系的理解
通过社交平台发送消息的过程
从上面的概念来解释:输入设备比如发送了一个你好的字样,现在这个字样要被发送出去,首先要传递到存储器中被加载,在存储器中这个消息被送到了CPU中进行了处理,处理后通过输出设备,比如说网卡,就能通过网络发送到另外一台电脑上,而与此同时在我们的这台电脑上的输出设备,比如说显示器,会显示出发送成功或者失败的提示
对于另外一个设备,作为接受我们消息的设备,首先有一个输入设备来接受消息,比如说网卡来接收消息,然后接收到的消息被传递到了存储器,存储器再传递到CPU中,CPU进行数据的处理后,将数据显示到输出设备上,这里就是显示器,因此就形成了我发了一个你好,远在很远处的人就可以看到这条你好的句子
程序被运行前,为什么要加载到内存?
程序其实就是代码和数据,那么最后都要交给CPU进行处理,而CPU需要先读取到这些代码和数据,而在CPU和内存之间有一个二进制层次的交互,形成了一个可执行程序,本质上来说这其实也是一个文件,这个文件只能在磁盘中读取,而磁盘本质上就是一个外部的输出或者输入设备,因此要被加载到内存当中
通过社交平台发送文件的过程
和上面的理解类似,只不过区别是在输入输出设备上略有不同,文件的存储是在磁盘上的,而磁盘就是这里的输入设备,经过网络的传递后可以传递到对方的电脑上,此时数据就被存储到了输出设备上,这里的输出设备也是磁盘
那么到这里就结束了冯诺依曼体系结构的认识,下面就要引入正经内容:操作系统
操作系统
操作系统的基本定位
操作系统其实并不陌生,经常会听说有Windows操作系统,Mac操作系统,甚至有Linux操作系统,但是操作系统到底是什么?操作系统是如何运作的?它的工作原理和核心目的是什么?这些就并没有了解过多,那么下面开始对操作系统的概念有一个基础的认知
操作系统是什么?
直观的下定义来说,操作系统是一款软件,它的作用是用来进行软硬件的资源管理,也是打开电脑后第一个进行加载的软件
操作系统为什么要存在?
如果没有操作系统,计算机只是几个比较精美的废铁,并没有什么实质性的作用,它无法像现在的电脑一样进行运转,因此操作系统是十分重要的,操作系统将软硬件资源进行管理给用户提供良好的使用环境,这里的良好主要体现在要稳定,高效,安全,易用:用这个操作系统不会突然挂掉,可以合理的使用;用这个操作系统处理问题可以很高效的解决,帮助人缩小工作量;有一定的数据防护性,不会被偷取数据
操作系统是如何进行管理的?
关于操作系统如何进行管理,是一个很宏观的概念,这里把操作系统的管理模式放到理解篇进行阐述
操作系统的理解1
讲到操作系统,就离不开下面的这张图,整个操作系统都将围绕下面这张图进行阐述

那么前面对操作系统进行了一个基本的概念,操作系统是一个进行管理的软件,那么这个管理具体表现在什么地方?如何理解管理这个词呢?
管理的本质是管理数据
接触到管理,在实际生活运用中有很多和管理挂钩的概念,大到管理一个国家,小到管理自己的一日安排,那么对于管理一词的认知,也应该要进行一定的理解
所谓管理,管理的是什么?管理的是人,还是物还是什么,实际上,看似管理的是人或者是其他性质,其实管理的都是一条一条的数据,比如银行管理的是你有多少钱,就是资金数据,学校管理的是你的信息,也是数据,学校对你的行为做管理,其实也是在管理你在什么时候做什么事,其实也是管理的范畴,而这些管理的内容从计算机的角度来讲,其实是事物的属性
那事物的属性如何理解?管理的内容通常就是事物的一条条信息,也就是属性,因此上面的那句话其实可以更变为:管理的本质是管理属性
先描述,再组织
那现在已经理解了管理的含义,那么现在再看编程语言就知道了,在写日期类的时候会先定义日期,在写顺序表的时候会先定义顺序表的下标容量数组等,完成链表前要先定义链表的节点,再将节点穿起来等,这些都说明,当我们需要做一件事的时候,会先从属性的角度思考问题,因为人其实就是通过属性来认识世界上的各种事物,那重要的属性的集合,也就代表了要研究的对象,因此才会出现C++、Java这样的语言,它们之所以选择面向对象的编程语言,其实本质就是这方面的原因,因此本段话要引出的观点是,在完成一件事前要先描述,再组织,当知道了要做的事物的具体属性后,才能针对事物做出组织的动作
操作系统的理解2
那么现在就要看下面的这张图来进行操作系统的全面理解

首先这张图的右侧划分出了三个部分,分别是用户部分,系统软件部分,硬件部分,那么如何理解这三个部分?
用户的访问内容是有限的
从上面的图中可以看出,用户其实所拥有的范围是很小的,只有最上面的两层,用户和用户接口,下来是系统软件的部分,那么这个部分的意义是什么?应该如何理解除了用户部分外的这些部分?
其实,在电脑中用户可以访问的内容是有限的,比如说,用户是不可以直接对网卡,硬盘进行控制的,都是用户向操作系统发出询问,操作系统再向我们反馈,比如该部分硬件是正常运行的还是非正常运行,有没有接入某个驱动,用户或者说开发人员是不可以直接进行访问的,都是对操作系统发出的指令,操作系统再予以反馈,因此就引入了系统调用接口的概念,用户的操作实际上只能局限于对接口进行调用,而当用户发出了这个调用后,操作系统才能根据用户的需求进行反馈所需要的信息,这其实也是表现了操作系统的安全性,如果没有这层保护,可以让用户或开发人员直接访问底层的内容或驱动程序等,那对于操作系统来说就是不可控的行为,由于操作系统是一个用来管理的软件,那么它就必定不会让用户的随机访问和随意改动对于整个系统的稳定造成威胁,因此操作系统拒绝对于用户的直接访问,而是采用操作系统管理后搜索到用户需要的数据后,将数据进行一定的反馈
操作系统管理的核心
- 进程管理
- 内存管理
- 文件以及IO管理
- 驱动管理
上面的内容就是操作系统进行管理的内容,当然这些内容也是用户不可以进行直接访问的,但是可以借助操作系统的力量完成这些管理,使得整个系统变得井井有条,这也是操作系统存在的意义和价值,那么对于操作系统的初步理解就是上面的理解,但是上图中还有一些部分没有阐述

现在已经理解了上图中的绝大部分内容:
- 操作系统是一个纯粹进行管理的内容,它可以管理我们电脑中的各个模块,并且管理驱动程序和底层硬件
- 操作系统不允许外界进行内部的直接访问,如果想要访问内部的数据可以借助接口来实现,操作系统可以将需要的内容传递到外界中
- 操作系统进行访问是需要进行逐层访问的,一般想要访问到底层的硬件或者驱动程序,需要从上到下依次访问到最底层才能访问到内容
那么现在还有一块:用户操作接口
这个模块的内容是用来做什么的?对于用户来说,想要调用系统的接口其实并不容易,系统的接口的调用不管从难度还是繁琐度来说,都不算一个容易的事,但是在实际开发中是需要进行经常调用的,因此就有了用户操作接口的内容,可以将繁琐的接口进行简化,下面举几个例子来理解这个概念:
Linux中的bash和shell的概念:Linux中bash作为命令行解释器,可以帮助我们进行一些命令的调用和解释,而bash实际上就是shell的一种,shell外壳就是面向用户的,将用户的指令翻译成操作系统可以听懂的语言,再执行后返回给用户Windows中的图形化界面的概念:在Windows中,看似是双击了文件夹,可以看到文件夹的管理等操作,实际上这个过程是很复杂的,图形化界面其实就相当于是上面的shell的概念,对于用户来说降低了使用成本,使得使用变得简单C语言中的很多库函数:当使用C语言写的第一个程序就会用到printf函数,那么这个函数是如何将我们写的代码中的信息打印到显示器上的?其实这个过程说白了也离不开操作系统的,因为没有操作系统的支持是不可能访问到底层硬件的,函数也就不可能执行后将信息打印到显示器上
那么到这里,对于操作系统的基本理解就告一段落,这是对操作系统的基本理解,后面还有很多的深入理解需要结合其他内容来解释
总结
总结一下操作系统的基本理解吧:
- 为什么会出现用户操作接口?因为系统调用起来太麻烦了,一般人调用起来的成本太高,作为用系统的人的角度,借助
shell或者图形化界面可以更好地使用系统,作为开发的角度可以节约开发成本 C和C++的标准库实际上一定有系统调用的概念,否则就无法在屏幕上显示或在磁盘中的写入和读取- 先描述再组织,先用struct对于事物的属性进行描述,再用一些其他的手段将这些内容组织起来,那么对于如何组织起来,就需要进行后面的学习总结了
相关文章:
Linux:冯诺依曼系统和操作系统的概念
文章目录 冯诺依曼体系结构冯诺依曼体系的理解 操作系统操作系统的基本定位操作系统的理解1 操作系统的理解2总结 本篇主要总结的是操作系统的基本认知和一些概念 冯诺依曼体系结构 那么上图表示的就是冯诺依曼体系结构,那这个体系结构是什么?为什么要先…...
【操作系统笔记十一】进程间通信
Linux文件系统 inode 节点 (index node):给每个文件赋予一个称为 i 节点的数据结构。 inode 一开始是存储在硬盘中的,只有当文件被打开的时候,其对应的 i 节点才加载到内存中。 总结: Linux 中,…...
【操作系统】聊聊Linux软中断
什么是中断 中断是系统用来响应硬件设备请求的一种机制,会打断进程的正常调度和执行,转而去执行内核中的中断处理程序。 比如你正在看书,你女朋友叫你出去逛街。你就需要先放下手里的事情,然后逛街。回来之后,在接着看…...
公众号迁移个人可以迁移吗?
公众号账号迁移的作用是什么?只能变更主体吗?很多小伙伴想做公众号迁移,但是不知道公众号迁移有什么作用,今天跟大家具体讲解一下。首先公众号迁移最主要的就是修改公众号的主体了,比如我们公众号原来是A公司的&#x…...
全国职业技能大赛云计算--高职组赛题卷⑤(容器云)
全国职业技能大赛云计算--高职组赛题卷⑤(容器云) 第二场次题目:容器云平台部署与运维任务2 基于容器的web应用系统部署任务(15分)任务3 基于容器的持续集成部署任务(15分)任务4 Kubernetes容器…...
支撑位和阻力位在Renko和烛台图如何使用?FPmarkets澳福3秒回答
很多投资者都知道,Renko图表和普通日本烛台都会采用相同的交易信号,即支撑位和阻力位。那么支撑位和阻力位在Renko和烛台图如何使用?FPmarkets澳福3秒回答。 这些信号在任何时间框架上都会出现,且在蜡烛图交易中颇受欢迎。对于Renko图表而言…...
如何在32位MCU用printf()函数打印64位数据
1. 在32位MCU上定义64位变量: unsigned long long time_base; unsigned long long temp_time;2. 调用打印函数: printf("RFID:time_base:%d\r\n",time_base); printf("RFID:temp_time:%d\r\n",temp_time); printf("RFID:Ru…...
Python爬虫程序设置代理常见错误代码及解决方法
Python爬虫程序设置代理是爬虫程序中常用的技巧,可以有效地绕过IP限制,提高爬虫程序的稳定性和效率。然而,在设置代理时,常会出现各种错误代码,这些错误代码可能会影响程序的正常运行,甚至导致程序崩溃。本…...
3D点云目标检测:Centerformer训练waymo数据集
一、环境准备 项目地址:centerformer 1.0、基础环境 python 3.8.0 torch 1.9.1cu111 waymo-open-dataset-tf-2-6-0 1.4.9 spconv 1.2.1 其余按照requirement.txt里安装就行 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt由于我本人是在…...
火山引擎DataLeap推出两款大模型应用: 对话式检索与开发 打破代码语言屏障
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 自上世50年代,以“计算机”作为代表性象征的信息革命开始,社会对于先进生产力的认知便开始逐步更迭——从信息化(通常认为是把企…...
windows上配置vscode C/C++代码跳转
windows上配置vscode C/C代码跳转 安装插件 C/C 官方的 C/C 插件,必备的插件,是代码跳转、自动补全、代码大纲显示等功能的基础。 Gtags C/C GNU Global GNU Global除了安装该插件之外,还需要在本地下载安装GNU Global工具。多看下插件…...
【Xilinx】基于MPSoC的OpenAMP实现(一)
【Xilinx】基于MPSoC的OpenAMP实现(一) 一、开发环境1、开发思路2、下载官方bsp包 二、编译Linux1、配置petalinux环境变量2、创建工程3、进入目录4、设置缓存目录(重点:可离线编译,加快编译速度)5、配置u-…...
代码随想录算法训练营总结篇|完结撒花
完结撒花,真不敢相信60天坚持下来了。 算法一直是我的超级超级弱项,属于小白中的小白。一开始是想自己刷的,打开leetcode第一题,吼哟好家伙,梦开始的地方直接破碎。之前刷B站的时候就有学习up推荐算法可以看看代码随想…...
uniapp、vue实现滑动拼图验证码
uniapp、vue实现滑动拼图验证码 实际开发工作中,在登陆的时候需要短信验证码,但容易引起爬虫行为,需要用到反爬虫验证码,今天介绍一下拼图验证码,解决验证码反爬虫中的滑动验证码反爬虫。滑动拼图验证码是在滑块验证码…...
【ArcGIS】土地利用变化分析详解(矢量篇)
土地利用变化分析详解-矢量篇 土地利用类型分类1 统计不同土地利用类型的面积/占比1.1 操作步骤Step1:Step2:计算面积Step3:计算占比 2 统计不同区域各类土地利用类型的面积2.1 操作步骤 3 土地利用变化转移矩阵3.1 研究思路3.2 操作步骤 4 分…...
VS2022创建控制台应用程序后没有Main了,如何显示Main?
文章目录 问题描述原因解决方案简单的顶级语句试用计算器 其他文章 问题描述 用VS2022创建一个控制台应用后,没有名称空间和Main函数了,只有一个WriteLine,如下所示。 // See https://aka.ms/new-console-template for more information Co…...
当当网商品详情数据接口
当当网商品详情数据接口可以通过当当网的开放平台获取相关信息。您可以注册当当开放平台账号,并按照要求提交申请获取API接口的调用凭证。获得授权后,您将会收到一组AccessKey和SecretKey。使用编程语言(如Java)调用API接口&#…...
ultraEdit正则匹配多行(xml用)
在ultraEdit中,我想选取<channel到</channel>之间的多行(进行删除)。在perl模式下,命令为“<channel[\s\S]?</channel>”。下面是xml文件: <!--This XML file does not appear to have any sty…...
Mac上的utools无法找到本地搜索插件
utools安装地址 utools本地搜索用法 目前本地搜索只在win下,mac无福了 Mac可用cmdspace方法使用聚焦搜索,来搜索本地文件...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
