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

本篇文章是进程的预备知识,但也不仅仅是进程的预备知识,
也可以更好地帮助我们理解整个计算机体系。

目录

  • 冯诺依曼体系结构:
  • 进一步理解操作系统:

冯诺依曼体系结构:

在这里插入图片描述
关于这张图先进行一下必要的解释:

  1. 输入设备:包括键盘, 鼠标,扫描仪, 写板等
  2. 中央处理器(CPU):含有运算器和控制器等
  3. 输出设备:显示器,打印机等
  4. 对于存储器,计算机中很多硬件设备都有存储功能,但这里的存储器指的是内存

我们现在只谈数据层面的信号,我们发现所有的数据都是经过内存的,为什么呢?

如果没有内存的话
在这里插入图片描述
这就是我们没有内存的情况,由于输入设备与输出设备的速度是很慢的,根据木桶原理在这里插入图片描述
计算机的速度就慢下来了,这也就是内存为什么存在的原因。

他是作为一个巨大的缓存,是一个中转站,或许有人会说,他多经过一个路径,多拷贝了一次,速度岂不是更慢了,
答案是,就算CPU的计算速度再快,但是也需要计算时间,我们在CPU计算的时间内,由输入设备像内存中先存一大段数据,CPU直接从中拿取就会加快一个量级。

那我们知道这个有什么作用呢?
我们在学习C语言时大概率听到过一句话,我们写好的程序都是会先加载到内存中,再由CPU计算程序的数据。这就是冯诺依曼体系规定这么做的。


那么从你登录上qq开始和某位朋友聊天,从你打开窗口,给他发消息,到他的到消息之后的数据流动过程是怎样的呢?

首先我们要想到两台电脑就是两个冯诺依曼体系结构。
在这里插入图片描述

进一步理解操作系统:

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

  • 内核(进程管理,内存管理,文件管理,驱动管理)
  • 其他程序(例如函数库,shell程序等等)

给操作系统下一个笼统的定义的话:就是一款管理硬件与软件的软件。

既然可以管理硬件,那我们可以得到如下示意图(不完整):
在这里插入图片描述

那么重点来了,是如何进行管理的呢?

就像一个学校的校长要管理学生,肯定不是每天一个一个的管理学生,毕竟那么多人。
于是肯定就会有一个管理系统,管理系统中有学生详细的数据,于是校长直接管理数据就好了。
到这里我们就会发觉教务系统与我们曾经实现的通讯录是很像的。我们先描述一个对象

struct stu
{char name[20];char telephone[15];int age;....
}

在将每一个对象进行连接,也就是组织起来,即多加一个指针,类似链表的感觉。

struct stu
{char name[20];char telephone[15];int age;....struct stu* next;
}

于是我们可以得到一个结论:

管理事物总是先描述,再组织

那么我们对于管理硬件同样的道理。
先描述再组织在这里插入图片描述
操作系统即是硬件的管理者,并不是直接对硬件进行管理,而是对硬件的链表进行增删查改


再来看一下完整的操作系统示意图:
在这里插入图片描述
我们管理硬件的目的是为了给用户提供好的体验,但是,用户可以直接对操作系统中的各种硬件数据进行修改吗?

答案是否定的,因为你可能改成不符合规定的数据最终造成崩溃,所以不能直接访问。
但是用户要如何使用操作系统呢?
操作系统给我们提供了一系列的系统调用接口在这里插入图片描述
我们也就可以进行一系列的操作了,但是这个是建立在对操作系统有一定理解的程序员才可以很好的使用,不了解的寸步难行,针对这种情况,于是又进行一层封装在这里插入图片描述
让我们更方便的进行使用。我们也经常在使用这些被封装过的接口,也就是各种各样的库。

系统调用和库函数概念

  • 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
  • 系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

注意:
有了库,就算在不同的操作系统下编写代码,由于封装的库是一样的,比如我们在linux下printf,在windows下也是printf(即是他们的系统调用接口不同),于是就有了跨平台性!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/739850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样通过IT服务台来增强IT项目管理?

当下,越来越多的企业和组织重视IT项目管理的重要性。而如何通过IT服务台来增强和提升IT项目管理效率,成为了许多企业领导和IT专业人员共同关注的话题。如何充分利用IT服务台,以促进IT项目管理水平的提升和项目成功率的增加变得至关重要。 1…

Codeforces Round 924 (Div. 2)---->B. Equalize

总思路:首先我们做这题的时候有两个点一定要知道: 1.当数组中有重复元素的时候,只有其中的一个才能贡献一个相同元素,其他的都不行(因为是排列,一个数只出现一次),所以我们可以用使…

怎么免费下载无水印视频素材?赶快收藏这六个网站。

今天来教大家怎么下载无水印视频素材,其中一些是免费的,并且可以在商业项目中使用,这些网站都是无水印视频素材,可以放心使用。 蛙学网: 网站的内容非常丰富多彩,包括风景,夜景,食物…

论文阅读:Editing Large Language Models: Problems, Methods, and Opportunities

Editing Large Language Models: Problems, Methods, and Opportunities 论文链接 代码链接 摘要 由于大语言模型(LLM)中可能存在一些过时的、不适当的和错误的信息,所以有必要纠正模型中的相关信息。如何高效地修改模型中的相关信息而不影…

