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

【Linux进程】冯·诺依曼体系结构以及操作系统的深入理解


📙 作者简介 :RO-BERRY
📗 学习方向:致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识
📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持


目录

  • 1.冯·诺依曼体系结构
    • 特点
    • 组成剖析
    • 为什么要有内存?
  • 2.操作系统
    • 为什么要有操作系统?


1.冯·诺依曼体系结构

冯·诺依曼体系结构,也被称为普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。在这种结构中,程序指令和数据在内存中是没有区别的,它们都是内存中的数据。当EIP指针指向哪CPU就加载那段内存中的数据,如果是不正确的指令格式,CPU就会发生错误中断。在现在CPU的保护模式中,每个内存段都有其描述符,这个描述符记录着这个内存段的访问权限(可读,可写,可执行)。这就变相的指定了哪些内存中存储的是指令哪些是数据。指令和数据都可以送到运算器进行运算,即由指令组成的程序是可以修改的。

特点

冯·诺依曼体系结构还包括以下特点:

  1. 存储器是按地址访问的线性编址的一维结构,每个单元的位数是固定的。
  2. 指令由操作码和地址组成。操作码指明本指令的操作类型,地址码指明操作数和地址。操作数本身无数据类型的标志,它的数据类型由操作码确定。
  3. 通过执行指令直接发出控制信号控制计算机的操作。指令在存储器中按其执行顺序存放,由指令计数器指明要执行的指令所在的单元地址。指令计数器只有一个,一般按顺序递增,但执行顺序可按运算结果或当时的外界条件而改变。
  4. 以运算器为中心,I/O设备与存储器间的数据传送都要经过运算器。
  5. 数据以二进制表示。冯·诺依曼提出的计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。

组成剖析

在这里插入图片描述

cpu:运算器&&控制器
输入设备:话筒、摄像头、键盘、鼠标、磁盘等
输出设备:声卡、显卡网卡、磁盘、显示器、打印机等
存储器:内存—掉电易失

手机制造商们把CPU、内存、网络通信,乃至摄像头芯片,都封装到一个芯片,然后再嵌入到手机主板上,即SoC,System on a Chip(系统芯片)。但无论是PC/服务器/手机都遵循冯·诺依曼体系结构(Von Neumann architecture),也叫存储程序计算机,意味着“可编程”、“存储”计算机。

计算机由各种门电路组成完成计算程序。一旦需要修改功能,就要重新组装电路。这样的话,计算机就是“不可编程”的,因为程序在计算机硬件层面是“写死”的。最常见的就是老式计算器,电路板设好了加减乘除,做不了任何计算逻辑固定之外的事情。

再看“存储”计算机。程序存储在计算机内存,可通过加载不同程序解决不同问题。

不能存储程序的计算机
早年“Plugboard”这种插线板计算机,在板子上不同的插头或者接口的位置插入线路实现不同功能。这样的计算机“可编程”,但编写好的程序不能存储下来供下一次加载使用,不得不每次要用到和当前不同的“程序”的时候,重新插板子,重新“编程”。

为了效率,有了“存储程序计算机”。冯基于在秘密开发的EDVAC写了一篇报告First Draft of a Report on the EDVAC,描述了一台计算机什么样。

  1. 包含处理器单元(Processing Unit):

算术逻辑单元(Arithmetic Logic Unit,ALU)
处理器寄存器(Processor Register)
完成各种算术和逻辑运算。

因为它能够完成各种数据的处理或者计算工作,因此也有人把这个叫作数据通路(Datapath)或者运算器。

  1. 包含控制器单元(Control Unit/CU):

指令寄存器(Instruction Reigster)
程序计数器(Program Counter)
控制程序的流程,通常就是不同条件下的分支和跳转。
算术逻辑单元和控制器单元组成CPU。

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

这里的存储器指的是内存
不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
一句话,所有设备都只能直接和内存打交道

为什么要有内存?

内存,也称为内存储器,是计算机系统中用于暂时存放CPU中的运算数据以及与硬盘等外部存储器交换的数据的硬件组件。内存的存在主要有以下几个原因:

  1. 速度匹配:CPU的速度非常快,通常以GHz为单位,而硬盘的传输速度相对较慢,通常不到200MB/s。内存的速度介于CPU缓存和硬盘之间,能够快速地与CPU交换数据,从而提高系统的整体性能。
  2. 容量扩展:CPU的缓存空间有限,无法存储大量的数据。内存提供了更大的存储容量,使得操作系统和应用程序能够临时存储更多的数据,以便快速地与CPU交换,从而提高系统的运行效率。
  3. 数据管理:内存中存储的数据包括程序的全局变量、局部变量等,这些数据对程序的运行至关重要。内存管理是编程中的一个重要话题,它涉及到数据的组织、存储和处理,对于程序的正确运行至关重要。
  4. 系统稳定性:内存的运行也决定了计算机的稳定运行。如果内存不足,CPU需要从硬盘中读取数据,这会导致系统卡顿,甚至可能出现黑屏或游戏跳出的情况。
    综上所述,内存的存在是为了解决CPU与外部存储器之间速度和容量的矛盾,提高系统的运行效率和稳定性。

2.操作系统

计算机是一台机器,它按照用户的要求接收信息、存储数据、处理数据,然后再将处理结果输出(文字、图片、音频、视频等)。计算机由硬件和软件组成:

硬件是计算机赖以工作的实体,包括显示器、键盘、鼠标、硬盘、CPU、主板等;
软件会按照用户的要求协调整台计算机的工作,比如 Windows、Linux、Mac OS、Android 等操作系统,以及 Office、QQ、迅雷、微信等应用程序。

