冯诺依曼体系与操作系统的理解

2023-12-13 03:54:13

目录

一.冯诺依曼体系结构

存储分级

为什么程序运行之前,必须加载到内存上?

二.操作系统

操作系统是什么?

为什么需要操作系统?

操作系统是如何管理软硬件资源?


一.冯诺依曼体系结构

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

截至目前,我们所认识的计算机,都是有一个个的硬件组件组成

输入单元 :包括键盘 , 鼠标,usb,磁盘/ssd,网卡
存储器 :存储器起始就是 内存
中央处理器(CPU) :含有运算器和控制器等
输出单元 :显示器,打印机,网卡,显卡等

内存与磁盘的区别:

内存和磁盘是计算机中的主要存储部件

内存是利用电效益实现的

一旦电脑断电,内存存储的数据会全部丢失

磁盘(永久存储介质)是外设,可以永久存储数据。

内存的特点:处理数据速度非常快,造价高

磁盘的特点:相对于内存处理数据的速度较慢,造假低

注:计算机中几乎所有设备都有存储数据的功能,只是存储能力有大有小。

处理数据的速度:CPU>内存>各种外设(磁盘)

存储分级

从图中我们可以看出:

以cpu为中心,距离CPU越近,存储效率越高,造价越高。距离CPU越远,存储效率越低。造价越低

为什么采用存储分级?

如果全部都采用高价的存储介质,速度快但太贵,

如果全部采用低价的存储介质,便宜但速度太慢

因此,为了使造价相对较低,速度较快,采用了内存分级:

在数据层面上CPU一般不和外设直接交互(防止出现木桶效应,导致整机效率太低),CPU优先与内存进行数据交换,再进行处理。因此再在硬件上内存也可以看出成一个巨大的缓存。

因此基于冯诺依曼体系结构的计算机,本质:就是用比较少的钱,造出效率不差的计算机(性价比较高)

为什么程序运行之前,必须加载到内存上?

程序=代码+数据,最终都要CPU来执行,要想处理这些,CPU要先读取这些代码和数据,CPU和内存有“数据(二进制层面)”层面的交互,形成一个exe的可执行文件,而文件只能存储在磁盘(外设)中保存。而现代计算机大多数都是采用的冯诺依曼结构,CPU与内存进行数据交互,因此需先把exe文件(要执行的程序)里的东西,加载到内存上,才可以运行。

二.操作系统

操作系统是什么?

是一款软件,进行软硬件资源管理的软件。

是计算机开机后,第一个加载的软件

为什么需要操作系统?

我们知道,世界上第一台计算机埃尼阿克,他是没有操作系统的,他需要专业的人员手动的进行各种操作且很容易出错,同时具有的功能也很少。因此为了方便使用人员,大佬们专门写了一块软件来进行,让我们可以通过一些简单的指令或动作,告诉操作系统,让它代替我们对硬件进行一系列的操作。

简单来说:

操作系统可以代替我们对软硬件进行资源管理(手段),给用户提供良好(易用,稳定,安全,高效)的使用环境(目的)

操作系统是如何管理软硬件资源?

计算机的层状结构:

?举一个例子(校园管理)

在你来到入学时,记录你各种信息的档案会到学校里,然后你在学校这四年的学习与其他情况都会记录在你的档案里,在这期间,学校会根据你的档案里记录的信息对你进行管理,为了方便管理,可以定义一个student结构体记录信息

struct student
{
    int age;
    int grade;
    string name;
    ....
}

为了方便保存,查找等,学校将student以链表的方式链接在一起

struct student
{
    struct student* next;
    int age;
    int grade;
    string name;
    ....
}

从此学校对于学生的管理就变成了对结构体链表的管理,我们可以通过访问结构体的信息,来对链表进行增删查改(对学生进行扩招,开除)。

管理的本质不是管人,而是管理数据。

对学生的管理,就是我们计算机管理的建模过程。

我们可以总结对事务的管理:

先描述,再组织

操作系统管理核心有:


1.进程管理

2.内存管理

3.文件/IO管理

4.驱动管理

这些管理都遵循:先描述,再组织。

再看计算机的层状结构

对于下三层,我们知道操作系统通过先描述,再组织,将底层的硬件管理好。我们知道,操作系统给用户提供了良好的使用环境,那么用户是谁呢,又如何提供良好的环境呢?

广义上:用户包括所有使用计算机的人,

狭义上:用户是开发者(这里我们用户默认为开发者)。

在技术层面上,操作系统是可以实现,用户直接使用操作系统提供的各种功能的,但是因为不能确保群众中有没有坏人,因此操作系统是不完全信任用户的,用户不能直接使用操作系统,但是操作系统由不得不为用户提供服务。

因此,为了确保安全,操作系统会把各个功能,封装成一个一个的系统调用函数,用户只能通过系统调用函数,来获取操作系统的数据,因为系统调用函数是操作系统实现的,因此用户只能获得有限的数据,有效的防止群众中的坏人进行破坏。

一般用户想访问操作系统数据或者硬件,必须通过系统调用。

由于系统调用函数使用起来比较麻烦

站在用户的角度,创造了外壳程序(shell,图形化界面),让用户使用一些简单的指令就可以调用系统调用函数。

站在开发者的角度,是可以直接调用系统接口的,但是为了一些小白考虑,将一些系统接口封装成了各种各样的函数,打包形成库,方便了所有开发者使用,不用自己去写,而是直接调用库函数,提高了开发效率,降低开发成本。

库函数于系统调用函数是什么关系?

上下层(库函数里面封装了系统调用函数)。

因此:

广义上的操作系统:包括操作系统,shell(外壳程序),语言库,系统调用

狭义的操作系统:操作系统(以为就是我们平时所说的Linux内核)

文章来源:https://blog.csdn.net/qq_63440853/article/details/134937122
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。