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

2024-02-23 18:12

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

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

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

这篇关于【Linux进程】冯·诺依曼体系结构以及操作系统的深入理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/739487

相关文章

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主