浅谈冯诺依曼体系与Linux操作系统

目录

前言

1.1冯诺依曼体系下的存储器

二、操作系统

1.关于操作系统

2.关于管理方式

总结


前言

不知道你是否有着这样的疑问:

什么是内存?什么是磁盘?他们有什么区别?可不可以相互替代?

操作系统是如何对数据进行管理的?我们平日写的C代码是如何既能在windows机器上执行又能在Linux机器上执行的呢?

如果你对这些问题感到混乱不妨先来看看这篇文章!

博主码云:带着可莉去炸鱼 (shenyang-aerospace-university-g_0) - Gitee.com


一、冯诺依曼体系结构

        想象以下现在你正在看着博主的文章美滋滋的学习着:那么博主的这篇文章是如何通过网络发送,通过你的网卡进行接受,而后显示在屏幕上的呢?

图1.0.1        冯诺依曼体系架构

在解释这个问题之前还需要我们了解一下冯诺依曼体系下的几个模块:
1.输入设备:键盘、网卡、磁盘、话筒、鼠标等等设备

2.输出设备:磁盘、显示器、声卡、网卡等等设备

3.存储器:磁盘、内存、多级缓存、云盘、光盘等

4.运算器和控制器:这两个模块都集成在现代的CPU中,控制器来输出控制信号、运算器来处理和发送数字信号。

举个例子解释控制信号和数字信号:

在一个有一定吞吐规模的港口上,你会发现有集装箱的辗转腾挪与运输船的停靠、卸载、装载。控制器起到的作用可以看作是对货船发出可以停靠、卸载、装载的信号,而运算器就是来实现这些动作的具体执行者。   

        但是存储器到底是什么,在冯诺依曼体系下是如何分布的?这是我们要要解释清楚的事情

1.1冯诺依曼体系下的存储器

        

图1.1.1        存储器的层次结构

        在具体解释存储器之前,要先解释以下为何储存器会出现在冯诺依曼体系结构下:

毫无疑问现代CPU的速度是远快于输入、输出设备的,这就造成了这样一个问题:CPU的处理速度过快以至于它会时常处于等待输入、输出设备响应,这显然是一种对CPU资源的浪费,网上有一个十分形象的表述——木桶原理

图1.1.2        木桶原理

        在计算机的世界中更是如此,计算机的速度往往受到它某些慢速硬件的影响,所以人们就想如何来减少对CPU资源的浪费,试想一下假如CPU具有同时处理十个输入和十个输出设备的能力,假设我们此时只有五个输入和五个输出设备,假设CPU只处理这几个设备,那么显然会浪费CPU处理五个输入和五个输出设备的能力。那么试想一下,如果我们能将更快的将更多的信息给CPU、将信CPU处理后的数据储存起来等输出设备就绪时在给输出设备而不是由CPU等待输出设备、将CPU资源释放出来给其他程序,是否就能增加CPU的效率呢?答案显而易见。当然可以!

        所以内存就应运而生,内存的速度比一般的输入、输出设备更快,它可以将输入设备输入的数据预加载到内存中,等待CPU“空闲时”向高一级的存储器释放,同时在向输出设备输出时会对内容进行缓存等待输出设备就绪的时候输出,而不是由CPU“拿着”数据等着输出设备就绪。

        至于磁盘的速度比较慢,但是其容量较内存和多级缓存更大,价格也越低廉,内存较磁盘更快,但是容量更小、价格更贵。同时需要注意的是内存具有掉电丢失的特性,因而内存只能用来临时保存数据,磁盘更适合长期保存数据。由于要满足CPU的高速数据供给,显然用磁盘来替代内存是不合适的。

图1.1.3        现代CPU参数
图1.1.4        现代内存参数
图1.1.5        现代磁盘参数

二、操作系统

1.关于操作系统

        操作系统是一款管理软硬件资源的软件,其通过合理管理软硬件资源给上层的用户带来安全、快速、高效的体验。

图2.1.1        操作系统定位图

        从图2.1.1中我们不难发现每一层之间有着严格的上下顺序,事实也是如此:

        当我们身为用户使用某一款操作系统的时候基本上都是不会去关心底层的硬件逻辑的,但是我们的PC机往往又是由复杂的硬件构成的,此时就需要硬件的厂商来自行提出一种运行该硬件的软件,这就是驱动程序,但是仅仅有驱动程序是远远不够的,比如我们敲击键盘,此时我们希望进行打字,而现实却是机器直接死机了,那将是一件多么扫兴的事情,所以此时操作系统出现来管理和调度这些驱动程序,那么此时一台基本功能的PC机就出现了,但是有这样一个问题:硬件与硬件之间有着很大的差异,面向机器编程将是一件十分痛苦的事情,因为这意味着一份能在不同机器上运行得到正确结果变得几率渺茫,所以此时的人们想是否能消弭不同机器带来的编码壁垒,而后人们发明了诸如C语言这样的编程语言,而后广泛传播,人们便开始默契的制定语言标准,这使得人们不必关心硬件差异,厂商们会进一步向上迎合已经指定的语言标准,程序员只需要使用人们早已标定的由操作系统修正差异的接口就可以实现相应的效果——这一举动无疑大大解放了生产力、降低了程序员的门槛。