【JS】自动下拉网页刷新,当出现指定关键字,就打印出来

批量检查域名是否可以注册 1、有的网站数据是通过下拉发生请求,间隔x毫秒自动下拉 2、查找某个关键字,找到就打印出来 3、打印数据自动去重 4、当连续n次下拉,没有新div元素出来,就停止该循环 var map {}; var count 0; var l…

qt如何将QHash中的数据有序地放入到QList中

在qt中&#xff0c;要将QHash中的数据有序地放入到QList中&#xff0c;首先要明白&#xff1a; 我们可以遍历QHash中的键值对&#xff0c;并将其按照键的顺序或值的大小插入到QList中&#xff0c;直接用for循环即可。 #include <QCoreApplication> #include <QHas…

java学习(Arrays类和System类)

目录 目录 一.Arrays类 二.System常见方法 三、Biglnteger和BigDecimal&#xff08;高精度&#xff09; 1.Biglnter的常用方法 2.BigDecimal常见方法 3.日期类 1)第一代日期类 2&#xff09;第二代日期类 3)第三代日期类 一.Arrays类 Arrays包含了一系 列静态方法&am…

11、Linux-安装和配置Redis

目录 第一步&#xff0c;传输文件和解压 第二步&#xff0c;安装gcc编译器 第三步&#xff0c;编译Redis 第四步&#xff0c;安装Redis服务 第五步&#xff0c;配置Redis ①开启后台启动 ②关闭保护模式&#xff08;关闭之后才可以远程连接Redis&#xff09; ③设置远程…

12双体系Java学习之局部变量和作用域

局部变量 局部变量的作用域 参数变量

理解记忆相关

foreach循环 在 Java 中&#xff0c;foreach 循环&#xff08;也称为增强型 for 循环&#xff09;是一种简洁的语法&#xff0c;用于遍历数组或集合&#xff08;如 List、Set、Map 等&#xff09;。以下是 foreach 循环的基本用法&#xff1a; 遍历数组&#xff1a; String[] …

在 Python 中从键盘读取用户输入

文章目录 如何在 Python 中从键盘读取用户输入input 函数使用input读取键盘输入使用input读取特定类型的数据处理错误从用户输入中读取多个值 getpass 模块使用 PyInputPlus 自动执行用户输入评估总结 如何在 Python 中从键盘读取用户输入 原文《How to Read User Input From t…

Rust:为 Trait 定义默认的方法

当你提到“指定 trait 的实现”并使用 :: 符号时&#xff0c;你可能是指在某些情况下&#xff0c;你想直接通过 trait 而不是具体的类型来调用方法。这在 trait 提供了默认方法实现时尤其有用&#xff0c;因为你可以不依赖任何具体的类型实现来调用这些方法。 然而&#xff0c…

AI写真变现项目丨超级训练营SOP手册

出品方&#xff1a; 吴东子团队 x AI破局俱乐部 以下只是该SOP手册的部分介绍&#xff0c;AI写真变现项目上手到变现全流程&#xff0c;需要完整手册的可以dd我。 AI写真 首先什么是AI写真&#xff0c;顾名思义的话可以说成是用AI生成写真照&#xff0c;我们先暂且这么理解&am…

PostgreSQL教程(三十二):服务器管理(十四)之监控磁盘使用

本章讨论如何监控PostgreSQL数据库系统的磁盘使用情况。 一、判断磁盘用量 每个表都有一个主要的堆磁盘文件&#xff0c;大多数数据都存储在其中。如果一个表有着可能会很宽&#xff08;尺寸大&#xff09;的列&#xff0c; 则另外还有一个TOAST文件与这个表相关联&#xff0…

Java详解:单列 | 双列集合 | Collections类

○ 前言&#xff1a; 在开发实践中&#xff0c;我们需要一些能够动态增长长度的容器来保存我们的数据&#xff0c;java中为了解决数据存储单一的情况&#xff0c;java中就提供了不同结构的集合类&#xff0c;可以让我们根据不同的场景进行数据存储的选择&#xff0c;如Java中提…

【java数据结构】HashMap和HashSet

目录 一.认识哈希表&#xff1a; 1.1什么是哈希表&#xff1f; 1.2哈希表的表示&#xff1a; 1.3常见哈希函数&#xff1a; 二.认识HashMap和HashSet: 2.1关于Map.Entry的说明:,> 2.2Map常用方法说明&#xff1a; 2.3HashMap的使用案例&#xff1a; 2.4Set常见方法…

K 个一组翻转链表

题目&#xff1a; struct ListNode{int val;ListNode* next;ListNode(): val(0), next(nullptr) {}ListNode(int _val): val(_val), next(nullptr) {}ListNode(int _val, ListNode* _next): val(_val), next(_next) {} };class Solution { public:ListNode* reverseKGroup(Li…

555经典电路

1、555介绍&#xff1a; 555 定时器是一种模拟和数字功能相结合的中规模集成器件。一般用双极性工艺制作的称为 555&#xff0c;用 CMOS 工艺制作的称为 7555&#xff0c;除单定时器外&#xff0c;还有对应的双定时器 556/7556。555 定时器的电源电压范围宽&#xff0c;可在 4…

如何在Linux使用docker安装Plik并实现无公网ip上传下载内网存储的文件资源

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&…