当前位置: 首页 > news >正文

Linux - 冯-诺依曼体系结构、初始操作系统

目录

冯•诺依曼体系

  结构推导

  内存提高效率的方法

  数据的流动过程

  体系结构相关知识

初始操作系统

  定位

  设计目的

  操作系统之上之下分别有什么

  管理精髓:先描述,再组织


冯•诺依曼体系

  结构推导

计算机基本工作流程图大致如下:

  1. 输入设备:接受用户输入的数据或指令,例如键盘、鼠标、扫描仪等。
  2. 中央处理器(CPU):负责执行数据的算术和逻辑运算。包括:
    • 算术逻辑单元(ALU):执行所有算术和逻辑操作。
    • 控制单元(CU):负责指挥整个计算机系统各个部件的工作。
  3. 内存:用于存储数据和指令的临时存储区域。包括:
    • 随机存取存储器(RAM):存储当前正在使用的数据和指令。
    • 只读存储器(ROM):存储重要的固件和系统启动程序。
  4. 外部存储设备:用于长期存储数据,例如硬盘、光盘、U盘等。
  5. 输出设备:将处理结果输出显示给用户,例如显示器、打印机、音响等。

        计算机的主要作用是解决人们的问题。为了实现这一目标,首先需要将数据或问题输入到计算机中,因此计算机必须配备输入设备。在计算机处理完问题后,还需要将结果显示出来,所以计算机必须配备输出设备。通过输入设备获取数据后,计算机会对这些数据进行一系列的算术运算和逻辑运算,最后通过输出设备将结果输出。整个过程可以总结为以下流程图。

        然而,计算机不仅仅需要具备算术运算和逻辑运算功能,还需要具备控制功能,以便控制何时从输入设备获取数据,何时将数据输出到输出设备等。在C语言中,算术运算对应一系列的加、减、乘、除操作,逻辑运算对应一系列的逻辑与、逻辑或等操作,而控制功能则对应于C语言中的条件判断、循环结构以及各个函数之间的跳转等。

        因此,我们将这个具有算术运算功能、逻辑运算功能以及控制功能的模块称为中央处理器,简称CPU。 

        然而,相对于中央处理器,输入设备和输出设备的速度非常慢。因此,在当前的计算机体系中,输入设备和输出设备的速度显得很慢,而CPU的速度非常快。根据木桶原理,整体系统的速度最终会受到最慢部分的限制,因此整个系统的表现速度将会是很慢的。

        因此,当前的体系结构显然是不合适的。为了解决这个问题,我们不再让输入设备和输出设备直接与CPU交互,而是在它们之间加入了内存。

        内存的一个特点是其速度远快于输入设备和输出设备,但又比CPU慢。因此,内存处于慢设备和快设备之间,作为一个不快也不慢的设备,能够在这个体系结构中起到缓冲作用。

        现在的体系运行流程如下:用户输入的数据首先被存放到内存中,CPU需要读取数据时直接从内存中读取。CPU处理完数据后将其写回内存,然后内存再将数据传输到输出设备,最后由输出设备进行输出显示。

        这就形成了最终的冯诺依曼体系结构。 

注意: 这里存储器只是内存,不包括外存。 

  内存提高效率的方法

        很多人有一个疑惑:先将输入设备的数据交给内存,再由内存将数据交给CPU,这个过程真的比CPU直接从输入设备获取数据更快吗?

        在解释这个问题之前,我们首先需要了解:内存具有数据存储的能力。虽然内存的容量只有4G或8G,但既然内存有容量,就意味着它具有预装数据的能力,而这正是提高该体系结构效率的秘诀。

        这里不得不提到局部性原理:根据统计学原理,当一个数据正在被访问时,下次很可能会访问其周围的数据。因此,当CPU需要获取某一行数据时,内存可以将该行数据及其周围的数据一同加载进来。CPU处理数据和内存加载数据可以同时进行,这样下次CPU就可以直接从内存中获取数据。

        输出数据时也是如此:CPU处理完数据后直接将数据放到内存中,当输出设备需要时再从内存中获取。这就引出了我们常说的缓冲区的概念。例如,缓冲区满了才将数据打印到屏幕上,使用fflush函数将缓冲区中的数据直接输出等,都是将内存中的数据直接传递到输出设备进行显示输出。

  数据的流动过程

        要使用QQ,首先需要联网。你和你朋友的电脑都采用冯诺依曼体系结构。在你向朋友发送消息的过程中,你的电脑中键盘充当输入设备,显示器和网卡充当输出设备;而你朋友的电脑中,网卡充当输入设备,显示器充当输出设备。

        首先,你在键盘上输入消息,键盘将消息加载到内存。此时,你的显示器可以从内存获取消息并显示在你自己的屏幕上,这样你就能看到自己所发送的消息。

        当键盘将消息加载到内存后,CPU从内存获取消息并对其进行各种封装,然后将封装好的消息写回内存。接下来,你的网卡可以从内存获取已封装的消息,并在网络中经过一系列处理(此处忽略网络处理细节)。之后,你朋友的网卡从网络中获取到你发送的消息,并将该消息加载到内存中。

        然后,你朋友的CPU从内存中获取消息并进行解包操作,将解包好的消息写回内存。最后,你朋友的显示器从内存中获取消息,并将其显示在他的电脑上。

  体系结构相关知识

        根据冯诺依曼体系结构,从硬件角度或数据层面来看,CPU只能直接与内存交互,外设也只能通过内存来进行数据交换。这也解释了为什么程序在运行之前必须先加载到内存中:因为可执行程序(文件)存储在硬盘上(外设),而CPU只能从内存中获取数据,所以必须先将程序加载到内存中才能执行。

