【Linux】冯诺依曼体系与操作系统(OS)概念

news2025/1/16 3:35:45

文章目录

  • 冯诺依曼体系结构
    • 为什么是这样的结构
    • 局部性原理
  • 操作系统(Operator System)
      • 设计OS的目的
      • 定位
      • 如何理解管理 (精髓:先描述再组织)
      • 总结
      • 系统调用和库函数概念

冯诺依曼体系结构

我们常见的计算机,如笔记本.我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系

image-20220410110920775

为什么是这样的结构

1)计算机的作用就是为了解决人的问题,而要解决问题,首先需要将数据或是问题输入到计算机当中,所以计算机必须要有输入设备.

2)计算机解决完问题后还需要将计算结果输出显示出来,所以计算机必须要有输出设备.

3)计算机通过输入设备得到数据,数据在计算机当中进行一系列的算术运算和逻辑运算后,通过输出设备进行输出,于是就得到了下述的过程:

image-20220410112134811

4)计算机当中只有算术运算功能和逻辑运算功能是不够的,还需要有控制功能,控制何时从输入设备获取数据,何时输出数据到输出设备等

对应到C语言当中,算术运算就完成一系列的加减乘除,而逻辑运算就对应于一系列的逻辑与逻辑或等,控制功能就对应于C语言当中的判断、循环以及各个函数之间的跳转等等

image-20220410112230017

5)这个具有算术运算功能、逻辑运算功能以及控制功能的这个模块称为中央处理器,简称CPU.

但是输入设备和输出设备相对于中央处理器来说是非常慢的,于是在当前这个体系整体呈现出来的就是,输入设备和输出设备很慢,而CPU很快,根据木桶原理(一只木桶盛水的多少,并不取决于桶壁上最高的那块木块,而恰恰取决于桶壁上最短的那块) 最终整个体系所呈现出来的速度将会是很慢的.

6)所以当前这个体系结构显然是不合适的,于是我们就不让输入设备和输出设备直接与CPU进行交互,而在这中间加入了内存

image-20220410112536905

内存有个特点就是,比输入设备和输出设备要快很多,但是比CPU又要慢.

现在内存就处于慢设备和快设备之间,是一个不快也不慢的设备,能够在该体系结构当中就起到一个缓冲的作用.
现在该体系的运行流程就是:用户输入的数据先放到内存当中,CPU读取数据的时候就直接从内存当中读取,CPU处理完数据后又写回内存当中,然后内存再将数据输出到输出设备当中,最后由输出设备进行输出显示.于是就形成了最终的冯诺依曼体系结构.


局部性原理

先将输入设备的数据交给内存,再由内存将数据交给CPU,这个过程真的比CPU直接从输入设备获取数据更快? 是的!

我们首先需要知道:内存具有数据存储的能力.虽然内存的大小只有4G/8G,但是既然内存有大小,那么它就有预装数据的能力,而这就是提高该体系结构效率的秘诀

局部性原理:根据统计学原理,当一个数据正在被访问时,那么下一次有很大可能会访问其周围的数据.所以当CPU需要获取某一行数据时,内存可以将该行数据之后的数据一同加载进来,而CPU处理数据和内存加载数据是可以同时进行的,这样下次CPU就可以直接从内存当中获取数据

输出数据的时候也一样,CPU处理完数据后直接将数据放到内存当中,当输出设备需要时再在内存当中获取即可,这也就有了我们平常所说的缓冲区的概念

例如,缓冲区满了才将数据打印到屏幕上,使用fflush函数将缓冲区当中的数据直接输出之类的,都是将内存当中的数据直接拿到输出设备当中进行显示输出


关于冯诺依曼,必须强调几点:

  • 这里的存储器指的是内存
  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写,CPU直接对内存读写,不能访问外设(输入或输出设备)
    • 即:CPU只和内存打交道,CPU不直接和外设打交道,因为CPU很快,而外设很慢,有存储器在二者间起缓冲作用
  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取
    • 外设也只能和内存打交道
  • 内存是体系结构的核心设备 所有设备都只能直接和内存打交道
  • IO = input + output

所以我们就可以回答:为什么程序运行之前必须先加载到内存

因为可执行程序(文件)是在硬盘(外设)上的,而CPU只能从内存当中获取数据,所以必须先将硬盘上的数据加载到内存,也就是必须先将程序加载到内存


