当前位置: 首页 > news >正文

Linux:操作系统简介

前言:

        在本片文章,小编将带大家理解冯诺依曼体系以及简单理解操作喜欢,并且本篇文章将围绕什么以及为什么两个话题进行展开说明。

冯诺依曼体系:

        是什么:

                冯诺依曼体系(Von Neumann architecture)是一种计算机体系结构模型,由数学家约翰·冯·诺依曼提出。该模型是现代计算机设计的基础。

        在理解冯诺依曼前,我们先认识一下上图冯诺依曼体系的结构分别是什么。

        输入设备:

                键盘,鼠标,网卡,磁盘,摄像头....

        输出设备:

                显示器,磁盘,打印机...

        CPU:

                首先CPU=运算器+控制器。CPU简而言之就是对数据进行计算控制等操作的设备。而CPU的获取、写入数据等操作必须依赖于存储器。

        存储器:

                存储器就是内存。

        为什么:

                一个软件运行的时候,是需要先将软件加载到内存的。为什么呢?因为体系结构规定。而在运行之前,我们的软件是存储在磁盘的。

                当我们点击一个程序比如qq,首先qq在磁盘中,需要将qq文件拷贝到内存,再通过CPU对qq执行代码来访问我们的数据,接着再拷贝输出到我们的显示器上。 

                由此我们可以得出结论,数据的输出本质是从一个设备 "拷贝" 到另一个设备上,而拷贝的效率是由设备进行决定。并且CPU在数据层面上之和内存打交道,而外设只和内存打交道。

                而这时候可能有同学问那么我们是否可以不要存储器,只需要CPU进行运算,这样效率是不是会快很多。

                答案是可以的,但这样效率其实也快不了多少,并且造价会非常高。输入设备以及输出设备的拷贝速率是毫秒级别,而cpu的拷贝速率是微秒级别。参考上图,我们知道越靠近cpu计算速度越快,但存储容量更小而且更贵。而越远离cpu计算速度就越慢,存储空间就越大,价格就耕地。

        这里会提到一个木桶原理

        一个木桶所能存储的容量,不是由最高的那个木板决定,而是由最低的那个木板决定。

        那么在冯诺依曼体系中也是如此,如果不要存储器,效率也不会提高多少,因为在你拷贝数据的时候CPU就在处理了,而可能CPU都将现有的数据处理完成后,你输入设备都还没拷贝完,CPU还得在那么等着数据流入。

        有了内存,那么文件中的数据就可以提前先存储到内存,再由cpu进行处理。

        所以当代计算机其实是性价比的产物。虽然冯诺依曼体系看着简单,但是其意义是非常重大的,这会让计算机的价格更加亲民,也就有更多的网民。才会大大推动互联网的发展以及创新。

