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

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

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

六、系统调用与库函数

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

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

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

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

相关推荐
Predestination王瀞潞1 小时前
JDK安装及环境变量配置
java·linux·开发语言
再睡一夏就好1 小时前
深入Linux线程:从轻量级进程到双TCB架构
linux·运维·服务器·c++·学习·架构·线程
小小药1 小时前
09-vmware配置虚机连接互联网-nat模式
linux·运维·centos
Bright Xu2 小时前
Qemu 安装 LoongArch架构 Fedora Remix F42 Linux系统
linux·loongarch·国产cpu
莫白媛2 小时前
Linux创作笔记综合汇总篇
linux·运维·笔记
studytosky2 小时前
Linux系统编程:深度解析 Linux 进程,从底层架构到内存模型
linux·运维·服务器·开发语言·架构·vim
wdfk_prog3 小时前
[Linux]学习笔记系列 -- [fs]buffer
linux·笔记·学习
Stella25213 小时前
实习日志|知识总结
linux·服务器·软件测试·数据库
weixin_462446233 小时前
【原创实践】使用 shell 脚本批量创建 Linux 用户并生成随机密码
linux·服务器·前端
可爱又迷人的反派角色“yang”3 小时前
redis知识点总集
linux·运维·数据库·redis·缓存