【Linux】冯诺依曼体系与操作系统理解

server/2025/3/10 5:41:32/

🌟🌟作者主页:ephemerals__

🌟🌟所属专栏:Linux

目录

前言

一、冯诺依曼体系结构

二、操作系统

1. 操作系统的概念

2. 操作系统存在的意义

3. 操作系统的管理方式

4. 补充:理解系统调用

总结


前言

        在数字时代,计算机早已渗透进我们生活的方方面面。从智能手机到超级计算机,这些强大的机器背后,都离不开两个至关重要的概念:冯诺依曼体系结构操作系统。理解这两者,对于学习Linux系统编程、深入理解计算机体系至关重要,它将帮助你编写更高效、稳定的程序,并解决更复杂的系统问题。本文将带你深入浅出地探索冯诺依曼体系的精髓,并解析操作系统如何在其之上构建起庞大的软件生态,最终让冰冷的硬件焕发出无限的可能。

一、冯诺依曼体系结构

        冯诺依曼体系结构(Von Neumann Architecture)是一种经典的计算机设计模型,由数学家约翰·冯·诺依曼提出。其具有中央处理器、存储器和输入输出设备三个主要组成部分,共同完成对程序的控制和执行。尽管存在瓶颈问题,大多数现代计算机仍基于冯诺依曼体系结构,并通过缓存、多核等技术优化性能。

注意:冯诺依曼体系结构当中,CPU(中央处理器)在数据层面只能对内存进行读写,不能直接访问输入和输出设备;输入和输出设备也只可和内存打交道。 

由于CPU只能通过内存来读取和写入数据,所以一个程序在运行之前必须先加载到内存。

        不难发现,有了输入输出设备和中央处理器之后,就可以确保程序的执行了(让处理器直接访问输入输出设备)。为什么还需要内存呢?实际上,CPU对数据的处理速度是远远大于输入输出设备的。如果直接让CPU直接访问输入输出设备,那么根据木桶效应,整体结构的运行效率将由输入输出设备决定,就无法发挥出CPU的性能。加入了内存之后,其可以一次性存储输入设备提供的大量数据,交给CPU去处理,然后再通过它统一传输给输出设备。这样就对CPU和输入输出设备的运行速度差进行适配,提升整体效率

在冯诺伊曼体系结构中,数据传输的本质是从一个设备“拷贝”到另一个设备,整个结构的运行效率由“拷贝”效率决定。

二、操作系统

        了解了冯诺依曼体系结构之后,我们再来谈另一个概念:操作系统。 操作系统是计算机的灵魂,它决定了计算机的功能、性能和用户体验。无论是对编程、软件开发、大数据、人工智能的学习,都离不开对操作系统的理解。深入学习操作系统,能够帮助我们在各个技术领域打下坚实基础,提高编程能力和解决问题的能力。

1. 操作系统的概念

        用通俗的话来讲,操作系统(OS)就是一款对各种软硬件进行管理的软件。它可以控制各种硬件与软件资源,确保其高效执行,为用户提供了更便捷的计算机使用方式。

操作系统包括:

1. 内核(进行内存管理、文件管理、进程管理、驱动管理等)

2. 其他程序(例如函数库、shell外壳等)

2. 操作系统存在的意义

        先看一张图:

如上图所示软硬件体系结构是一种层状结构,对各种资源进行分级管理。分级管理只能由上到下顺序进行。用户要对计算机进行各种操作,就需要通过一系列的分级管理流程。而在整个软硬件管理体系当中,操作系统起着至关重要的作用。想要对访问底层硬件,就一定需要先访问操作系统,由操作系统对硬件进行控制。因此,操作系统的存在意义是:

1. 对下,与硬件进行交互,管理所有的软硬件资源(手段)

2. 对上,为用户程序提供良好的运行环境(目的)

除此之外, 我们还可以由图得出以下结论:

1. 若要访问操作系统,就必须使用系统调用(操作系统提供的接口)

2. 一个程序只要访问了硬件,就必须贯穿整个软硬件体系结构,不可能跳跃进行

3. 一些库文件中的函数具备输入输出功能,说明其在底层封装了系统调用

3. 操作系统的管理方式

        操作系统是如何对软硬件进行管理的呢?

我们拿学校的管理模式举例:

一个学校的校长需要对校领导、教师以及学生进行管理。但是学校有很多人,校长无法一一管理,此时就需要实行分级管理制度:校长管理校领导,校领导管理教师、教师管理学生

所以校长想要管理学生,不必和每个学生进行面对面接触,而是通过教师,再通过校领导,获取学生的各项数据,然后分级管理。