简单理解操作系统:

        是什么:

                操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的系统软件,它为计算机上的各种应用程序提供支持和服务。

                操作系统包括:内核(进程/线程/任务管理,文件管理,以及内存管理等等)与其他程序(函数库,shell程序等)。

                就比如我们以前经常听说,安卓的底层用的就是Linux,那么其实意思是安卓系统的内核用的是Linux的内核。只是在外壳上做了相关的改变。

        为什么:

                

         上图简单展示了计算机系统从用户操作到硬件控制的整个流程,每个层次都有其特定的功能和责任,共同协作以实现系统的正常运行。

        假设我在编写代码,正在输出一个print函数,那么这个print函数是怎么调用的呢?

        首先print函数是C语言的库函数,我们会先进入到用户操作接口层,去调用print函数,接着print函数里面封装了系统调用函数接口(write),而write就会调用操作系统的驱动管理,在通过分类去找是显示器的驱动,接着由驱动去调用硬件显示器去写入我们需要向显示器写入的语句。

        print的本质就是将数据写入到硬件,显示器中。

        那么通过上图以及例子我们可以得出一些结论:

                1.软硬件体系结构采用层状结构,这体现了计算机系统具有高内聚、低耦合的特性。这样大大提高了操作系统的健壮性以及可维护性。

                高内聚指的是同一层内部的功能高度相关,层内的组件紧密协作,彼此之间的依赖性强,从而提高了每一层的独立性和功能专注性。

                低耦合则意味着各层之间的依赖性较弱。每一层通过标准化的接口与其他层进行交互,而不直接依赖于其他层的具体实现。

                  2.访问操作系统必须使用系统调用,而系统调用其实就是函数,基本上是用C语言封装的。而不让用户直接访问操作系统,也是为了确保系统数据以及自身的安全性。比起用户,操作系统更相信自己。

                3.我们的程序只要你判断出它访问了硬件,比如print,那么它就必须贯穿整个操作系统。        

                4.设计操作系统的目的,对上层,为用户或程序,提高良好的执行环境。对下层,与硬件交互,管理所有软硬件。

        再次重谈是什么:

                在整个计算机结构体系中,操作系统的定位:就是做管理。对于一件事情的管理,我们又分为决策以及执行。比如我要吃饭,这是决策。我正在吃饭,这是执行。

                理解管理:

                        

         现在将场景切换到校园,我们假设操作系统是校长,驱动程序是辅导员,硬件是学生。

        校长对学生做管理,需不需要校长与学生进行见面?如果需要见面那学生有几千几万个的时候等校长见完所有学生都猴年马月了。所以管理者和被管理者见面不是必要条件。

        那么校长与学生不见面应该如何管理?其实是根据"数据"进行管理。我们学生都有学号,身高,体重,成绩等信息,都拥有共同条件,只是数据不同,那么在系统中,我们将这些数据想要进行整合应该怎么整合?答案是struct(结构体).

        此时每一个学生都是一个节点,而学生节点中有next指针指向下一个学生(节点),那么此时就将对学生的管理转化成对链表的管理。

        如果需要筛选出排名前10名的学生,就通过算法进行获取,而如果要劝退一名成绩最差的学生,就将尾节点进行删除,刚开学要录入新生信息就新增节点。所以,校长对学生的管理工作本质上就转化为对链表的增删查改。而这中间做的工作,比如什么提交信息,获取信息,就是驱动程序做的工作。

                                                                                                

                                                                        那么本篇文章到这里就结束了,感谢各位观看!!!

相关文章:

Linux:操作系统简介

