• 冯诺依曼体系结构、操作系统的认识



    前言

    💭本文是对计算机底层学习的初步认识的知识铺垫,初步了解冯诺依曼体系结构和操作系统的概念和定义,为后续进程与地址空间系列学习打下基础。

    1️⃣ 冯·诺依曼体系结构

    1.1 基本概念

    冯.诺依曼体系结构是当今计算机,如:笔记本、服务器,都遵守的一个体系结构。其总体结构如下图:

    在这里插入图片描述
    ⭕我们重点关注其中的数据信号传输。即:我们要研究数据如何经过各类硬件传输和处理。

    💭 平时我们使用计算机的时候,知道很多计算机的组成部分(包括外设和内部组件),例如:键盘、鼠标、显示器、磁盘、内存、网卡……而所有的这些,都包含在冯诺依曼体系中,他们各司其职,一起构成了我们的计算机。

    • 输入设备、输出设备: 是计算机输入数据和输出数据的设备,通俗地理解,输入入的是电脑,输出出的是人。输入设备有:键盘、鼠标等;输出设备有:显示器、扬声器等。值得注意的是,磁盘和网卡既是输入设备又是输出设备。

    • 存储器: 就是内存,有掉电易失的属性。

    • 中央处理器: CPU,由主要的运算器、控制器和其他一些器件组成。


    1.2 存储器的作用

    💭在冯.诺依曼体系结构,对于数据的读写,CPU的速度是最快的,而输入输出设备是最慢的,这会导致我们从输入设备传入数据到CPU处理,再从CPU传出已处理的数据到输出设备,这些过程之间的速度不匹配问题,降低了整机效率。虽然CPU的读写速度是最快的,但是倘若只有外设(如磁盘)这种效率极低的部件来与它进行数据交互,必然会拉低整机效率。

    为了提高整机效率,冯.诺依曼体系引入了内存(存储器)的概念,完美地解决了这一难题!

    设备读写速度
    CPU(中央处理器)最快
    存储器(内存)次快
    外设(输入输出设备)最慢

    📝如表中所示,内存的读写速度位于CPU与外设之间,它的出现适配了CPU与外设之间速度不匹配的问题。内存可以理解为一个大大的缓存空间,当有数据从输入设备传入时,不是直接传入CPU进行处理,而是传入内存再传入CPU。同理,从CPU中处理完的数据,也不是直接传输到输出设备,而是先经过内存再到输出设备。

    在外设与内存之间进行数据交互的过程称为I/O
    I:输入设备 → 内存
    O:内存 → 输出设备

    🌰举个栗子!

    Q:我们常说程序运行要先加载到内存中,为什么呢?
    A:程序的本质其实就是文件,是通过编译链接后生成的可执行文件(.exe),而文件是存储在磁盘中的。要使得程序运行起来,CPU要读取二进制可执行程序文件,而磁盘是一个输入设备,由冯诺依曼体系结构决定,必须先将数据加载到内存中,才能让CPU读取到数据。这个过程实际就是将可执行文件加载到内存当中。

    🔎延伸:磁盘是一个存储设备,它与内存的特性相反,具有永久性存储能力。平时我们电脑中的各种文件和数据,都是存储在磁盘当中的(关机的时候也是存在磁盘中,因为如果存储在内存中,由于掉电易失,关机了数据就全丢失了)。当我们开机的时候,各种软件的程序会从磁盘中加载到内存,方便我们使用,而不是等我们要用的时候再把软件的程序从磁盘中拿到内存。


    1.3 CPU的指令集

    💭CPU在计算机中扮演着一个“打工人”的角色,而我们作为计算机的用户,就是CPU的“老板”,CPU只能听从我们的命令去执行对应的事。那么,我们要对下属下达命令,那他得能听懂我们说的话才能正确地执行吧?就好像一个日本老板,用日语给听不懂日语的下属指派了一个任务,老板确实完成了下达命令这项工作,但是由于下属无法识别命令本身,导致无法执行命令。同理,CPU也需要认识我们给它下达的命令。

    🔎概念:所谓指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合,而每一种CPU在设计时就规定了一系列与其他硬件电路相配合的指令系统。而指令集的先进与否,也关系到CPU的性能发挥,它也是CPU性能体现的一个重要标志。

    • 通俗理解,指令集就是CPU能认识的语言,而程序运行之前编译的过程,就是将高级语言翻译为机器语言(包含一条条的指令),使得CPU能够看懂程序,这样才能运行。

    • 从大类来分,一般将指令集分为精简指令集和复杂指令集。

    参考内容:
    【CPU指令集】CPU指令集是什么


    1.4 实例

    总体过程

    假设张三要在他的电脑上用QQ给他的好朋友李四发送一个消息“Hello”,会经过怎样的数据流动过程呢?我们应该基于冯诺依曼体系结构来考虑。

    在这里插入图片描述

    💡这是发送消息的过程,那么发送文件呢?
    其实大同小异,张三的输入设备变成磁盘,拉拽文件到聊天框中就是将文件传入QQ程序中,加密处理过程类似,发送过程也是一样的。而李四接收文件、处理文件的过程也是同上,只不过输出设备变成李四电脑的磁盘,文件传入磁盘中。


    🚀承上启下

    冯诺依曼体系结构中,在数据层面,CPU不和外设直接交流,只和内存直接打交道,以达到提高整机效率的目的。那么,CPU和内存之间这个“打交道”的过程是由谁来做的呢?怎么做的呢?没错,那就是我们的操作系统了!当然,操作系统的作用远不止于此!


    2️⃣ 操作系统

    2.1 概念

    1. 概念:

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

    • 内核(进程管理,内存管理,文件管理,驱动管理)
    • 其他程序(例如函数库, shell程序等等)
    1. 设计操作系统的目的:
    • 对下,与硬件交互,管理所有的软硬件资源
    • 对上,为用户程序(应用程序)提供一个良好的执行环境

    2.2 如何理解“管理”

    理解操作系统的核心,就是理解它如何管理

    以下只讨论操作系统对硬件的管理。

    2.2.1 管理的本质

    💭日常生活中存在很多管理的例子。例如,在学校中,校长是管理者(这里我们将学校体系简单化,视校长为唯一管理者),学生是被管理者。校长具有对学校内重大事项的决策能力,而他做出的决策都需要依据被管理者,也就是学生的数据。例如,评定奖学金时,校长就需要根据学生的综合成绩数据做出评定决策;又如某某学院的总体成绩下滑,校长就可根据这一数据,做出相应的决策。

    因此我们得出结论,管理的本质就是对数据做管理。

    💭数据如何获得呢?学校里学生很多,而且数据都是动态变化的,校长无法直接捕捉,于是,又有另外一种角色帮助校长完成这项工作——辅导员。每个学院都有自己的辅导员,他们是与自己学院的学生日常接触的角色,通过与学生接触获取学生的数据,并反馈给校长。从而完成了对学生数据的收集与管理。

    而操作系统的管理体系就类似于上述例子学校的管理体系

    ⭕ 如图

    在这里插入图片描述
    驱动程序是用来操控硬件的逻辑方法的程序,每个硬件都由它特定的驱动程序操控。驱动程序主要干两件事:

    1. 执行操作系统的指令,驱使硬件工作
    2. 与被管理的硬件接触,获取相关数据,传输给操作系统

    💡因此,操作系统便可通过驱动,获取底层硬件的数据,从而对硬件进行管理。


    2.2.2 管理的方法

    💭有了被管理者的数据后,就要有对其进行管理(增删查改等操作)的方法。继续拿学校举例子,校长现在已经通过各个学院的辅导员获得了全校所有学生的信息,他想要进行一次奖学金评定,给全校综合成绩排名前十的学生发放奖学金,怎么实现?难道自己一个一个学生的成绩找吗?这样效率极低,就算完成了,如果下次是选出全校身高最高的十个人又是另外的找法。这种按数据管理的方法是不科学的,因为学生多、学生数据更多。

    科学、高效的数据管理方法:因为每位学生的数据种类都是相同的,如:姓名、成绩、学号、班级、性别、籍贯等等,所以可以先将每位学生描述为一个带有多种属性的对象,然后再将所有对象组织起来,成为一个特定的结构,这样管理起来很方便,只需要对结构进行操作即可。从按数据管理转变为按对象管理。

    操作系统对数据的管理亦是如此,总结起来就是六个字:先描述,再组织

    • 先描述:这是从语言层面上来说的,例如在C++中,便可将被管理对象描述为一个类,包含该对象的各种属性
    class dev
    {
    private:
        // 硬件信息
        int type;
        int status;
        
        //...
        dev* next;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 再组织:这是从数据结构层面来说的,将被管理者对象有序地组合起来。操作系统内核通常都是用链表结构进行组织。
    // 伪代码
    //创建一个链表
    list<dev> devList;
    
    //插入磁盘节点
    dev disk_dev;
    devList.insert(disk_dev);
    
    //插入键盘节点
    dev keyboard_dev;
    devList.insert(keyboard_dev);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    完成先描述再组织过程后,操作系统对硬件的管理变成了对硬件对象组成的数据结构的管理。例如,要删除对键盘的管理,只需要以键盘的某个特定属性为key值,在链表中找到keyboard_dev节点,删除该节点即可。


    2.3 系统调用

    为了保障操作系统的安全性,在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者对部分系统调用进行了适度封装(如printf、scanf),从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。在Linux下,操作系统提供的接口一般都是C语言函数接口。


    总结

    ⭕综上所述,计算机大致的体系结构如图所示
    在这里插入图片描述

  • 相关阅读:
    Unreal&LatentAction的能与不能
    分享Bitmap加载Drawable资源失败的解决方法
    ubuntu 18.04下安装Anaconda、Cuda、Cudnn、gpu-Pytorch
    【苹果位置推相册推送】包括撤消受权或更改Apple软件中可访问服务的任何API)
    【算法题】2909. 元素和最小的山形三元组 II
    大规模神经网络的实现(什么是异步梯度下降?怎样进行模型压缩?)
    自动驾驶基础——时间同步
    基于html宠物用品商城项目的设计与实现(学生网页设计作业源码)
    干洗店软件,洗鞋店收银管理系统小程序app
    SSM之spring注解式缓存redis
  • 原文地址:https://blog.csdn.net/C0631xjn_/article/details/127917373