在不同的厂商向上迎合标准的时候,定然是不希望一个用户去私自胡乱的去访问其他用户的数据的,因而操作系统只接受通过其自己设计的系统调用接口来访问其内核数据(让我们不要把视线只停留在我们使用的PC机上,比如某些证券公司等非常要求安全性的地方,这样的设计就显得尤为重要)。

图2.1.2        关于抽象接口的理解

2.关于管理方式

        想象一下我们在学习数据结构的时候,是如何管理数据的?对于一个链表我们会先定义一个节点,而后将多个节点相连接然后形成链表并为其构建相应的功能。对于一个树结构,我们会先用定义每个节点而后根据合适的规则链接成树,然后在为其构建相应的函数。对于堆栈结构来说更是如此。只不过有的数据较为简单可能使用单个内置类型变量就足以表示,但是在实际生产中,数据往往很难由单一的数据类型来表示,比如说我们操作系统在表示一个任务的时候,往往会有诸多的数据需要管理。

        在Windows的操作系统中有着明确的线程和进程该概念,但是在Linux系统中,操作系统则没有界限分明的定义,Linux操作系统统一将其称为任务,对于一项任务往往是要由多种数据构成的

1.唯一标识符

2.进程状态

3.优先级信息

4.程序计数器:用来指认代码下一句执行内容

5.内存指针:用来指向进程需要的数据和代码

6.上下文数据:用来记录某一时刻进程执行的各项参数

7.记账信息:用来记录单个进程的执行时间,用来计算程序运行是否超出时间片

8.其他信息

        显然,要正确的描述一项任务很难由单个内置类型实现,所以我们往往使用自定义类型来描述操作系统管理的软硬件。就我们学习管理数据结构的那样我们操作系统会先抽象出一个结构体,而后在结构体中进行详细的定义,而后只需要面向结构编写相应的功能函数即可。在操作系统中不仅是对软件内容是如此管理,对于硬件更是如此。

所以我们不难概括以下操作系统的管理方式——先对目标做描述,而后制定相应函数。

在之后的文章中博主会介绍有关于进程更多详细的信息

                                                                                                        ——本文【完】


总结

本文十分粗浅的谈了谈现代计算机体系架构和操作系统的管理方式,一方面是为了后面的文章打下一些基础,另一方面是为了扫除一些常识性的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

聚类分析 | 基于GA遗传算法优化kmeans聚类(Matlab)

聚类分析 | 基于GA遗传算法优化kmeans聚类(Matlab) 目录 聚类分析 | 基于GA遗传算法优化kmeans聚类(Matlab)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GA-kmeans聚类算法,通过GA遗传算法优化kmeans聚类&…

vue2实现右键菜单功能——vue-diy-rightmenu——基础积累

五一之前遇到一个需求,就是关于要实现自定义右键菜单的功能,普通的右键展示的菜单有【返回/前进/重新加载/另存为】等,希望实现的效果就是右键出现自定义的菜单,比如【编辑/删除/新增】等。 遇到这种的需求,可以直接去…

C#进阶-OleDb操作Excel和数据库

在C#编程中,使用OleDb可以方便地实现对Excel文件和数据库的操作。本文探讨了在C#中使用OleDb技术操作Excel和数据库的策略。文章详述了OleDb的定义、配置环境的步骤,并通过实际代码示例演示了如何高效读写Excel文件和交互数据库。文中还评估了OleDb技术的…

【C++初阶】第十站:vector 中通用函数的模拟实现

目录 vector中的三个重要迭代器 默认成员函数 构造函数(无参构造) 构造函数(函数模板) 构造函数(带有默认参数) size_t int 拷贝构造函数 赋值重载 析构函数 迭代器相关函数 begin和end 容量和大小相关函数 size capacity resize 修改容器内容相关函数 reser…

Django项目之电商购物商城 -- 创建收货地址

Django项目之电商购物商城 – 创建收货地址 一. 在users中创建新的视图与路由用于创建收货地址 # 设置收货地址 class AddressView(View):def get(self , request):return render(request , "user_center_site.html")# 设置收货地址path(user_center_site/, views.…

web前端学习笔记9

9. HTML5新增元素及属性 9.1 HTML5新增结构元素 HTML5引入了几个新的结构元素,极大地改善了网页的组织和结构方式。以下是HTML5中的一些关键新结构元素: 标签说明<header>页面或页面中某一个区块的页眉,通常是一些引导和导航信息<nav>可以作为页面导航的链接组&…

【c++】线程池的原理及实现

&#x1f4bb;文章目录 &#x1f4c4;前言线程池的原理概念工作原理 线程池的实现线程池的基础结构任务队列的实现工作线程的实现 线程池的应用与拓展线程池的拓展 &#x1f4d3;总结 &#x1f4c4;前言 不知道各位是否有试过点进限时抽奖网站、抢票网站呢&#xff1f;你是否好…

