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

目录

一.冯诺依曼体系结构

存储分级

为什么程序运行之前,必须加载到内存上?

二.操作系统

操作系统是什么?

为什么需要操作系统?

操作系统是如何管理软硬件资源?


一.冯诺依曼体系结构

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系

截至目前,我们所认识的计算机,都是有一个个的硬件组件组成

输入单元 :包括键盘 , 鼠标,usb,磁盘/ssd,网卡
存储器 :存储器起始就是 内存
中央处理器(CPU) :含有运算器和控制器等
输出单元 :显示器,打印机,网卡,显卡等

内存与磁盘的区别:

内存和磁盘是计算机中的主要存储部件

内存是利用电效益实现的

一旦电脑断电,内存存储的数据会全部丢失

磁盘(永久存储介质)是外设,可以永久存储数据。

内存的特点:处理数据速度非常快,造价高

磁盘的特点:相对于内存处理数据的速度较慢,造假低

注:计算机中几乎所有设备都有存储数据的功能,只是存储能力有大有小。

处理数据的速度:CPU>内存>各种外设(磁盘)

存储分级

从图中我们可以看出:

以cpu为中心,距离CPU越近,存储效率越高,造价越高。距离CPU越远,存储效率越低。造价越低

为什么采用存储分级?

如果全部都采用高价的存储介质,速度快但太贵,

如果全部采用低价的存储介质,便宜但速度太慢

因此,为了使造价相对较低,速度较快,采用了内存分级:

在数据层面上CPU一般不和外设直接交互(防止出现木桶效应,导致整机效率太低),CPU优先与内存进行数据交换,再进行处理。因此再在硬件上内存也可以看出成一个巨大的缓存。

因此基于冯诺依曼体系结构的计算机,本质:就是用比较少的钱,造出效率不差的计算机(性价比较高)

为什么程序运行之前,必须加载到内存上?

程序=代码+数据,最终都要CPU来执行,要想处理这些,CPU要先读取这些代码和数据,CPU和内存有“数据(二进制层面)”层面的交互,形成一个exe的可执行文件,而文件只能存储在磁盘(外设)中保存。而现代计算机大多数都是采用的冯诺依曼结构,CPU与内存进行数据交互,因此需先把exe文件(要执行的程序)里的东西,加载到内存上,才可以运行。

二.操作系统

操作系统是什么?

是一款软件,进行软硬件资源管理的软件。

是计算机开机后,第一个加载的软件

为什么需要操作系统?

我们知道,世界上第一台计算机埃尼阿克,他是没有操作系统的,他需要专业的人员手动的进行各种操作且很容易出错,同时具有的功能也很少。因此为了方便使用人员,大佬们专门写了一块软件来进行,让我们可以通过一些简单的指令或动作,告诉操作系统,让它代替我们对硬件进行一系列的操作。

简单来说:

操作系统可以代替我们对软硬件进行资源管理(手段),给用户提供良好(易用,稳定,安全,高效)的使用环境(目的)

操作系统是如何管理软硬件资源?

计算机的层状结构:

 举一个例子(校园管理)

在你来到入学时,记录你各种信息的档案会到学校里,然后你在学校这四年的学习与其他情况都会记录在你的档案里,在这期间,学校会根据你的档案里记录的信息对你进行管理,为了方便管理,可以定义一个student结构体记录信息

struct student
{int age;int grade;string name;....
}

为了方便保存,查找等,学校将student以链表的方式链接在一起

struct student
{struct student* next;int age;int grade;string name;....
}

从此学校对于学生的管理就变成了对结构体链表的管理,我们可以通过访问结构体的信息,来对链表进行增删查改(对学生进行扩招,开除)。

管理的本质不是管人,而是管理数据。

对学生的管理,就是我们计算机管理的建模过程。

我们可以总结对事务的管理:

先描述,再组织

操作系统管理核心有:


1.进程管理

2.内存管理

3.文件/IO管理

4.驱动管理

这些管理都遵循:先描述,再组织。

再看计算机的层状结构

对于下三层,我们知道操作系统通过先描述,再组织,将底层的硬件管理好。我们知道,操作系统给用户提供了良好的使用环境,那么用户是谁呢,又如何提供良好的环境呢?

广义上:用户包括所有使用计算机的人,

狭义上:用户是开发者(这里我们用户默认为开发者)。