常见的输入设备和输出设备包括:

  • 输入设备:键盘、鼠标、网卡、硬盘、话筒、摄像头、扫描仪等。
  • 输出设备:显示器、音响、网卡、硬盘、打印机等。

注意:同一种设备在不同情境下可能作为输入设备或输出设备。

        在硬件层面上,各个硬件单元之间通过总线连接。外设与内存之间的总线称为I/O总线,而内存与CPU之间的总线称为系统总线

        在实际操作中,例如键盘输入,键盘会先将获取到的内容存储在自己的寄存器中,然后通过寄存器将数据写入内存。

        这种体系结构确保了数据在各个硬件设备之间的有效交换和协作,同时提供了高效的数据传输和处理能力。

初始操作系统

  定位

        操作系统在计算机系统中的定位非常重要,它是控制和管理计算机硬件与软件资源的核心软件。

  设计目的

操作系统设计的目的包括:

  1. 资源管理和优化:有效管理和优化计算机系统中的硬件资源。

  2. 用户接口:提供良好的用户界面和应用程序运行环境。

  3. 执行环境:确保程序安全、稳定地执行。

  4. 多任务和并发支持:支持多任务处理和并发执行。

  5. 文件和数据管理:有效组织、存储和保护文件和数据。

  6. 安全性和隔离:保护系统和用户数据的安全,提供合适的权限控制。

  7. 网络和通信:支持网络连接和数据传输。

  8. 可扩展性和灵活性:适应不同需求和硬件平台的扩展和定制化配置。

  操作系统之上之下分别有什么

        首先,我们所看到的是计算机的实体部分,即底层的硬件。这些硬件看似单独罗列,实际上在底层都遵循冯诺依曼的组织结构。

        除了硬件部分,单靠这些硬件是不够的,还需要软件来管理它们。例如,确定内存何时从输入设备读取数据、读取多少数据,以及何时将数据刷新到输出设备的缓冲区,是由软件来控制的。这个软件就是操作系统(Operating System)。 

        在操作系统与底层硬件之间确实存在一层驱动层。操作系统不直接与底层硬件打交道,而是通过驱动程序来管理和控制硬件。例如,键盘有键盘驱动程序,网卡有网卡驱动程序,硬盘有硬盘驱动程序等。这些驱动程序负责直接与硬件通信,执行读取、写入以及获取硬件状态等操作。驱动程序通常由硬件制造商提供,或者由操作系统开发者针对特定硬件开发。

        通过引入驱动层,操作系统不需要直接关心具体的硬件细节和操作方式。操作系统只需关注何时需要读取数据或执行操作,而不必关心这些操作是如何在硬件层面实现的,从而实现了操作系统与硬件之间的解耦。

 

