Linux:深入理解冯诺依曼结构与操作系统

目录

1. 冯诺依曼体系结构

1.1 结构分析

1.2 存储结构分布图

2. 操作系统

2.1 概念

2.2 如何管理

2.3 什么是系统调用和库函数


1. 冯诺依曼体系结构

1.1 结构分析

不管是何种计算机,如个人笔记本电脑,服务器,都是遵循冯诺依曼结构。

 计算机中都是又一个个硬件组件组成。

  • 输入单元:包括键盘、鼠标、扫描仪
  • 中央处理器(CPU):含有运算器和控制器等
  • 输出单元:显示器、打印机等

不过需要注意的是:

  • 这里的存储器指的是内存。
  • 外设一般指的是输入设备和输出设备。
  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设。
  • 外设要输入或者输出数据,也只能写入内存或者从内存中读取。

也就是说,所有设备都只能直接和内存进行写入写出操作

1.2 存储结构分布图

由最高层到最底层的存储设备,容量越大,读写速度越慢,成本更低

  • Register:寄存器。
  • L1/L2/L3 Cache:一级/二级/三级/高速缓冲存储器。
  • Memory:内存。
  • SSD:固态硬盘。
  • HDD:机械硬盘。
  • 还有一些远程网络服务器上的存储。

冯·诺依曼体系结构无疑是一个划时代的伟大发明。尽管高级存储器,如寄存器和缓存,拥有极其迅速的数据读写能力,但它们的容量有限,且成本高昂。若将它们作为电脑的主要存储介质,其昂贵的造价无疑超出了普通消费者的承受范围。另一方面,固态硬盘和机械硬盘虽然提供了较大的存储空间且价格亲民,但其相对较慢的数据读写速度却难以满足高性能计算的需求。

内存,作为一种折中的解决方案,其容量相较于高级存储器更大,而访问速度又远超硬盘。因此,内存扮演了至关重要的角色,它如同桥梁一般,将高速的高级存储器与读写速度较慢的外设连接起来。这样的设计不仅平衡了数据读写速度,还将成本控制在了一个大众能够接受的范围内。这一创新使得个人电脑得以普及,推动了计算机行业的飞速发展。

2. 操作系统

2.1 概念

操作系统Operating System,简称OS)是管理计算机硬件与软件资源系统软件。它与硬件交互,执行管理任务。常见的操作系统有Windows、macOS、Linux、Harmony OS和Android。

笼统的讲,操作系统包含:

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

2.2 如何管理

那操作系统是如何进行管理的呢?我们来做一个类比。

在一家公司中,当员工数量较少时,可以直接对每位员工进行监督和管理。然而,随着公司规模的扩大,员工数量达到数百甚至上千,直接管理每位员工变得不再可行。此时,公司通常会采用分层管理的策略。

公司将根据业务需求划分为不同的部门,并为每个部门指派一位经理。在部门内部,经理会将员工分成若干个工作小组,每个小组由一名组长领导。如此一来,公司的高层只需管理几位部门经理,而每位经理则负责监督几个小组组长。小组组长则负责管理和协调组内成员的具体工作。通过这种层级化的管理结构,公司能够确保组织的高效运转和目标的达成。

 在下面的操作系统调用示例图中,用户发出任何指令,操作系统进行辨别,再调用硬件运行程序。这就类似我们上面的例子。

若作为公司高层,我们想查看新员工实际情况,不可能找新员工一个个询问。可以给每个员工做一份档案,里面包含姓名、年龄、工号、工种、学历和面试表现等。再让每个经理去采集各自员工的信息,从而建立员工档案。但是员工太多,我们看不完员工档案内容。

此时,假设我们作为程序员,我们只关心员工的属性,那么可以将员工抽象为一个结构体类型或者类,里面包含姓名、年龄、工号等属性。

 如下,在C语言中,使用结构体表示员工数据结构,里面包含许多员工属性。每增加一个员工,就要创建一个Employee类对象。仅仅这样的话,每个对象都是独立的不好管理,那么可以在结构体中加上指向下个对象的指针,这就构成了一个单链表。

如果公司需要接受某个项目,需要有相关技能的员工,就可以遍历整个链表,找出符合要求的员工,再指派其对应的经理安排工作。未来高层对员工的管理,变成对一个单链表进行增删查改操作。我们完成了一个对于公司员工管理工作的计算机层面的建模工作

 