在技术层面上,操作系统是可以实现,用户直接使用操作系统提供的各种功能的,但是因为不能确保群众中有没有坏人,因此操作系统是不完全信任用户的,用户不能直接使用操作系统,但是操作系统由不得不为用户提供服务。

因此,为了确保安全,操作系统会把各个功能,封装成一个一个的系统调用函数,用户只能通过系统调用函数,来获取操作系统的数据,因为系统调用函数是操作系统实现的,因此用户只能获得有限的数据,有效的防止群众中的坏人进行破坏。

一般用户想访问操作系统数据或者硬件,必须通过系统调用。

由于系统调用函数使用起来比较麻烦

站在用户的角度,创造了外壳程序(shell,图形化界面),让用户使用一些简单的指令就可以调用系统调用函数。

站在开发者的角度,是可以直接调用系统接口的,但是为了一些小白考虑,将一些系统接口封装成了各种各样的函数,打包形成库,方便了所有开发者使用,不用自己去写,而是直接调用库函数,提高了开发效率,降低开发成本。

库函数于系统调用函数是什么关系?

上下层(库函数里面封装了系统调用函数)。

因此:

广义上的操作系统:包括操作系统,shell(外壳程序),语言库,系统调用

狭义的操作系统:操作系统(以为就是我们平时所说的Linux内核)

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

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

相关文章

https网站连接图标四种状态(安全、没有完全安全、过期和危险)

浏览 Web 时,地址栏中会显示一个图标,指示与要访问的网站的连接的安全性。 此图标可帮助您确定是否可以安全发送和接收网站的信息。 连接会告知发送到站点和从站点发送的信息(如密码、地址或信用卡)是否安全发送,且无法…

AI日报:人工智能与新材料的发现

文章目录 总览人工智能正在革命性地发现新的或更强的材料,这将改变制造业。更坚韧的合金问题研究解决方案 新材料人工智能存在的挑战方法探索 日本的研究人员正在使用人工智能制造更强的金属合金或发现新材料,并彻底改变制造过程 总览 日本的研究人员开…

什么是主动学习(Active Learning)?定义,原理,以及主要方法

数据是训练任何机器学习模型的关键。但是,对于研究人工智能的企业和团队而言,数据仍是实现成功的最大障碍之一。首先,您需要大量数据来创建高性能模型。更重要的是,您需要标注准确的数据。虽然许多团队一开始都是手动标注数据集&a…

Windows mysql5.7 执行查询/开启/测试binlog---简易记录