操作系统主要进行以下四项管理:

  1. 内存管理:负责内存的分配、共享、保护和扩展等操作。

  2. 驱动管理:管理计算机设备的驱动程序,包括分类、更新和删除等操作。

  3. 文件管理:管理文件的存储空间、目录结构、文件操作和保护等。

  4. 进程管理:负责进程的创建、调度和管理。

        在操作系统的顶层是用户层,这里我们可以通过命令行或图形界面进行各种操作。 

        为了保护自身安全性,操作系统不直接让用户访问其内部,而是通过一系列接口暴露给用户,这些接口被称为系统调用接口。 

        然而,对于普通用户来说,直接使用系统调用接口的成本较高,因为这需要对系统有一定的了解。因此,在系统调用接口之上,开发出了一批库,如libc和libc++。这些库实际上是对系统调用接口的封装,在语言级别上提供了各种函数(如printf和scanf),我们可以通过调用这些函数来编写各种程序。 

  管理精髓:先描述,再组织

        要理解操作系统的管理概念,可以通过实际角色来解释。

        举个例子:假设有三个角色,学生、辅导员和校长。在这个例子中,校长是管理者,学生是被管理者。那么,辅导员则充当中间角色,负责在校长和学生之间传递信息和执行指示,以确保学生得到适当的指导和支持。

        深入思考后可以得出,完成任何事情通常需要经历两个关键过程:首先是决策阶段,即确定是否要做某件事以及如何做;其次是执行阶段,即实际去做这件事情。

        在校长管理学生的例子中,校长作为管理者负责做出决策,确定学校的方向和政策。然而,校长不会直接执行这些决策,而是委派辅导员作为执行者来实施这些决策,确保学生按照学校规定的方向行事。

        因此,辅导员的角色主要是执行者,负责执行管理者(校长)制定的决策和方针。

        尽管我们很少在学校看到校长本人,但校长如何在没有直接接触我们的情况下管理我们呢?

举例来说,假设校长要求辅导员提供计算机课程排名前十的学生的成绩和表现记录。校长会从这些数据中选择三名学生参加编程大赛,然后委派老师对这三名学生进行强化训练。在这个过程中,校长从未亲自见过这些学生,而是基于什么进行管理呢?校长主要依赖数据。

        实际上,学校对每位学生的各种信息进行管理,包括基本信息、成绩、健康状况等等。校长通过这些数据来做出决策和管理安排,而不必直接与每个学生互动。

        每个学生的信息可以看作是一套数据,通过这些数据,校长能够有效地进行学生管理。在C语言中,我们将这种数据组织方式称为抽象结构体;而在C++中,则称为面向对象。

        随着学生数量的增多,校长可以将所有学生的信息组织起来。组织的方式有多种选择,如链表、顺序表或树结构,每种方式都有其独特的优势。因此,就有了一门专门教授如何有效管理数据的课程,称为数据结构。例如,假设校长使用双链表来组织学生的信息。

        在这种情况下,校长对各个学生的管理实际上就是对这个双链表进行增删查改操作。例如,当有新生时,直接将一个新的节点加入到双链表中;而当学生毕业时,直接从双链表中移除该学生的信息即可。 

总结:

        管理者管理被管理者的过程实际上包括以下几个步骤:

  •         首先描述被管理者的各种信息;
  •         然后根据某种数据结构将多个被管理者的描述信息组织起来;
  •         最终,管理者通过对这个数据结构进行操作来管理被管理者。

相关文章:

Linux - 冯-诺依曼体系结构、初始操作系统

目录 冯•诺依曼体系 结构推导 内存提高效率的方法 数据的流动过程 体系结构相关知识 初始操作系统 定位 设计目的 操作系统之上之下分别有什么 管理精髓:先描述,再组织 冯•诺依曼体系 结构推导 计算机基本工作流程图大致如下: 输入设备&a…...

成功适配!极验设备指纹HarmonyOS 鸿蒙版官方下载

近日,华为开发者大会(HDC 2024)在东莞召开。在大会开幕日的首场主题演讲中,华为宣布当前已有TOP5000应用成为鸿蒙原生应用,350+SDK已适配HarmonyOS NEXT版本。其中,极验作为其重要伙伴&#xff…...

【C++】字符串学习 知识点+代码记录

一.知识点总结 1. C风格字符串(字符数组) 字符数组存储字符串:C风格的字符串实际上是字符数组,以空字符\0作为结尾标志。字符串字面量与字符数组:字符串字面量如"Hello"被编译器视为const char*类型&#…...

尝试理解docker网络通信逻辑

一、docker是什么 Docker本质是一个进程,宿主机通过namespace隔离机制提供进程需要运行基础环境,并且通过Cgroup限制进程调用资源。Docker的隔离机制包括 network隔离,此次主要探讨网络隔离mount隔离hostname隔离user隔离pid隔离进程通信隔离 二、doc…...

数据仓库哈哈