我们所认识的计算机,都是由一个个的硬件组件组成

输入设备:键盘、磁盘、网卡、显卡、话筒、扫描仪,摄像头…

输出设备:显示器、磁盘、网卡、显卡、音响,打印机…

  • 注意:同种设备在不同场景下可能属于输入设备,也可能属于输入设备

存储器:注意指的是内存,不是磁盘等外存

中央处理器(CPU):其中运算器进行算术运算逻辑运算


我们经常说CPU当中有寄存器,实际上寄存器不仅仅在CPU当中存在,在其他外设当中也是有寄存器的.例如,当我们敲击键盘时,键盘是先将获取到的内容存储在寄存器当中,然后再通过寄存器将数据写入内存当中.

在物理层面上,各个硬件单元之间是通过总线连接的,外设与内存之间的总线叫做IO总线,内存与CPU之间的总线叫做系统总线


对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上,请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程.从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程

image-20220410115602319

1)要使用QQ,首先需要网络,而你和你的朋友的电脑都是冯诺依曼体系结构

2)在你向朋友发送消息这个过程中,你的电脑当中的键盘充当输入设备、显示器和网卡充当输出设备,你朋友的电脑当中的网卡充当输入设备、显示器充当输出设备

3)刚开始你在键盘当中输入消息,键盘将消息加载到内存,此时你的显示器就可以从内存获取消息进而显示在你自己的显示器上,此时你就能在你自己的电脑上看到你所发的消息了,在键盘将消息加载到内存后,CPU从内存获取到消息后对消息进行各种封装,然后再将其写回内存,此时你的网卡就可以从内存获取已经封装好的消息,然后在网络当中经过一系列处理(这里忽略网络处理细节)

4)之后你朋友的网卡从网络当中获取到你所发的消息后,将该消息加载到内存当中,你朋友的CPU再从内存当中获取消息并对消息进行解包操作,然后将解包好的消息写回内存,最后你朋友的显示器从内存当中获取消息并显示在他的电脑上


操作系统(Operator System)

操作系统是一款进行软硬件资源管理的软件, 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS).笼统的理解,操作系统包括 :

  • 内核(进程管理,内存管理,文件管理,驱动管理)
    • 内存管理:内存分配、内存共享、内存保护以及内存扩张等
    • 驱动管理:对计算机设备驱动驱动程序的分类、更新、删除等操作
    • 文件管理:文件存储空间的管理、目录管理、文件操作管理以及文件保护等
    • 进程管理:其工作主要是进程的调度
  • 其他程序(例如函数库, shell程序等等 )

设计OS的目的

  • 与硬件交互,管理所有的软硬件资源
  • 为用户程序(应用程序)提供一个良好的执行环境

image-20220410195651303


定位

在整个计算机软硬件架构中,操作系统的定位是: 一款纯正的“搞管理”的软件

  • 对下:管理好软硬件资源 —— 方式
  • 对上:给用户提供稳定、高效、安全的运行环境 —— 目的

如何理解管理 (精髓:先描述再组织)

例如,在学校中的学生,辅导员和校长的关系:

  • 其中:学生是被管理者,校长是管理者,那么辅导员是什么身份 ? 辅导员是执行者.

  • 完成任何一件事都要经过两个过程,首先是决定要不要做这件事或是如何做这件事(决策),然后就是去做这件事情(执行)

    校长作为管理者来管理学生,校长实际上就是那个做决策的人,但是校长作出决策后并不需要自己来执行,而是让辅导员去执行,所以辅导员的主要任务就是执行管理者的决策,我们通常将其称为执行者 管理者进行决策,执行者进行执行


注意: 管理者和被管理者并不会直接打交道 ,就像我们通常很少在学校见到校长, 那么校长是怎么管理我们的呢?

对你做出各种决策,决策依据是你的各种属性数据

比如说,学校将我们每个学生的各种信息都进行了管理,每这么一套信息就描述了一名学生,校长通过对这些信息的管理就能做到对学生的管理,在C语言中,我们可以把这种信息称为结构体.

校长可以通过各种数据结构(如:链表,顺序表等),将全部学生的信息组织起来,当校长对各个学生的管理,实际上就相当于对这些数据结构的增删查改.