那么操作系统是如何管理硬件的呢?

  • 虽然硬件有许多种,如硬盘和网卡,但是这些设备的属性都是相同的,有设备名,设备状态和设备编号等。我们可以创建一个device结构体类型,并使用链表数据结构(或者其他数据结构)组织起来许多device类对象。
  • 操作系统接收到用户的指令,通过数据结构管理,发送给驱动程序,驱动硬件运行。
  • 这种管理方法是先描述,再组织,即先将管理对象构建成一个类,再使用某个数据结构进行组织。任何计算机对象,管理的思路都遵守该原则

再引申出一个问题,为什么现在所有主流的面向对象语言,都要提供面向对象和标准库?其中包括C++的STL库

  • 因为在面向对象语言中,一切被管理的食物皆为对象,面向对象就提供描述的能力。标准库就提供数据结构组织该对象。

2.3 什么是系统调用和库函数

在上图中展示的系统中,硬件资源的调度是通过驱动程序来实现的。操作系统扮演着中介的角色,接收用户的指令,并通过调用相应设备的类对象来激活驱动程序。用户无法直接与操作系统交互,而是需要通过用户操作接口和系统调用(system call)来传达其请求。系统调用充当了用户与操作系统之间的桥梁。那么,为什么不允许用户直接调用操作系统呢?我们做个类比。

银行不仅仅拥有设备、桌椅板凳和仓库等硬件资源,更重要的是,它还需要工作人员进行管理和维护人员进行定期检修。银行的日常运营包括提供存取款和贷款服务,从这个角度来看,银行可以被视作一套完整的系统

假设小明来到银行,想要存入几百元现金。如果他直接将现金放入仓库,并自行在设备上登记存款信息,这显然是银行行长不可接受的。尽管大部分客户都是诚信的,但银行不能排除有人可能不遵守规则,从而对银行财产造成损失。因此,银行会设立对外开放的窗口,专门提供存取款服务。

那么我们可以将操作系统类比于银行,因为用户可能做些损害操作系统的操作,操作系统也不相信用户。

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


创作充满挑战,但若我的文章能为你带来一丝启发或帮助,那便是我最大的荣幸。如果你喜欢这篇文章,请不吝点赞、评论和分享,你的支持是我继续创作的最大动力!

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

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

相关文章

基于Springboot的在线订餐系统设计与实现(论文+源码)_kaic

摘 要 当今世界,互联网以及和互联网有关的行业都在不断的发展,也在持续走进人们的生活,在此趋势下人们对于通过互联网解决生活问题的需求愈来愈多,本文考虑到了这些情况后做出了该订餐系统。 本系统选择了MySQL作为主要存储单元…

深入探讨Windows 11专业版与Windows 11专业工作站版的差异

前言 深入探讨Windows 11专业版与Windows 11专业工作站版的差异,可以更全面地理解这两款操作系统版本面向的不同用户群体、硬件支持、性能特点以及应用场景,从而为专业用户和企业选择最合适的平台提供依据。 硬件支持与扩展能力 Windows 11专业版&…

Apache OFBiz SSRF漏洞CVE-2024-45507分析

Apache OFBiz介绍 Apache OFBiz 是一个功能丰富的开源电子商务平台,包含完整的商业解决方案,适用于多种行业。它提供了一套全面的服务,包括客户关系管理(CRM)、企业资源规划(ERP)、订单管理、产…

记录一次学习--委派攻击学习

目录 为什么要使用委派 什么账号可以使用委派 非约束性委派 这里有一张图 利用 流程 约束性委派 这里有一张图 如何利用 条件 具体流程 为什么要使用委派 这个是因为可能A服务需要B服务的支持,但是A服务的权限不可以使用B服务。然后这时就可以让域用户将…

OpenStack Yoga版安装笔记(十四)启动一个实例

1、官方文档 OpenStack Installation Guidehttps://docs.openstack.org/install-guide/ 本次安装是在Ubuntu 22.04上进行,基本按照OpenStack Installation Guide顺序执行,主要内容包括: 环境安装 (已完成)OpenStack…

OpenCV计算机视觉库

计算机视觉和图像处理 Tensorflow入门深度神经网络图像分类目标检测图像分割OpenCVPytorchNLP自然语言处理 OpenCV 一、OpenCV简介1.1 简介1.2 OpenCV部署1.3 OpenCV模块 二、OpenCV基本操作2.1 图像的基本操作2.1.1 图像的IO操作2.1.2 绘制几何图像2.1.3 获取并修改图像的像素…

无人机电力巡检:点亮电力巡检新视野!

一、无人机电力巡查的优势 提高巡检效率:无人机可以搭载高清摄像头、红外热像仪等先进设备,实时拍摄和传输图像,帮助巡检人员快速发现潜在问题,如电线破损、绝缘子污损、设备过热等,从而大大缩短了巡检周期。 降低人…

python-斐波那契词序列/最大回文乘积/求最大最小k个元素

