【Linux】冯诺依曼体系结构-操作系统
一.冯诺依曼体系结构
我们所使用的计算机,如笔记本等都是按照冯诺依曼来设计的:
截止目前,我们所知道的计算机都是由一个一个的硬件组装起来的,这些硬件又由于功能的不同被分为了输入设备,输出设备,存储器和cpu。
输入设备有:键盘,鼠标,话筒,摄像头,网卡,磁盘等等……
输出设备有:显示器,网卡,磁盘,打印机等等……
而存储器其实就是我们所说的内存,而CPU是由运算器和控制器组成的。
下面我们在谈的时候先不管控制器,只观察运算器:
1.cpu只与内存打交道
软件其实就是一个二进制程序,而软件被运行前必须加载到内存中,那没被加载到内存中在哪呢?就在磁盘中。就比如QQ这个软件它在没有运行的时候就在磁盘中,我们双击即使将其加载到内存的动作。
那为什么必须要将软件加载到内存中呢?因为体系结构规定!因为在冯诺依曼体系结构中,cpu只能与内存交互,无法直接与外设交互,所以我们必须得将程序先加载到内存中,才可以被cpu执行。
在加载的过程中,数据(代码和数据)就发生了流动,但是流动这个概念很模糊,简单来说,就是将数据从一个设备拷贝到另一个设备的过程。
所以一个体系结构的效率也就体现在了拷贝的效率上。
综上,在数据层面上,cpu只与内存打交道,内存只与外设打交道。
2.理解数据流动
比如我们要打印一个字符串到到屏幕上,此时当我们运行程序,程序就会等待外设——键盘输入,输入一个字符串之后,加载到该程序中,然后通过cpu的处理,最后返回到内存中,最后转交给输出设备——屏幕。这样就达到了我们打印信息的目的。
下面举一个发送qq消息的例子:你和你的同学放寒假在家使用电脑qq聊天,你发送了一个你好,同时在对方屏幕上也出了一个你好,这也是是一个数据流动,那么这到底是怎么实现的呢?
其实利用电脑聊天本质上就是两台冯诺依曼体系通过网络在进行数据流动:
你首先双击qq将其加载到内存中,然后通过输入设备键盘将你好输入到聊天框中,此时点击发送,你好这条消息首先交到了qq中,也相当于交到了内存中,再交到cpu中,进行加密等一系列操作,最后返回到内存中,交给输出设备网卡,网卡通过网络,将其发送到你朋友的机器上。而对于你朋友来说,他的输入设备就是网卡,接着网卡将数据交给内存,内存交给cpu,cpu进行解码等操作,返给内存,最后内存将数据通过输出设备屏幕将信息你好显示出来。
当然,这条你好不仅他能看见,你也能看见,这就说明对你来说,你的输出设备不仅有网卡,也有显示器。
二.操作系统
操作系统其实是一款进行软硬件管理的一款软件。
不论是Linux还是Windows还是macos都是操作系统,它们的功能都是类似的,都是要进行管理软硬件。
但是狭义上的操作系统指的是操作系统内核,但是内核不允许任何人直接访问,所以一些大佬就对操作系统进行了封装,设计出了一些外壳程序——shell等,这样就可以帮助用户与内核建立联系。
1.设计OS的目的
我们先前说了,操作系统是一个进行软硬件管理的软件,所以它是处在软件层和硬件层的中间,一遍向下与硬件交互,管理所有的软硬件资源,向上,为用户提供一个良好的执行环境。
我们看,计算机上面的硬件和软件都是层状分布的,这样符合高内聚低耦合的设计思路。即同一模块之间的联系紧密,但不同模块之间的影响很小,一个产生问题不会对另一个产生影响。
而操作系统的位置是一个承上启下的位置。当我们需要访问硬件时,操作系统会调用驱动系统,驱动程序让硬件处于工作状态,这样就能保证与硬件的交互,但与硬件的交互不是目的,而是手段。
当用户需要访问操作系统时,不可以直接访问,而是要通过系统调用,系统调用其实就是系统提供的一系列函数。
而在系统调用层上面还有一层用户操作接口,这些接口一些在底层封装了系统调用,这下开发者在实际开发过程中,便不需要亲自进行系统调用,而是借助已有的库进行开发。
例如我们在C语言学到的printf函数,该函数在底层就有可能封装了系统调用,因为其向硬件——显示器打印了内容。我们可以简单的认为,如果一个程序访问了硬件,那么这个程序必须贯穿整个软硬件体系结构。
综上所述,设计OS的目的其实就是为了给用户开发者一个舒适简单的开发环境。
2.理解操作系统如何进行管理
我们已经知道,操作系统是一个进行软硬件管理的软件,所以我们自然要明白操作系统是如何进行管理的。
先描述,在组织。
下面举一个简单的例子,比如大学校园,现在只有三类人:学生、导员和校长。校长要对学生进行管理,校长就是管理者,而我们学生就是被管理者。那么我们要怎么进行管理呢? 我们对学生管理到底是在管理什么呢?
其实校长对学生进行管理只需要对学生的数据进行管理,这个学生叫什么,多大,什么专业,家是哪的等等……所以校长就可以设计一个excel表格,表头就是学生的信息。但是校长需要去每一个学生的宿舍让学生填表么?当然不用了,这时候就需要导员出场了,导员就好比驱动程序,校长发布决策,导员执行决策——让学生填表。
但是这样虽然有了学生的信息,但是人一多的话,校长管理起来依旧麻烦,校长需要遍历excel表格来获取信息,这样太耗时了。
所以我们可以借助计算机来进行管理,我们学过结构体的概念,我们可以将学生的信息用结构体来表示。这下如果我们要新增一个学生,就可以新增一个该类的对象,开除一个学生就删除一个变量。这就是描述的过程:
struct student
{string _name;int _age;string _id;string _adderss;// ...
};
但是如果有1万个学生就有1万个变量,这样很难维护,所以我们可以给类中加一个struct student* next指针,使一个一个的学生成为一个节点,用链表的方式连接起来,这就是组织的过程。
这样,校长之前翻看excel表格的行为,就转变成了对链表的增删查改。
3.理解系统调用
系统调用时用户与操作系统进行交互的桥梁。因为操作系统本质上不相信任何人,所以它干脆不允许任何人访问。但是它又不得不让人访问,所以就做出了一系列的系统调用让用户使用。
这样的情形很像银行这一角色。银行本质上就不相信任何人,所以它不允许任何人去直接访问它的系统与金库。但是它又得提供它的一些服务,所以设计出了窗口这样的东西。这些窗口就像是系统调用。
虽然有了窗口,但是去银行的难免有人不会知道操作顺序,所以银行一般还有大堂经理这一角色。
当我们不知道怎么操作时,就可以寻求大堂经理的帮助,大堂经理就会帮助我们去往窗口进行操作。他的角色就好像系统调用上一层的用户调用层,比如一些库,指令,shell外壳等等。它们可以帮助我们去进行系统调用。
相关文章:
【Linux】冯诺依曼体系结构-操作系统
一.冯诺依曼体系结构 我们所使用的计算机,如笔记本等都是按照冯诺依曼来设计的: 截止目前,我们所知道的计算机都是由一个一个的硬件组装起来的,这些硬件又由于功能的不同被分为了输入设备,输出设备,存储器…...
mapbox进阶,使用点类型geojson加载symbol符号图层,用于标注带图标的注记,且文字居中在图标内,图标大小自适应文字
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象…...
布隆过滤器(附带位图讲解)
提到位图,我们首先想到的应该是它的两面定义: 位图图像(bitmap),亦称为点阵图或栅格图像,是由称作像素(图片元素)的单个点组成的。位图是指内存中连续的二进制位,用于对…...
【芯片设计】AI偏车载芯片前端设计工程师面试记录·20250304
【芯片前端设计面试经验专栏介绍】 专栏聚焦数字芯片前端设计核心技术与面试方法论,涵盖架构设计、RTL开发、验证方法学、低功耗设计、时序收敛等高频考点,深入解析行业头部企业的面试真题与设计场景。内容包含但不限于: 知识点系统梳理 :从Verilog/SV语法陷阱、FSM设计模式…...
2024北京理工大学计算机复试上机真题
2024北京理工大学计算机复试上机真题 2024北京理工大学计算机考研复试上机真题 在线评测:https://app2098.acapp.acwing.com.cn/ 等腰梯形 题目描述 请输入高度h,输入一个高为h,上底边长为h的等腰梯形(例如h4,图形…...
CC++的内存管理
目录 1、C/C内存划分 C语言的动态内存管理 malloc calloc realloc free C的动态内存管理 new和delete operator new函数和operator delete函数 new和delete的原理 new T[N]原理 delete[]的原理 1、C/C内存划分 1、栈:存有非静态局部变量、函数参数、返回…...
Redis是什么?如何使用Redis进行缓存操作?
Redis(Remote Dictionary Server)是一款高性能的内存键值存储系统,广泛用于缓存、消息队列、会话存储和实时数据处理等场景。它基于内存存储,支持多种数据结构,如字符串、列表、集合、有序集合和哈希表等,具…...
【商城实战(2)】商城架构设计:从底层逻辑到技术实现
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
USB 模块 全面解析(一)
本文是我整理的一些 USB 的学习心得,希望能对大家有所帮助。 文章目录 前言🍒 USB 基本概述🍒 USB 结构框架🍉硬件框架🍉 软件框架 🍒 USB 电气信号🍉 USB 硬件线路🍉 信号电平&…...
xr-frame 3D Marker识别,扬州古牌坊 3D识别技术稳定调研
目录 识别物体规范 3D Marker 识别目标文件 map 生成 生成任务状态解析 服务耗时: 对传入的视频有如下要求: 对传入的视频建议: 识别物体规范 为提高Marker质量,保证算法识别效果,可参考Marker规范文档 Marker规…...
拆一拆吉利普及高阶智驾的盲盒
吉利银河后续所有的全新和改款车型都会搭载千里浩瀚不同级别的智驾系统; 既然银河都标配了,定位更高的领克大概率也会全系标配; 加上极氪从去年下半年就是全系标配。 这样一来,就是吉利版的「全民智驾」。 一、 「千里浩瀚」&a…...
2024四川大学计算机考研复试上机真题
2024四川大学计算机考研复试上机真题 2024四川大学计算机考研复试机试真题 历年四川大学计算机考研复试机试真题 在线评测:https://app2098.acapp.acwing.com.cn/ 分数求和 题目描述 有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13… 求出这个数列的前 …...
解锁高效编程:深度剖析C++11核心语法与标准库实战精要
目录 一、引言 二、核心语法革新 (一)类型推导系统 1. 统一初始化语法 2. initializer_list 机制 (三)函数增强 1. Lambda表达式 2. 可变参数模版 3. 数对象包装和参数绑定 (四)内存管理 1. 右值引用与…...
基于提示驱动的潜在领域泛化的医学图像分类方法(Python实现代码和数据分析)
摘要 医学图像分析中的深度学习模型易受数据集伪影偏差、相机差异、成像设备差异等导致的分布偏移影响,导致在真实临床环境中诊断不可靠。领域泛化(Domain Generalization, DG)方法旨在通过多领域训练提升模型在未知领域的性能,但…...
深度学习-大白话解释循环神经网络RNN
目录 一、RNN的思想 二、RNN的基本结构 网络架构 关键点 三、RNN的前向传播 四、RNN的挑战:梯度爆炸和梯度消失 问题分析 示例推导 五、LSTM:RNN的改进 核心组件 网络架构 3. LSTM 的工作流程 4. 数学公式总结 5. LSTM 的优缺点 优点 缺点 6. LSTM 的…...
Spring统一格式返回
目录 一:统一结果返回 1:统一结果返回写法 2:String类型报错问题 解决方法 二:统一异常返回 统一异常返回写法 三:总结 同志们,今天咱来讲一讲统一格式返回啊,也是好久没有讲过统一格式返…...
IPOIB 驱动中的发送完成处理机制
1. ipoib_napi_add_rss 函数 ipoib_napi_add_rss 函数的主要作用是为 InfiniBand 设备的每个接收队列和发送队列添加 NAPI 结构,并注册相应的轮询函数。NAPI(New API)是一种网络接口卡(NIC)的轮询机制,用于高效处理网络数据包,避免频繁的中断处理开销。 static void i…...
BambuStudio学习笔记:format格式化输出
# Slic3r::format 字符串格式化工具说明## 概述本头文件提供了基于 boost::format 的 C 字符串格式化工具封装,旨在简化多参数格式化操作,支持类似 C20 std::format 的调用语法。## 核心设计目标- **简化调用语法**:替代 boost::format 的链式…...
软件测试基础:功能测试知识总结
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、测试项目启动与研读需求文档 (一) 组建测试团队 1、测试团队中的角色 2、测试团队的基本责任 尽早地发现软件程序、系统或产品中…...
wheel_legged_genesis 开源项目复现与问题记录
Reinforcement learning of wheel-legged robots based on Genesis System Requirements Ubuntu 20.04/22.04/24.04 python > 3.10 开始配置环境! 点击releases后进入,下载对应最新版本的代码: 将下载后的代码包解压到你的自定义路径下&…...
【金融量化】Ptrade中如何量化策略的交易持久化?
交易持久化是指在实际交易中交易相关的数据(如订单信息、持仓状态、策略参数等)保存到本地或远程存储中,以便在程序重启、系统崩溃或网络中断后能够恢复交易状态,确保策略的连续性和稳定性。以下是如何在策略中实现交易持久化的方…...
qt实践教学(编写一个代码生成工具)持续更新至完成———
前言: 我的想法是搭建一个和STM32cubemux类似的图形化代码生成工具,可以把我平时用到的代码整合一下全部放入这个软件中,做一个我自己专门的代码生成工具,我初步的想法是在下拉选框中拉取需要配置的功能,然后就弹出对…...
设置 CursorRules 规则
为什么要设置CursorRules? 设置 CursorRules 可以帮助优化代码生成和开发流程,提升工作效率。具体的好处包括: 1、自动化代码生成 :通过定义规则,Cursor 可以根据你的开发需求自动生成符合规定的代码模板,…...
AI 芯片全解析:定义、市场趋势与主流芯片对比
1. 引言:什么是 AI 芯片? 随着人工智能(AI)的快速发展,AI 计算的需求不断增长,从云计算到边缘计算,AI 芯片成为推动智能化时代的核心动力。那么,什么样的芯片才算 AI 芯片ÿ…...
Axure高保真Element框架元件库
点击下载《Axure高保真Element框架元件库》 原型效果:https://axhub.im/ax9/9da2109b9c68749a/#g1 摘要 本文详细阐述了在 Axure 环境下打造的一套高度还原 Element 框架的组件元件集。通过对 Element 框架组件的深入剖析,结合 Axure 的强大功能&#…...
21.<基于Spring图书管理系统②(图书列表+删除图书+更改图书)(非强制登录版本完结)>
PS: 开闭原则 定义和背景 开闭原则(Open-Closed Principle, OCP),也称为开放封闭原则,是面向对象设计中的一个基本原则。该原则强调软件中的模块、类或函数应该对扩展开放,对修改封闭。这意味着一个软件实体…...
【2025年后端开发终极指南:云原生、AI融合与性能优化实战】
一、2025年后端开发的五大核心趋势 1. 云原生架构的全面普及 云原生(Cloud Native)已经成为企业级应用的核心底座。通过容器化技术(DockerKubernetes)和微服务架构,开发者能够实现应用的快速部署、弹性伸缩和故障自愈…...
Docker新手入门(持续更新中)
一、定义 快速构建、运行、管理应用的工具。 Docker可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用。 所谓镜像,就是将应用所需的函数库、依赖、配置等应用一起打包得到的。 所谓容器,为每个镜像的应用进程创建…...
微信小程序读取写入NFC文本,以及NFC直接启动小程序指定页面
一、微信小程序读取NFC文本(yyy优译小程序实现),网上有很多通过wx.getNFCAdapter方法来监听读取NFC卡信息,但怎么处理读取的message文本比较难找,现用下面方法来实现,同时还解决几个问题,1、在回调方法中this.setData不更新信息,因为this的指向问题,2、在退出页面时,…...
【Spring Boot 应用开发】-05 命令行参数
Spring Boot 常用命令行参数 Spring Boot 支持多种命令行参数,这些参数可以在启动应用时通过命令行直接传递。以下是一些常用的命令行参数及其详细说明: 1. 基本配置参数 --server.port端口号 指定应用程序运行的HTTP端口,默认为8080。 jav…...