操作系统(Operating System,OS)是软件的一部分,它是硬件基础上的第一层软件,是硬件和其它软件沟通的桥梁(或者说接口、中间人、中介等)。

操作系统会控制其他程序运行,管理系统资源,提供最基本的计算功能,如管理及配置内存、决定系统资源供需的优先次序等,同时还提供一些基本的服务程序,例如:

  1. 文件系统
    提供计算机存储信息的结构,信息存储在文件中,文件主要存储在计算机的内部硬盘里,在目录的分层结构中组织文件。文件系统为操作系统提供了组织管理数据的方式。
  2. 设备驱动程序
    提供连接计算机的每个硬件设备的接口,设备驱动器使程序能够写入设备,而不需要了解执行每个硬件的细节。简单来说,就是让你能吃到鸡蛋,但不用养一只鸡。
  3. 用户接口
    操作系统需要为用户提供一种运行程序和访问文件系统的方法。如常用的 Windows 图形界面,可以理解为一种用户与操作系统交互的方式;智能手机的 Android 或 iOS 系统,也是一种操作系统的交互方式。
  4. 系统服务程序
    当计算机启动时,会自启动许多系统服务程序,执行安装文件系统、启动网络服务、运行预定任务等操作。

打个比方,操作系统就好像是一个政府,其它软件都会被它管控;操作系统在给其他软件提供各种便利的同时,还会约束其他软件不能为所欲为。
目前流行的服务器和 PC 端操作系统有 Linux、Windows、UNIX 等,手机操作系统有 Android、iOS、Windows Phone(简称 WP),嵌入式操作系统有 Windows CE、PalmOS、eCos、uClinux 等。

我们宏观地看待从用户到底层硬件的交互如下图
在这里插入图片描述

为什么要有操作系统?

操作系统在计算机系统中扮演着至关重要的角色。它不仅管理着计算机硬件资源的分配和调度,而且为上层应用软件提供了方便的接口,确保了计算机系统的安全和稳定。具体来说:

  1. 资源管理:操作系统负责协调计算机的各个资源,确保程序能够有效地使用硬件资源,同时避免资源冲突和资源浪费。
  2. 接口提供:操作系统提供了一系列的底层接口和上层标准,使得不同硬件平台上的软件能够互通,减少了软件开发者的工作量,因为它们只需关注操作系统的标准接口。
  3. 硬件封装:操作系统向下封装了硬件的细节,向上提供给用户和应用程序一个简洁、易于使用的接口,使得用户和应用程序员无需了解复杂的硬件细节。
  4. .安全与稳定:操作系统通过防火墙、监测程序和补丁等方式,保护计算机免受恶意程序和电脑病毒的侵害,确保了系统的运行稳定。
  5. 商业考量:操作系统通常由商业公司提供,这些公司可能会通过操作系统提供增值服务或进行商业变现,如苹果的App Store和微软的Windows Store。
    综上所述,操作系统的存在是为了简化用户和应用程序员的操作,提高计算机系统的资源利用率,确保系统的安全性和稳定性,以及为商业公司提供盈利的机会。

那么操作系统如何对它们进行管理呢?首先,对一个事务进行管理,我们首先要对它进行建模,即先描述,再组织;先描述,就要先对它的属性进行分析,重要属性的分析就代表这个事务;所以,操作系统要管理某个资源,就要先对它描述,即分析它的属性,对它建模,再进行组织,组织后进行管理。假设操作系统要管理某一个资源,可以将它描述成一个链表,那么就可以看成操作系统对这个链表进行资源管理。

总结,计算机管理硬件/操作系统管理资源

相关文章:

  • this的指向问题总结
  • 【深度学习:计算机视觉】计算机视觉的最佳数据集 [行业细分]
  • 常见锁策略,CAS,synchrodized原理讲解
  • 企业微信机器人的运营策略与实践
  • LeetCode 热题 100 | 二叉树(终)
  • 基于springboot+vue的中小型医院网站(前后端分离)
  • 零基础到高级:Android音视频开发技能路径规划
  • 数智赋能,变革加速:人工智能技术与低代码开发利器
  • 利用Ubuntu22.04启动U盘对电脑磁盘进行格式化
  • 人工智能|机器学习——基于机器学习的舌苔检测
  • Rust 安装
  • mysql在服务器中的主从复制Linux下
  • 基于Redis商品库存扣减方案
  • 第一个 Angular 项目 - 动态页面
  • Elastic Search:构建语义搜索体验
  • css系列之关于字体的事
  • express + mock 让前后台并行开发
  • HomeBrew常规使用教程
  • React 快速上手 - 07 前端路由 react-router
  • SpriteKit 技巧之添加背景图片
  • STAR法则
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • webgl (原生)基础入门指南【一】
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 从输入URL到页面加载发生了什么
  • 分享一份非常强势的Android面试题
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 简单易用的leetcode开发测试工具(npm)
  • 前端知识点整理(待续)
  • 数组的操作
  • 一个项目push到多个远程Git仓库
  • 【干货分享】dos命令大全
  • ​​​​​​​​​​​​​​Γ函数
  • #pragma data_seg 共享数据区(转)
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $.ajax()参数及用法
  • (145)光线追踪距离场柔和阴影
  • (JS基础)String 类型
  • (TOJ2804)Even? Odd?
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (南京观海微电子)——COF介绍
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (五)IO流之ByteArrayInput/OutputStream
  • (小白学Java)Java简介和基本配置
  • (转)socket Aio demo
  • (转)创业的注意事项
  • (转)创业家杂志:UCWEB天使第一步
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .Net IOC框架入门之一 Unity
  • .NET中使用Protobuffer 实现序列化和反序列化