【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语言实现的;然后将所有的软硬件各自的结构体组织起来(可以用链表或其他更高效的数据结构组织),就可以实现统一管理了。

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

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

六、系统调用与库函数

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

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

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

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

相关推荐
hfut02882 小时前
第25章 interface
linux·服务器·网络
风123456789~6 小时前
【Linux专栏】显示或隐藏行号、批量注释
linux·运维·服务器
只想安静的写会代码7 小时前
centos/ubuntu/redhat配置清华源/本地源
linux·运维·服务器
susu10830189117 小时前
ubuntu多块硬盘挂载到同一目录LVM方式
linux·运维·ubuntu
r***F2627 小时前
【漏洞复现】CVE-2019-11043(PHP远程代码执行漏洞)信息安全论文_含漏洞复现完整过程_含Linux环境go语言编译环境安装
linux·golang·php
tsumikistep8 小时前
【前后端】接口文档与导入
前端·后端·python·硬件架构
smaller_maple9 小时前
linux问题记录1
linux·运维·服务器
报错小能手10 小时前
讲讲libevent底层机制
linux·服务器
代码AC不AC12 小时前
【Linux】计算机的基石:从冯·诺依曼体系结构到操作系统管理
linux·操作系统·冯诺依曼体系结构