前言: 在本片文章,小编将带大家理解冯诺依曼体系以及简单理解操作喜欢,并且本篇文章将围绕什么以及为什么两个话题进行展开说明。 冯诺依曼体系: 是什么: 冯诺依曼体系(Von Neumann architecture&#xff…...

企业级信息系统开发讲课笔记4.12 Spring Boot默认缓存管理

文章目录 1. Spring Boot默认缓存管理2. Spring的缓存机制2.1 缓存机制概述2.2 缓存接口和缓存管理接口3. 声明式缓存注解3.1 @EnableCaching注解3.2 @Cacheable注解3.2.1 value/cacheNames属性3.2.2 key属性3.2.3 keyGenerator属性3.2.4 cacheManager/cacheResolver属性3.2.5 …...

2025制定一个高级java开发路线:分布式系统、多线程编程、高并发经验

1-熟悉分布式系统的设计和应用,熟悉分布式、缓存、消息、负载均衡等机制和实现者优先。 2-熟悉多线程编程,具备高并发经验优先。 技术学习规划:熟悉分布式系统和高并发技术 以下是针对目标要求的系统性学习规划,分为 阶段目标 和…...

20250110_ PyTorch中的张量操作

文章目录 前言1、torch.cat 函数2、索引、维度扩展和张量的广播3、切片操作3.1、 encoded_first_node3.2、probs 4、长难代码分析4.1、selected4.1.1、multinomial(1)工作原理: 总结 前言 1、torch.cat 函数 torch.cat 函数将两个张量拼接起来,具体地是…...

hadoop-yarn常用命令

一、YARN命令介绍 1. YARN命令简介 YARN提供了一组命令行工具,用于管理和监控YARN应用程序和集群。 2. yarn application命令 (1) yarn application命令的基本语法 yarn application命令的基本语法如下: yarn application [genericOptions] [comma…...

LabVIEW滤波器功能

程序通过LabVIEW生成一个带噪声的正弦波信号,并利用滤波器对其进行信号提取。具体来说,它生成一个正弦波信号,叠加高频噪声后形成带噪信号,再通过低通滤波器滤除噪声,提取原始正弦波信号。整个过程展示了信号生成、噪声…...

【Unity3D日常开发】Unity3D中打开Window文件对话框打开文件(PC版)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群:398291828小红书小破站 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 这篇文章继续讲如何使用Unity3D打开Window文…...

ros2笔记-6.2 使用urdf创建机器人模型

本节主要跟着小鱼老师的视频操作,不同的仿真平台有不同的建模语言,但是几乎都支持URDF。 本节使用URDF创建一个机器人模型。 6.2.1 帮机器人创建一个身体 URDF使用XML来描述机器人的结构和传感器、执行器等信息。 在chapt6/chap6_ws/src创建功能包:r…...

【centos】校时服务创建-频率修改

在 NTP 配置中,校时频率通常是由 NTP 协议自动管理的,NTP 会根据网络延迟和时间偏差动态调整校时频率。不过,您可以通过配置文件中的一些参数来影响 NTP 的行为。 如果想要更改 NTP 的校时频率,可以考虑以下几个方面:…...

J.U.C(1)

目录 JUC(一)一:AQS二:reentrantlock原理1:加锁:2:解锁3:可重入锁原理4:可打断原理5:公平锁原理6:条件变量 三:读写锁(ree…...

计算机网络之---静态路由与动态路由

静态路由 静态路由是由网络管理员手动配置并固定的路由方式。路由器通过静态配置的路由条目来转发数据包,而不会自动调整。它不依赖于任何路由协议。 特点: 手动配置:网络管理员需要手动在路由器中配置每条静态路由。不自动更新:…...

Kubernetes1.28 编译 kubeadm修改证书有效期到 100年.并更新k8s集群证书

文章目录 前言一、资源准备1. 下载对应源码2.安装编译工具3.安装并设置golang 二、修改证书有效期1.修改证书有效期2.修改 CA 证书有效期 三、编译kubeadm四、使用新kubeadm方式1.当部署新集群时,使用该kubeadm进行初始化2.替换现有集群kubeadm操作 前言 kubeadm 默认证书为一…...

C++----STL(string)

引言:STL简介 什么是STL STL(standard template libaray-标准模板库): 是 C标准库的重要组成部分(注意:STL只是C标准库里的一部分,cin和cout也是属于C标准库的),不仅是一个可复用的组件库&…...

利用 Java 爬虫从 yiwugo 根据 ID 获取商品详情

在当今数字化时代,数据是商业决策的关键。对于从事国际贸易的商家来说,精准获取商品的详细信息至关重要。yiwugo 是一个知名的国际贸易平台,拥有海量的商品数据。通过 Java 爬虫技术,我们可以高效地从 yiwugo 根据商品 ID 获取详细…...

vue2修改表单只提交被修改的数据的字段传给后端接口

效果: 步骤一、 vue2修改表单提交的时候,只将修改的数据的字段传给后端接口,没有修改得数据不传参给接口。 在 data 对象中添加一个新的属性,用于存储初始表单数据的副本,与当前表单数据进行比较,找出哪些…...

Flink类加载机制详解

1. 总览 在运行Flink应用时,它会加载各种类,另外我们用户代码也会引入依赖,由于他们依赖版本以及加载顺序等不同,就可能会导致冲突,所以很要必要了解Flink是如何加载类的。 根据加载的来源的不同,我们可以将类分为三种: Java Classpath:Java类路径下,这是Java通用的…...

ClickHouse大数据准实时更新

一、问题背景 最近有一个项目需求,需要对日活跃的3万辆车的定位数据进行分析,并支持查询和统计分析结果。每辆车每天产生1条分析结果数据,要求能够查询过去一年内的所有分析结果。因此,每月需要处理约90万条记录,一年大…...

计算机网络之---端口与套接字

总括 端口:是计算机上用于标识网络服务的数字标识符,用于区分不同的服务或应用程序。套接字:是操作系统提供的用于进程间网络通信的编程接口,允许程序通过它来进行数据的发送、接收和连接管理。关系:端口号用于标识服…...

UE5中制作地形材质

在创作大场景内容时,地形的设计和优化是至关重要的一步。利用UE中的地形系统,开发者能够高效地创建复杂的地形形态,同时保持游戏的性能和视觉效果。 1.在创建地形之前,先新建一个地形使用的混合材质球,添加节点Landsc…...

【Docker】docker compose 安装 Redis Stack

注:整理不易,请不要吝啬你的赞和收藏。 前文 Redis Stack 什么是? 简单来说,Redis Stack 是增强版的 Redis ,它在传统的 Redis 数据库基础上增加了一些高级功能和模块,以支持更多的使用场景和需求。Redis…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率&#xff0c…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...