前言:基于虚拟机mysql版本为5.7,增量备份测试那就要用到binlog… 简述:二进制日志(binnary log)以事件形式记录了对MySQL数据库执行更改的所有操作。 binlog是记录所有数据库表结构变更(例如CREATE、ALTER…

工业元宇宙与数字孪生的爱恨情仇

尽管许多技术专家还在思考元宇宙虚拟世界将如何影响企业和消费者,但工业元宇宙虚拟世界已经开始革新人们在设计、制造和与各行业物理实体互动方面的方式。 元宇宙与数字孪生 简单来说,数字孪生是产品或流程的虚拟副本,可以预测物理实体在整…

保护您的数据,SMART Utility for Mac硬盘检测助您一臂之力!

在现代社会中,我们的生活离不开电脑和存储设备。然而,硬盘故障可能会带来严重的数据丢失和系统崩溃。为了保护您的数据安全,我们推荐您使用SMART Utility for Mac,这是一款专为Mac用户设计的硬盘检测工具。 SMART Utility for Ma…

web Speech Synthesis 文字语音播报,Audio 播放base64提示音

SpeechSynthesisUtterance基本介绍 SpeechSynthesisUtterance是HTML5中新增的API,用于将指定文字合成为对应的语音.也包含一些配置项,指定如何去阅读(语言,音量,音调)等 SpeechSynthesisUtterance基本属性 SpeechSynthesisUtterance.lang 获取并设置话语的语言SpeechSynthesisU…

面向 SEO 专业人士的完整 Google Search Console 指南

了解 Google Search Console 并释放其功能,以改善您的网站运行状况和搜索性能。 Google Search Console 提供监控网站在搜索中的表现和提高搜索排名所需的数据,这些信息只能通过 Search Console 获得。 这使得它对于热衷于最大化成功的在线业务和出版商…

C++ 教程 - 02 复合数据类型

文章目录 数组vector字符串输入输出结构体枚举指针引用综合案例 数组 相同类型的数据的集合{ },通过索引访问元素;在内存中连续存储,属于顺序表;插入、删除时间复杂度 O ( n ) O(n) O(n),访问复杂度 O ( 1 ) O(1) O(1…

用到了C语言的函数指针功能。

请选择一个功能&#xff1a; 1. 加法 2. 减法 3. 乘法 4. 除法 5. 取模 6. 阶乘 7. 判断素数 8. 球体体积 9. 斐波那契数列 10. 幂运算 11. 最大公约数 12. 最小公倍数 13. 交换数字 14. 排序 15. 退出 请选择一个选项&#xff1a; #include <stdio.h> #include <stdl…

48.0/图片和多媒体文件的使用(详细版)

目录 48.1 网页中插入图片 48.1.1 基本语法 48.1.2 常见属性 48.2 图片超链接 48.3 设置图片热区链接 48.4 将图片作为网页背景 48.5 滚动字幕 48.6 插入多媒体文件 48.1 网页中插入图片 48.1.1 基本语法 <img src=“图片地址”> img 标记用于将图像插入到 HTML…

【Java 基础】32 定时调度

文章目录 Timer 类创建 Timer注意事项 ScheduledExecutorService 接口创建 ScheduledExecutorService注意事项 选择合适的定时调度方式Timer 的适用场景ScheduledExecutorService 的适用场景 总结 在软件开发中&#xff0c;定时任务是一种常见的需求&#xff0c;用于周期性地执…

Linux 中的 container_of 原理

源码基于&#xff1a;Linux 5.10 0.前言 container_of() 这个宏函数在Linux 内核中使用的频率还是很多的。网上关于 container_of 使用的优秀文章也很多&#xff0c;之所以笔者也写一篇&#xff0c;一是想更新下最新代码中的使用&#xff0c;二是融入些自己的拙见&#xff0c;…

CESM笔记——component活动状态+compset前缀解析+B1850,BHIST区别

时隔一年没写CSDN笔记了&#xff0c;一些CESM的知识点我都快忘了。诶&#xff0c;主要是在国外办公室的网屏蔽了好多国内的网络&#xff0c;CSDN登不上&#xff0c;回家又不想干活。。。好吧&#xff0c;好多借口。。。 昨天师弟问我一些问题&#xff0c;想想要不可以水一篇小…

python安装步骤

1.1 python下载地址 python官网 1.2 详细安装步骤 1.2.1 双击安装包打开&#xff0c;勾选最下边两个方框&#xff0c;然后选择自定义安装&#xff0c;如下图。 1.2.2 这一页默认是全部勾选上的&#xff0c;点击下一步。 1.2.3 修改安装路径&#xff0c;默认是C盘&#xff0c…

【Git 小妙招】走进 Git 的分支管理(万字图文讲解)

文章目录 前言1. 理解分支2. 创建分支3. 切换分支4. 合并分支5. 删除分支6. 合并冲突7. 分支管理策略7.1 一个简单的分支策略(仅参考) 8. bug 分支9. 删除临时分支总结 前言 本文开始介绍 Git 的杀手级功能之⼀&#xff1a;分⽀。本文涉及分⽀创建&#xff0c;切换&#xff0c…

16:00的面试,16:07就出来了,问的问题过于变态了。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到六月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40…

园区网络虚拟化应该这样建

下午好&#xff0c;我的网工朋友。 今天和你聊聊怎么建立园区网络虚拟化。 区别于传统园区关注独立的单台设备&#xff0c;虚拟化网络关注全网的整体业务体验&#xff0c;通过iMaster NCE-Campus和VXLAN技术&#xff0c;实现网络资源能够任意灵活调度。 通过虚拟化技术&…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(1.结构与源码概述)

在文章【Redis】不卡壳的 Redis 学习之路&#xff1a;从十大数据类型开始入手中我们介绍了Redis常用的10大数据类型&#xff0c;这10大数据类型可并不是直接在底层通过代码实现的&#xff0c;而是通过不同的底层数据结构组合起来的&#xff0c;这篇我们介绍下Redis常用数据类型…

CSAPP——linux下的 status 函数及进程退出/进程回收详解

status函数是一个系统调用&#xff0c;用于获取子进程的退出状态。它通常在父进程中使用&#xff0c;以便检查子进程是否正常退出或出现错误。 status函数的原型如下&#xff1a; int waitpid(pid_t pid, int *status, int options); pid参数指定要等待的子进程的进程ID stat…