第19讲:Ceph集群CrushMap规则定制与调优:从基础到高级应用

文章目录 1.CrushMap规则拓扑结构1.1.集群默认的CrushMap规则拓补图1.2.自定义的CrushMap规则拓补图 2.定制CrushMap规则的方法以及注意事项3.通过二进制文件编写一套CrushMap规则3.1.将系统默认的CrushMap规则导出3.2.根据需求编写CrushMap规则3.3.将编写好的规则导入到集群中…

Fastapi+docker+tortoise-orm+celery

因为项目是后期引入celery,所以导致构建docker的时候只有fastapi的项目&#xff0c;celery的重启比较麻烦 1.docker安装celery pip install celery安装celery的时候注意python版本与celery版本的适配&#xff0c;有些celery的版本不支持python的版本&#xff0c;具体的版本请看…

计算机毕业设计 | vue+springboot汽车销售管理系统(附源码)

1&#xff0c;项目介绍 本项目基于spring boot以及Vue开发&#xff0c;前端实现基于PanJiaChen所提供的开源后台项目vue-element-admin改造。 针对汽车销售提供客户信息、车辆信息、订单信息、销售人员管理、财务报表等功能&#xff0c;提供经理和销售两种角色进行管理。 2&…

记录如何查询域名txt解析是否生效

要查询域名的TXT记录&#xff0c;可以使用nslookup命令。具体步骤如下&#xff1a;12 打开命令行终端。输入命令 nslookup -qttxt 域名&#xff0c;将"域名"替换为你要查询的实际域名。执行命令后&#xff0c;nslookup会返回域名的TXT记录值。 如何查询域名txt解析是…

面试题库-项目

1.项目主要实现了哪些功能&#xff1f; 本项目是专门为校园食堂窗口定制的一款软件产品&#xff0c;包括系统管理后台和客户端两部分。其中系统管理后台主要提供给食堂内部员工使用&#xff0c;可以对餐厅的菜品、套餐、订单、员工等进行管理维护。客户端主要提供给学生及校职…

什么是分库分表?代表性框架有哪些?

在互联网系统开发过程中&#xff0c;所谓的分库分表并不是一个新概念。或者说&#xff0c;对于很多开发人员而言&#xff0c;说起分库分表&#xff0c;大家都或多或少有所了解&#xff0c;也都知道数据量大了就需要进行分库分表。但是究竟如何实现分库分表呢&#xff1f; 要想…

创建Spring Boot项目及配置

目录 一、创建项目所需要的插件 1、安装插件 二、创建项目 三、创建项目所面临的常见问题。 1、IDEA不能识别 2、无效的发行版本 3、确认jar包是否下载成功 一、创建项目所需要的插件 1、安装插件 首先需要在IDEA插件里面搜索Spring&#xff0c;选择Spring Boot Helper…

什么是短信群发上行和下行

短信群发是一种广泛应用于商业和个人通信的技术&#xff0c;通过一次多条的方式&#xff0c;可以快速高效地传递信息。在实际的群发过程中&#xff0c;会涉及到上行和下行的概念。本文将详细介绍什么是短信群发上行和下行&#xff0c;并解释它们的应用。 什么是短信群发上行 群…

Dbeaver连接一段时间不操作后断开的问题

右键数据库连接点击编辑连接点击初始化将连接保持改成60s

BW4HANA混合建模 用ADSO的哪个视图?

写日志的ADSO除了1,2,3表之外。还会有6,7,8view。8view是上了BW4HANA2.0之后激活ADSO就会生成的。如果旧版本没有8&#xff0c;那就RSDG_ADSO_ACTIVATE激活一下。 如果勾了外部HANA视图&#xff0c;那就等于说还有一个HANA view。 首先咱知道ADSO是BW里面用来物理存储&#xf…

做一个属于自己的软件-pyside6快速上手教程

首先环境需要安装python3和pip&#xff0c;软件使用pycharm&#xff0c;安装也都很简单 首先需要安装pyside6,在终端执行&#xff1a; pip install pyside6 然后进入可视化编辑界面 pyside6-designer 进入后创建即可 可以从左侧点击鼠标拉组件进入到中间的工作区&#xff…

BLIP和BLIP2 论文讲解

文章目录 BLIPIntroductionMethod模型架构预训练目标字幕和过滤&#xff08;Capfilt&#xff09; BLIP2IntroductionMethod模型结构Q-Former预训练第一阶段Q-Former预训练第二阶段 BLIP 论文&#xff1a; 《BLIP: Bootstrapping Language-Image Pre-training for Unified Visio…

详解BOM编程

华子目录 BOM编程window对象常见的window对象的属性常见的window对象的方法注意 history对象history对象的属性history对象的方法 screen 对象navigator 对象属性方法 location对象属性方法示例 BOM编程 JavaScript本质是在浏览器中运行&#xff0c;所以JavaScript提供了BOM&a…