数据仓库 基本概念数据库(database)和数据仓库(Data Warehouse)的异同 整体架构分层架构方法论ER模型(建模理论)维度模型 何为分层第一层:数据源(ODS ER模型)设计要点日志…...

K最近邻(K-Nearest Neighbors, KNN)

K最近邻(K-Nearest Neighbors, KNN)理论知识推导 KNN算法是一个简单且直观的分类和回归方法,其基本思想是:给定一个样本点,找到训练集中与其最近的K个样本点,根据这些样本点的类别(分类问题&am…...

深度学习损失计算

文章目录 深度学习损失计算1.如何计算当前epoch的损失?2.为什么要计算样本平均损失,而不是计算批次平均损失? 深度学习损失计算 1.如何计算当前epoch的损失? 深度学习中的损失计算,通常为数据集的平均损失&#xff0…...

论文翻译:通过云计算对联网多智能体系统进行预测控制

通过云计算对联网多智能体系统进行预测控制 文章目录 通过云计算对联网多智能体系统进行预测控制摘要前言通过云计算实现联网的多智能体控制系统网络化多智能体系统的云预测控制器设计云预测控制系统的稳定性和一致性分析例子结论 摘要 本文研究了基于云计算的网络化多智能体预…...

Java核心(五)多线程

线程并行的逻辑 一个线程问题 起手先来看一个线程问题: public class NumberExample {private int cnt 0;public void add() {cnt;}public int get() {return cnt;} }public static void main(String[] args) throws InterruptedException {final int threadSiz…...

IDEA快速生成项目树形结构图

下图用的IDEA工具,但我觉得WebStorm 应该也可以 文章目录 进入项目根目录下,进入cmd输入如下指令: 只有文件夹 tree . > list.txt 包括文件夹和文件 tree /f . > list.txt 还可以为相关包路径加上注释...

【CPO-TCN-BiGRU-Attention回归预测】基于冠豪猪算法CPO优化时间卷积双向门控循环单元融合注意力机制

基于冠豪猪算法CPO(Correlation-Preservation Optimization)优化的时间卷积双向门控循环单元(Bidirectional Gated Recurrent Unit,BiGRU)融合注意力机制(Attention)的回归预测需要详细的实现和…...

面试高级 Java 工程师:2024 年的见闻与思考

面试高级 Java 工程师:2024 年的见闻与思考 由于公司业务拓展需要,公司招聘一名高级java工程研发工程师,主要负责新项目的研发及老项目的维护升级。我作为一名技术面试官,参与招聘高级 Java 工程师,我见证了技术领域的…...

设计模式大白话之装饰者模式

想象一下,你走进一家咖啡馆,点了一杯美式咖啡。但是,你可能还想根据自己的口味添加一些东西,比如奶泡、巧克力粉、焦糖酱或是肉桂粉。每次你添加一种配料,你的咖啡就会变得更丰富,同时价格也会相应增加。 在…...

动手学深度学习6.3 填充和步幅-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。 本节课程地址:填充和步幅_哔哩哔哩_bilibili 代码实现_哔哩哔哩_bilibili 本节教材地址:6.3. 填充和…...

函数的形状怎么定义?

在TypeScript中,函数的形状可以通过多种方式定义,以下是几种主要的方法: 1、函数声明:使用function关键字声明函数,并直接在函数名后的括号内定义参数,通过冒号(:)指定参数的类型&a…...

Windows 虚拟机服务器项目部署

目录 一、部署JDK下载JDK安装JDK1.双击 jdk.exe 安装程序2.点击【下一步】3.默认安装位置,点击【下一步】4.等待提取安装程序5.默认安装位置,点击【下一步】6.等待安装7.安装成功,点击【关闭】 二、部署TomcatTomcat主要特点包括:…...

JDBC(2)基础篇2——增删改查及常见问题

目录 一、基于PreparedStatement实现CRUD 1.查询单行单列 2.查询单行多列 3.查询多行多列 4.新增 5.修改 6.删除 7.总结 二、常见问题 1.资源的管理 2.SQL语句问题 3.SQL语句未设置参数问题 4.用户名或密码错误问题 5.通信异常 总结 一、基于PreparedStatement实…...

JVM知识点梳理

目录标题 1.类加载机制1.1 Java 运行时一个类是什么时候被加载的?1.2 JVM 一个类的加载过程?1.3 一个类被初始化的过程?1.4 继承时父子类的初始化顺序是怎样的?1.5 究竟什么是类加载器?1.6 JVM 有哪些类加载器?1.7 JVM 中不同的类加载器加载哪些文件?1.8 JVM 三层类加载…...

产品经理-一份标准需求文档的8个模块(14)

一份标准优秀的产品需求文档包括: ❑ 封面; ❑ 文档修订记录表; ❑ 目录; ❑ 引言; ❑ 产品概述:产品结构图 ❑ 详细需求说明:产品逻辑图、功能与特性简述列表、交互/视觉设计、需求详细描述&am…...

如何用一个例子向10岁小孩解释高并发实时服务的单线程事件循环架构

I/O密集型进程和CPU密集型进程 聊天应用程序、MMO(大型多人在线)游戏、金融交易系统、等实时服务需要处理大量并发流量和实时数据。 这些服务是I/O密集型的,因为它们花费大量资源处理输入输出操作,例如高吞吐量、低延迟网络通信…...

如何为帕金森病患者选择合适的步行辅助设备?

选择步行辅助设备的步骤和建议 为帕金森病患者选择合适的步行辅助设备时,应考虑以下几个关键因素: 患者的具体症状和需求:帕金森病患者的步行困难可能包括冻结步态、平衡能力下降和肌肉僵硬。选择设备时,应考虑这些症状&#xff…...

【排序算法】1.冒泡排序-C语言实现

冒泡排序(Bubble Sort)是最简单和最通用的排序方法,其基本思想是:在待排序的一组数中,将相邻的两个数进行比较,若前面的数比后面的数大就交换两数,否则不交换;如此下去,直…...

Unity最新第三方开源插件《Stateful Component》管理中大型项目MonoBehaviour各种序列化字段 ,的高级解决方案

上文提到了UIState, ObjectRefactor等,还提到了远古的NGUI, KBEngine-UI等 这个算是比较新的解决方法吧,但是抽象出来,问题还是这些个问题 所以你就说做游戏是不是先要解决这些问题? 而不是高大上的UiImage,DoozyUI等 Mono管理引用基本用法 ① 添加Stateful Component …...

Spark SQL----INSERT TABLE

Spark SQL----INSERT TABLE 一、描述二、语法三、参数四、例子4.1 Insert Into4.2 Insert Overwrite 一、描述 INSERT语句将新行插入表中或覆盖表中的现有数据。插入的行可以由值表达式指定,也可以由查询结果指定。 二、语法 INSERT [ INTO | OVERWRITE ] [ TABL…...

socket功能定义和一般模型

1. socket的功能定义 socket是为了使两个应用程序间进行数据交换而存在的一种技术,不仅可以使同一个主机上两个应用程序间可以交换数据,而且可以使网络上的不同主机间上的应用程序间进行通信。 2. 图解socket的服务端/客户端模型...

如何在linux中给vim编辑器添加插件

在Linux系统中给Vim编辑器添加插件通常通过插件管理器来完成,以下是一般的步骤: 1.使用插件管理器安装插件 安装插件管理器(如果尚未安装): 常见的插件管理器包括 Vundle、vim-plug 和 Pathogen 等。你可以根据个人喜…...

Web 中POST为什么会发送两次请求

文章目录 前言一、浏览器的重试机制二、跨域请求与预检请求三、表单的自动提交四、服务器配置问题五、前端代码的重复执行六、同源策略与CORS总结 前言 我们在做Web开发时,经常会使用浏览器F12查看请求参数是否正确,但是会发现POST请求,一个地…...

C语言经典程序100案例

C语言经典程序100题(完整版) 【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数都是多少 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 #include "stdio…...

南京邮电大学统计学课程实验3 用EXCEL进行方差分析 指导

一、实验描述 实验目的 1、学会在计算机上利用EXCEL进行单因素方差分析; 2、学会在计算机上利用EXCEL进行无重复的双因素方差分析。 二、实验环境 实验中使用以下软件和硬件设备 (1)Windows XP操作系统; (2&am…...

2024-07-13 Unity AI状态机2 —— 项目介绍

文章目录 1 项目介绍2 模块介绍2.1 BaseState2.2 ...State2.2.1 PatrolState2.2.2 ChaseState / AttackState / BackState 2.3 StateMachine2.4 Monster 3 其他功能4 类图 项目借鉴 B 站唐老狮 2023年直播内容。 点击前往唐老狮 B 站主页。 1 项目介绍 ​ 本项目使用 Unity 2…...