【Linux】冯诺依曼体系结构和操作系统概述

一、冯诺依曼体系结构(Von Neumann Architecture)

冯・诺依曼体系结构是现代计算机的核心设计思想,由美籍匈牙利科学家冯・诺依曼于 1945 年提出,其核心是 "存储程序、程序控制 ",奠定了当代计算机的硬件架构基础。目前绝大多数的计算机都遵循这种结构。

冯诺依曼体系结构规定计算机由运算器,控制器,存储器,输入设备和输出设备五大部件组成:

【运算器】

• 执行算术运算(加减乘除)、逻辑运算(与 / 或 / 非、比较),是计算机的 "计算核心"。

【控制器】

• 读取存储器中的指令,译码后协调其他部件按顺序执行(如控制运算器运算、存储器读写),是 "指挥中心"。

【存储器】

• 即内存,统一存储程序(指令序列)和数据(运算对象),可随机访问(按地址读取 / 写入)。

【输入设备】

• 将外部信息(如用户操作、数据文件)转换为计算机能识别的二进制信号。

• 常见的输入设备:键盘,磁盘,网卡等。

【输出设备】

• 将计算机处理后的二进制结果转换为人类可理解的形式(如文字、图像、声音)。

• 常见的输出设备:显示器,磁盘,显卡,音响等。

补充:

• 每个硬件都是独立的存在,彼此之间传输数据其实是依赖"总线"来进行的,即各个硬件通过总线链接。总线又分为:系统总线与IO总线。

• 上述的存储器指的是 内存。

二、理解冯诺依曼体系结构

1、为什么不让IO设备直接与CPU交互?

CPU处理数据的速度太快了,输入输出设备的数据传输速度跟不上,就会导致CPU在数据处理时还要等外设(输入输出设备),那效率就大打折扣了。

类似于木桶效应,如果让IO设备于CPU直接交互,此时计算机的性能只能取决于外设。

怎么解决呢?让内存在外设和CPU之间进行一定的缓冲,即先将大量的数据加载到内存,然后让CPU 与内存之间进行数据传输,而内存的读写数据的速度更快,就可以减少CPU等待外设传输数据的时间。

同时,外设向内存传入数据和CPU从内存获取数据可以同时进行,互不干扰,也可以提高效率。

内存虽快,但与CPU还是有一定的差距,所以,又有了介于内存和CPU之间的高速存储区域,如寄存器,L1,L2和L3高速缓存。但是这类的存储数量少,空间小,也更贵。

总之:一切外设(输入输出设备)只和内存打交道。

2、数据传输实例:QQ聊天数据流动

假设你给你的对象发消息(假设有对象),其实就是两台冯诺依曼体系结构在进行数据流动。

三、操作系统的概念

操作系统是计算机软硬件管理的系统软件,是连接用户与硬件的桥梁,也是应用程序运行的基础环境。

它通过统一管理 CPU、内存、外设等资源,提供高效稳定的运行环境,实现用户与计算机的交互,并为应用程序提供标准化接口。

• 内核(进程管理,内存管理,文件管理,驱动管理)

• 其他程序(例如函数库,shell程序等等)

四、为什么要有操作系统?

• 对下,与硬件交互,管理所有的软硬件资源

• 对上,为用户程序(应用程序)提供一个良好的执行环境

不可能让用户去直接访问硬件,这样是不安全的,而且非常不方便。操作系统则可以将软硬件管理起来,更方便我们使用。操作系统其实就是管理软硬件的一种手段。

五、理解操作系统的管理方式

操作系统的核心功能就是管理,那么它是怎么管理软硬件的呢?

这个我们可以类比到学校校长是怎么管理学生的呢,首先校长(操作系统)不可能是每天面对面监督学生;实际上校长就是通过辅导员获取到学生的各个数据,比如学号,成绩,年纪等等。然后对这些数据进行管理,就相当于管理学生了。开除(删除你的学籍),当你挂科太多留级(修改你的数据)...

可是学校不止一个学生,每个学生都有各自的一份数据,所以还要把这些数据组织起来,方便管理。

最终对学生的管理就转化为了对这些数据的增删查改了,即通过数据管理实现对象管理。

对应到操作系统,其实就是先把软硬件核心属性用一个结构体 "打包",因为操作系统的底层是用C语言实现的;然后将所有的软硬件各自的结构体组织起来(可以用链表或其他更高效的数据结构组织),就可以实现统一管理了。

所以一句话就是:先描述,再组织。

后面操作系统对进程的管理利用了先描述,再组织的方式。

六、系统调用与库函数

这个不难理解,假设银行是一个操作系统,金库是硬件,它的作用就是管理每个客户的钱并为客户提供服务。那银行允许你直接访问硬件(金库)嘛,当然不能,这样非常危险。真正的是为你提供不同的窗口,你需要咋样的服务就到对应的窗口。

操作系统也一样,不允许你直接访问硬件。也是为你提供了不同的接口或者库函数:

在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用, 这部分由操作系统提供的接口,叫做系统调用。

系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部 分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开 发。

相关推荐
雯宝8 分钟前
mnt_init 函数
linux
律宏阔6 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔6 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴6 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千7 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei377 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei377 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei377 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
GeW7 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux
GeW7 小时前
工业场景中的Linux与数据库选型:高端化转型的技术底座
linux