那么校长是如何通过数据,达到管理学生的目的呢?

从编程的角度来讲,校长可以将学生的各项数据(如年龄、性别、身高体重、成绩等)包装成一个类,然后通过创建对象,设置成员变量的值来描述不同的学生。之后使用数组、链表或其他容器对学生进行组织,通过对容器进行增删查改操作来实现对学生的管理。

操作系统就好比这里的校长,它对软硬件的管理方式就是通过驱动程序或系统调用获取软硬件的数据,然后对数据进行描述、组织

操作系统管理的本质:对数据的增删查改。 

4. 补充:理解系统调用

        之前提到:若要访问操作系统,就必须使用系统调用。为了打好Linux系统编程的基础,我们通过一些知识补充来加深对系统调用的理解。

系统调用是什么?

系统调用是操作系统提供给用户的接口,供上层开发使用。

系统调用的作用?

方便用户与操作系统之间进行数据交互。

一般来讲,系统调用的功能较为基础,且实现要求较高。开发者会对系统调用进行一系列封装,形成库,便于二次开发。

判断库函数是否封装了系统调用的方法:判断该函数是否访问了硬件,因为一个程序只要访问了硬件,就必须贯穿整个软硬件体系结构,不可能跳跃进行。

总结

        通过对冯诺依曼体系结构的理解,我们掌握了计算机的基本工作原理,而操作系统的概念、存在意义及管理方式的学习,则为我们揭开了计算机资源管理的核心机制。特别是对系统调用的深入理解,为我们后续学习Linux系统编程奠定了坚实的基础。如果你觉得博主讲的还不错,就请留下一个小小的赞在走哦,感谢大家的支持❤❤❤


http://www.ppmy.cn/server/173859.html

相关文章

【leetcode100】组合总和Ⅱ

1、题目描述 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 示例 1: 输入: candidates…

QOJ9700 Ying’s Cup(拉格朗日插值优化卷积,背包,二项式反演)

题意 原题链接 简要题意: 给你一棵 n n n 个点的树,你需要将 1 ∼ n 1 \sim n 1∼n 的排列填到树上的节点中。定义一个点为 局部最小值 满足与它相邻的点上的数都比它大。你需要对 k 1 , 2 , . . . , n k 1,2,...,n k1,2,...,n 都输出恰好有 k k…

19723分布式队列

19723分布式队列 ⭐️难度:中等 🌟考点:模拟、2024省赛 📖 📚 import javax.sound.sampled.Line; import java.math.BigInteger;import java.util.Arrays; import java.util.Scanner;public class Main {static …

labelme的使用

labelme的使用 打开labelme 在anaconda prompt中输入 labelmelabelme打开界面 利用labelme获得json文件 打开目录文件 利用labelme标注 先绘制多边形在标注标签 然后保存这样就会得到我们的json文件 json文件的操作 json文件转numpy文件 下面这个代码可以将json文…

华为欧拉系统 Tomcat 安装详解

1. 安装或确认安装 Java Tomcat 需要 Java 环境(JDK 或 JRE)才能运行。如果系统尚未安装 Java,可以使用以下命令安装 OpenJDK: # 更新软件包索引 yum update -y# 安装 OpenJDK 21(可根据需求安装其他版本,如 8、11、17 等) yum install -y java-21-openjdk java-21-op…

【SpringBoot】统一功能处理

目录 一、什么是统一功能处理 二、统一用户登录权限验证 2.1 定义拦截器 2.2 制定拦截规则 2.3 创建请求 2.4 拦截器实现原理 三、统一异常处理 四、统一数据格式返回 一、什么是统一功能处理 SpringBoot 统一功能处理: 定义:指在SpringBoot应…

系统架构设计师—系统架构设计篇—软件可靠性

文章目录 软件可靠性的定义软件可靠性定量描述可靠度失效强度平均失效前时间平均恢复前时间平均故障间隔时间 可靠性测试广义的可靠性测试狭义的可靠性测试可靠性测试的目的 影响软件可靠性的因素软件可靠性的建模方法可靠性模型的组成好的可靠性模型可靠性模型分类 软件可靠性…

golang从入门到做牛马:第三篇-Go程序的“骨骼架构”

在编程的世界里,Go语言就像一位优雅的舞者,它的每一个动作都简洁而高效。而要真正领略Go语言的魅力,我们得先从它的基本结构开始。Go程序的结构清晰、逻辑严谨,就像一座精心设计的建筑,每一部分都有其独特的功能和位置。接下来,就让我们一起拆解Go程序的“骨骼架构”,看…