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


📙 作者简介 :RO-BERRY

📗 学习方向:致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识

📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持


目录


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。
    综上所述,操作系统的存在是为了简化用户和应用程序员的操作,提高计算机系统的资源利用率,确保系统的安全性和稳定性,以及为商业公司提供盈利的机会。

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

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

相关推荐
serve the people3 分钟前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
m0_609000426 分钟前
向日葵好用吗?4款稳定的远程控制软件推荐。
运维·服务器·网络·人工智能·远程工作
qmx_071 小时前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
小安运维日记1 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
为风而战1 小时前
IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理
java·tomcat
技术无疆3 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
CoolTiger、4 小时前
【Vmware16安装教程】
linux·虚拟机·vmware16
m0_741768855 小时前
使用docker的小例子
运维·docker·容器
学习3人组5 小时前
CentOS 中配置 OpenJDK以及多版本管理
linux·运维·centos
厨 神5 小时前
vmware中的ubuntu系统扩容分区
linux·运维·ubuntu