一:斐波那契词序列题目描述 编写一个程序,生成斐波那契词序列的前n个元素。 斐波那契词序列是一个词序列,其中每个词是通过连接前两个词形成的。 它以斐波那契序列命名,因为它是以类似的方式创建的,但是我们不是加数字&#xff0c…

《OpenCV》—— 指纹验证

用两张指纹图片中的其中一张对其验证 完整代码 import cv2def cv_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)def verification(src, model):sift cv2.SIFT_create()kp1, des1 sift.detectAndCompute(src, None)kp2, des2 sift.detectAndCompute(model, None)fl…

以太网交换安全:MAC地址表安全

一、MAC地址表安全 MAC地址表安全是网络安全中的一个重要方面,它涉及到网络设备的MAC地址表的管理和保护。以下是对MAC地址表安全的详细介绍: (1)基本概念 定义:MAC地址表是网络设备(如交换机&#xff0…

【Linux进程间通信】Linux匿名管道详解:构建进程间通信的隐形桥梁

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:Linux “ 登神长阶 ” 🌹🌹期待您的关注 🌹🌹 ❀Linux进程间通信 📒1. 进程间通信介绍📚2. 什么是管道📜3…

unity 默认渲染管线材质球的材质通道,材质球的材质通道

标准渲染管线——材质球的材质通道 文档,与内容无关,是介绍材质球的属性的。 https://docs.unity3d.com/2022.1/Documentation/Manual/StandardShaderMaterialParameters.html游戏资源中常见的贴图类型 https://zhuanlan.zhihu.com/p/260973533 十大贴图…

最新版ChatGPT对话系统源码 Chat Nio系统源码

介绍: 最新版ChatGPT对话系统源码 Chat Nio系统源码 支持 Vision 模型, 同时支持 直接上传图片 和 输入图片直链或 Base64 图片 功能 (如 GPT-4 Vision Preview, Gemini Pro Vision 等模型) 支持 DALL-E 模型绘图 支持 Midjourney / Niji 模型的 Imagine / Upsc…

OpenSource - 开源WAF_SamWaf

文章目录 PreSafeLine VS SamWaf开发初衷软件介绍架构界面主要功能 使用说明下载最新版本快速启动WindowsLinuxDocker 启动访问升级指南自动升级手动升级 在线文档 代码相关代码托管介绍和编译已测试支持的平台测试效果 安全策略问题反馈许可证书贡献代码 Pre Nginx - 集成Mod…

单调队列应用介绍

单调队列应用介绍 定义应用场景实现模板具体示例滑动窗口最大值问题描述问题分析代码实现带限制的子序列和问题描述问题分析代码实现跳跃游戏问题描述问题分析代码实现定义 队列(Queue)是另一种操作受限的线性表,只允许元素从队列的一端进,另一端出,具有先进先出(FIFO)的特…

关于HTML 案例_个人简历展示01

案例效果展示 代码 <!DOCTYPE html> <lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>个人简历信息</title> </he…

MySQL 中的 LAST_INSERT_ID()函数详解

在 MySQL 数据库中&#xff0c;LAST_INSERT_ID()是一个非常有用的函数。它可以帮助我们获取最近一次插入操作所生成的自增 ID 值。本文将详细解释 MySQL 中的LAST_INSERT_ID()函数及其用途。 一、函数介绍 LAST_INSERT_ID()是 MySQL 中的一个内置函数&#xff0c;它返回最近一…

通过栈实现字符串中查找是否有指定字符串的存在

题目示例&#xff1a; 分析 由与没有给出字符串的长度&#xff0c;所以只能通过getline一次性处理&#xff0c;而在输入后恰好能倒序处理字符串&#xff0c;以标点符号为分界点&#xff0c;将数字当成字符放到栈里&#xff0c;遇到下一个标点符号时执行查找操作&#xff0c;…

关于Mybatis框架操作时注意的细节,常见的错误!(博主亲生体会的细节!)

目录 1.在对DB进行CRUD时&#xff0c;除了查&#xff0c;其余的操作都要进行事务的提交否则不成功。 2.用sqlSession原生方法时&#xff0c;第一个参数方法名&#xff0c;是xml文件中定义的id名&#xff0c;底层找的是你这个接口所定义的方法名。 3.以包为单位引入映射文件 …

Vue项目开发注意事项

事项一&#xff1a;项目代码放在本地怎么运行起来 1、首先确定项目对应的node和npm版本 node下载地址 Index of /dist/https://nodejs.org/dist/ node 与 npm版本对应关系 Node.js — Node.js Releases 2、node卸载的时候&#xff0c;会自动把对应的npm卸载掉 情况1&…