校长的决策又是如何执行 -> 通过辅导员 (执行者)


站在校长的角度(管理者的角度):

  • 如何聚合一个学生的数据?用类/结构体描述
  • 如何将多个学生的聚合数据产生关联?用特定的数据结构来组织,于是对学生的管理工作,变成了对数据结构的增删查改.

总结

计算机管理硬件

  • 描述起来,用struct结构体
  • 组织起来,用链表或其他高效的数据结构

先描述在组织 :先描述被管理的对象,再将被管理的对象用特定的数据结构组织起来

管理者管理被管理者,实际上是先将被管理者的各种信息进行描述,然后再将多个被管理者的描述信息根据某种数据结构组织起来,最后管理者管理被管理者实际上就是对数据结构的管理


系统调用和库函数概念

  • 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫系统调用.
  • 系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/220396.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++深入浅出(八)—— 继承

文章目录1. 继承的概念及定义🍑 继承的概念🍑 继承的定义🍅 定义格式🍅 继承关系和访问限定符🍅 继承基类成员访问方式的变化2. 基类和派生类对象赋值转换3. 继承中的作用域4. 派生类的默认成员函数5. 继承与友元6. 继…

jsp 校园网系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 校园网系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统采用web模式开发,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数…

C#,入门教程(39)——C#语言的概念与知识点摘要

本文归纳整理C#的一些知识点,便于快速浏览与掌握C#语言的一些基本概念。本文并没有很好地层次与组织,抄了不少,写了不少,想到什么,就写什么。01 类 class类是C#等面向对象编程语言(Object-oriented program…

常用API、Lambda、常见算法

目录 日期与时间 Date SimpleDateFormat Calendar JDK8新增日期类 概述、LocalTime/LocalDate/LocalDateTime Instant DateTimeFormatter Duration/Period ChronoUnit 包装类 包装类练习 正则表达式 正则表达式概述、初体验 正则表达式的匹配规则 正则表达式的…

Zookeeper注册中心

zookeeper的使用场景 分布式协调、分布式锁、元数据/配置信息管理、HA高可用性 分布式协调 A系统发送个请求到mq,然后B系统消息消费之后处理了,那A系统如何知道B系统的处理结果?A系统发送请求之后在zookeeper上对某个节点的值注册个监听器,一旦B系统处理完了就修改zooke…

C语言高级教程-C语言数组(七):数组综合实例之井字棋游戏问题

C语言高级教程-C语言数组(七):数组综合实例之井字棋游戏问题一、本文的编译环境二、井字棋游戏的问题三、井字棋游戏的分析四、井字棋游戏的程序编写步骤4.1、添加主要的游戏循环和显示这个方格4.2、让玩家选择-一个方格, 并确定那…

Android 设置可抓包

在ren目录下新建xml文件夹&#xff0c;在xml下新建network_security_config.xml<?xml version"1.0" encoding"utf-8"?><!--<network-security-config>--><!-- <base-config cleartextTrafficPermitted"true" />--&…

MySQL面试:MySQL事务,内附详细视频教程,以及sql事务演示

文章目录一、事务&#xff08;提出事务&#xff09;二、四个特性&#xff08;事务要实现的特性&#xff09;三、一致性问题&#xff08;事务可以解决这些问题&#xff09;四、解决&#xff08;事务解决部分或全部一致性问题&#xff09;五、实现&#xff08;事务实现ACID的机制…

Python setattr()、getattr()、hasattr()函数用法详解

Python hasattr()函数hasattr() 函数用来判断某个类实例对象是否包含指定名称的属性或方法。该函数的语法格式如下&#xff1a;hasattr(obj, name)其中 obj 指的是某个类的实例对象&#xff0c;name 表示指定的属性名或方法名。同时&#xff0c;该函数会将判断的结果&#xff0…

差值结构不对称部分的约化质心

( A, B )---5*30*2---( 1, 0 )( 0, 1 ) 做一个网络&#xff0c;输入为5个点&#xff0c;训练集A,B各有两张图片。让B的两张图片全是0.排列组合A&#xff0c;记录迭代次数平均值的变化。 迭代了1024组&#xff0c;共收集到33组不同的数据&#xff0c;其中对称的部分有17组&…

Java volatile学习

面试题&#xff1a; 1、请谈谈你对volatile的理解&#xff1f; volatile是Java虚拟机提供的轻量级的同步机制1.保证可见性2.不保证原子性3.禁止指令重排 2、JMM你谈谈?3、你在哪些地方用到过volatile?一、概述 JMM(Java内存模型 Java Memory Model&#xff0c;简称JMM) 本身是…

JSP 概述(三)

JSP 的处理过程&JSP 与其他服务器端脚本语言的比较1. JSP 的处理过程2. JSP 与其他服务器端脚本语言的比较2.1 CGI2.2 ASP2.3 PHP2.4 ASP.NET结束语1. JSP 的处理过程 当客户端浏览器向服务器发出请求要访问一个 JSP 页面时&#xff0c;服务器根据该请求加载相应的 JSP 页…

微信小程序里面的js文件分为哪几类?

1.小程序中的.js的分类 小程序中的JS文件分为三大类&#xff0c;分别是&#xff1a; 1.app.js 是整个小程序项目的入口文件&#xff0c;通过调用App()函数来启动整个小程序 2.页面的.js文件 是页面的入口文件&#xff0c;通过调用 Page&#xff08;&#xff09;函数来创建并运行…

Java基础语法(基础篇 适合小白)

Hello World public 访问修饰符 static 关键字 void 返回类型 String 类 args字符串数组 public class HelloWorld {/* 第一个Java程序* 它将输出字符串 Hello World*/public static void main(String[] args) {System.out.println("Hello World"); // 输出 Hello Wo…

Odoo | 7个步骤搭建的“在线表格组件”,十分丝滑~

X-SpreadSheet是一个类似于google sheet的在线表格组件&#xff0c;很多场景都能借助它来搭建在线表格。 集成过程 1、下载X-SpreadSheet源码到本地 下载地址 x-spreadsheet.css&#xff1a; https://unpkg.com/x-data-spreadsheet1.0.13/dist/xspreadsheet.css x-spread…

Tomcat的安装及配置

Tomcat介绍&#xff1a;Tomcat简单地说就是一个运行JAVA的网络服务器&#xff0c;底层是Socket的一个程序&#xff0c;它也是JSP和Serlvet的一个容器疑问&#xff1a;一个电脑中可以安装多个版本的Tomcat吗&#xff1f;同一台电脑可以同时安装多个Tomcat服务器。安装及配置&…

【Spark分布式内存计算框架——Spark 基础环境】2. 快速入门(上)环境准备

第三章 快速入门 目前Spark最新稳定版本&#xff1a;2.4.x系列&#xff0c;官方推荐使用的版本&#xff0c;也是目前企业中使用较多版本&#xff0c;网址&#xff1a;https://github.com/apache/spark/releases Spark 2.4.x依赖其他语言版本如下&#xff0c;其中既支持Scala …

代码随想录算法训练营第三十一天_第八章_贪心算法 | 理论基础、455.分发饼干、376. 摆动序列、53.最大子数组和

理论基础 LeetCode 455.分发饼干 视频讲解https://www.bilibili.com/video/BV1MM411b7cq/?spm_id_from333.788&vd_sourcef98f2942b3c4cafea8907a325fc56a48文章讲解https://programmercarl.com/0455.%E5%88%86%E5%8F%91%E9%A5%BC%E5%B9%B2.html 思路&#xff1a;代码&…

开唐贡献榜(凌烟阁二十四功臣)

唐贞观十七年&#xff0c;太宗李世民为表彰唐初的开国功臣 建造凌烟阁 绘制二十四功臣像以示纪念 第一位 威能服物&#xff0c;智能动众。力安社稷&#xff0c;一代奸雄。 赵国公 长孙无忌 第二位 挺身陷阵&#xff0c;勇冠三军。飞虎将军&#xff0c;十三太保。 河间王 李孝…

【C语言】文件操作函数

文件操作函数1.文件的打开和关闭1.1fopen1.2close2.文件的顺序读写2.1fgetc和fputc2.1.1fputc2.1.2fgetc2.2fgets和fputs2.2.1fputs2.2.2fgets2.3fscanf和fprintf2.3.1fprintf2.3.2fscanf2.4fread和fwrite2.4.1fwrite2.4.2fread2.5总结2.6拓展&#xff08;sscanf和sprintf&…