<Linux>冯诺依曼体系结构||操作系统||系统调用于用户操作接口

news2024/12/26 16:08:27

前言:本文从软硬件角度计算机解释软硬件结构
硬件—冯诺依曼体系结构
软件—操作系统

文章目录

  • 冯·诺依曼计算机体系结构
    • 背景
    • 理解
    • 举例
  • 操作系统(OS)
    • OS的管理
    • 为什么要有操作系统?
  • 系统调用与用户操作接口
    • 系统调用
    • 用户操作接口
      • 引入:printf&&scanf的重新理解
      • 库函数
  • 计算机体系结构

冯·诺依曼计算机体系结构

背景

什么可以称为计算机呢?

百度百科:image-20231128111140923

计算机应该满足的功能:

  1. 可进行计算(数字计算&&逻辑计算)
  2. 具有存储记忆功能

人类历史上第一台计算机由约翰·冯·诺依曼(后面称为冯·诺伊曼)创造,冯·诺依曼提出了计算机制造的三个基本原则

  • 采用二进制逻辑
  • 程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。
img

冯殿诺依曼体系结构在硬件上规定了计算机底层结构离不开输入设备,输出设备,存储器,中央处理器.

输入设备:键盘,磁盘,话筒等
输出设备:显示器,磁盘,扬声器等
存储器:特指内存,掉电易失,数据处理快
中央处理器(后面用CPU表示中央处理器):运算器+控制器

理解

  1. 为什么从输入设备获取的数据不能直接交给CPU处理,处理完的数据不能直接传输给输出设备,必须经过中间存储器呢?

    计算机的不同存储空间有着不同的存储效率和访问效率

    存储金字塔:img离CPU越近的存储器访问速度越快,单体容量小,成本高
    离CPU越远的存储器访问速度越慢,单体容量大,成本低

    如果输入输出设备直接和存储器进行数据传输,因为输入输出设备离CPU远,所以对数据处理速度低,但是CPU对数据的处理是非常快的,根据木桶原则,整个计算机处理数据的速度取决于效率低的输入输出设备,而不是CPU,同时更容易时CPU处于闲置状态.

    相反,如果让内存和输入输出设备交互,CPU只负责对内存中的数据进行处理并把数据返还给CPU,而内存堆数据处理速度远大于硬盘等输入输出设备,所以这样可以减少因木桶原理而减少的效率.

  2. 经过输入输出设备的数据通过存储器传是否可以加快计算机处理数据的速度呢?

    在CPU和输出输出设备间插入存储器,细心的朋友可以发现,在CPU-内存-输入输出三种设备中,对数据处理最慢的还是输入输出设备,木桶原则应该还存在,计算机整体效率仍然取决于输入输出设备,既然这样,引入内存不是多此一举吗?

    我们可以通过预先加载和缓存技术解决上述问题:
    **预先加载:**在CPU执行上一次指令时,提前将输入设备中的数据加载到内存里,当CPU执行完上次指令后,可以直接从内存中读取数据执行指令.
    **缓存:**CPU将处理完的数据写入到内存中,等计算机处于闲置状态时,再将内存中历史上保存的数据刷新到输出设备.
    通过预先加载和缓存技术可以让CPU只和内存交互,使计算机的效率取决于内存效率,提高计算机效率.

    ps:预先加载和缓存的工作由操作系统来完成,因此我们可以将硬件上的问题转化为软件上的问题(操作系统).

  3. 冯·诺依曼结构中引入内存的意义

    • 数据层面:通过将计算机效率取决于硬件拷贝数据的速度这种硬件层面的问题转换为操作系统预先加载和缓存这种软件层面的问题,进而提高计算机效率

    • 经济层面:内存的成本较为适中,所以在尽量不使用过高的成本提高计算机的效率.

      只有成本低了用的人才会多,互联网才会普及

解释:运行程序首先要将程序加载到内存中

根据冯·诺伊曼结构,CPU只能从内存中读取数据,而可执行程序的指令需由CPU来执行,因此必须将可执行程序从磁盘加载到内存中才能交给CPU执行

举例

请解释当我通过互联网像被人发送“在吗”时数据的流动

image-20231128181438375

总结:
冯·诺伊曼体系结构通过引入存储器让我们可以使用较低成本提高计算机的运行效率.
冯·诺伊曼体系结构将计算机效率取决于硬件转化为软件(操作系统)
数据传输时,外设和内存交互,内存和CPU交互.


操作系统(OS)

什么是操作系统?

image-20231129084426210

操作系统(后面称为OS)是一款对下层软硬件进行管理(手段),对上层用户提高稳定,安全,高效的运行环境(目的)的软件.

上面我们说过,程序运行时首先需要被加载到内存,而操作系统是一款软件,想要运行它也必须加载到内存中,而操作系统是用来对软件进行管理的,所以一定要先于所有软件加载到内存中.
所以操作系统是第一个被加载到内存的软件.

Linux是一款操作系统,Linux操作系统主要由以下两部分组成

  • Linux内核(kernal):是操作系统的核心,主要负责内存管理,进程管理,文件管理,驱动管理
  • 系统工具:用于管理系统和执行各种任务的软件,Shell(命令行解释器),文件管理器,编辑器,编译器等

OS的管理

操作系统负责对软硬件进行管理,那么什么是管理呢?
在这之前,我们需要知道软硬件层次结构
image-20231129151544646

  1. 管理者直接和被管理者不一定直接进行交互

    举个例子:你是一名学生,你们所做的工作全是由校长所规定的,但是你有经常和校长见面吗?并没有,校长只需要吩咐事项(做决策),剩下的交给辅导员(假设只有你 辅导员 校长三方)来监督你们完成,所以管理者和被管理者不一定需要直接交互.

  2. 管理的本质是对数据进行管理

    在你刚刚进入大学时,甚至连同学的名字都不知道,此时你已经被划分好在哪一个班,哪一个寝室了,你已经“被管理”起来了,但是管理者并没有见到你,只是投档时你的高中已经把你对应的档案袋交给了大学,校长已经拿到了你的档案袋,档案袋里面有你的各种信息,通过这些信息校长就可以将你分班,分寝…

    所以管理不需要知道你是谁,只需要拿到你所对应的数据.
    上面说过,管理者不会直接和被管理者进行交互,那么管理者如何拿到被管理者的数据呢?
    实际上管理者会通过执行者拿到数据,让执行者去和被管理者交互,例如辅导员就是一个执行者,辅导员通过和你交互得到你的绩点,综测排名…再上交给校长,校长通过这些数据对你的数据决定你是否可以评优评先…

    操作系统相当于管理者(校长):负责管理软(程序)硬(设备)件
    驱动程序相当于执行者(辅导员):驱动程序负责将与之对应的硬件操作打包,对操作系统提供操作硬件的接口
    底层硬件相当于学生(被管理者)

  3. 管理的方式—先描述,再组织

    当被管理者数量很大时,管理者所需要面对的数据量是非常大的,如何管理大量的数据呢?
    可以通过**“先描述,再组织”**的方式管理数据,先将学生对应的数据用一个结构(struct)表示,在通过某一种组织方式(顺序表,链表等数据结构)将多个结构组织起来形成一个学生信息管理系统,此时对学生的管理(增删查改)转化为对数据结构的管理(增删查改)

    回到操作系统:操作系统通过先描述,后组织的方式管理硬件.

    假设操作系统以链表的方式组织数据

    **描述:**Linux内核是C语言编写的,因此使用C语言的struct描述被管理者

    struct device
    {
    	char name[];//硬件名称
     	int states;//硬件当前的状态
     	...	//设备其他的属性
     	struct device* next;//保存写一个设备的地址
    }
    

    组织:

    image-20231129094131324

    以后当某一个设备出现故障,操作系统直接将链表中的该设备信息删除,也就是对链表的删除.

注意:先描述-再组织的管理方式会贯穿整个Linux学习周期,凡是涉及管理方式,均为“先描述-再组织.”

总结:操作系统对硬件管理的本质是对硬件所对应的数据进行管理,管的的方式是先描述-再组织

聊点别的:
数据结构这门学科本质上就是告诉我们将不同类型的数据如何组织起来更高效,C++STL库也提供了组织数据的方式,其实只要是面向对象语言,都应该提供类似STL的库,因为面向对象本质是描述数据,但是光有描述不足以管理数据,还需要通过一些方式将描述的数据组织起来,这样才可以通过这门语言更高的管理数据.

为什么要有操作系统?

如果没有操作系统,那么我们需要自己手动控制硬件(一只手打王者荣耀,一只手操控电路板(~真是一场酣畅淋漓的体验啊~).
操作系统的作用是

  • 对下层软硬件进行管理(手段)
  • 对上层用户提高稳定,安全,高效的运行环境(目的)

那么操作系统是如何提供稳定,安全,高效的运行环境呢?

操作系统只对用户提供特定的system call(系统调用接口)保证用户不会直接访问操作系统,用户只能通过system call执行系统层面的操作,例如像显示器输出字符串,因为system call涉及了系统层面的知识,所以有些用户使用起来有困难,若对外提供的用户操作接口封装了系统调用,那么用户只需要会使用用户操作接口即可完成系统层面的操作,例如C语言中的库函数pirntf就是一个用户操作接口,其中封装的system call可以像显示器打印字符串.

系统调用与用户操作接口

系统调用

为了不让操作系统中的所有数据暴露给用户,操作系统只对用户提供system call使用户完成需要的操作

例如你需要去银行取钱,若不考虑使用取款机,会有一个银行窗口将你“挡在外面”,你只能通过银行窗口取钱,对于操作系统来讲,system call就相当于一个银行窗口防止你直接访问操作系统.

image-20231129155156486 **系统调用在保证操作系统安全的情况下向用户程序提供了对底层硬件访问和执行系统级别任务的方法.**

因为Linux是用C语言写的,因此Linux的system call是使用C语言写函数的

既然用户必须通过system call才能访问操作系统,那么用户是否可以绕过操作系统直接访问硬件呢?

不可以,下面是不可以的原因

  1. 硬件复杂性:现代计算机系统的硬件通常非常复杂,直接访问硬件需要深入了解硬件体系结构和寄存器级别的编程
  2. 安全性:用户直接访问硬件可能导致系统容易受到恶意攻击,操作系统通过权限管理和隔离确保不同的应用程序只能访问其授权的数据
  3. 稳定性:操作系统负责处理硬件抽象和资源管理,以确保多个应用程序可以在同一台计算机上共存而不相互干扰。如果用户直接访问硬件,可能会导致资源冲突、竞争条件和系统崩溃。

注意:在嵌入式设备中可能可以直接对硬件进行操作

总结:任何人都不能直接访问操作系统,必须通过system call才能访问.
image-20231129161205517

用户操作接口

引入:printf&&scanf的重新理解

我们都知道printf是像显示器打印字符串,也就是说printf函数需要访问硬件,之前说过,用户程序想要访问硬件必须通过操作系统,而对操作系统的访问又离不开system call,所以printf函数底层一定是封装了可以让操作系统访问显示器的system call,同理,sacnf内会封装可以让操作系统读取键盘输入的system call.

库函数

既然printfscanf中封装了对应的system call,我为什么不直接调用system call像显示器打印/键盘读取,而是要绕一层调用printfscanf呢?

接着银行的例子,银行提供对应的窗口后,是不是所有人都会熟悉办理流程呢?当然不是~只有具备一定理解能力的人才能够顺利的办理业务,银行当然也知道这一点,因此他们又设立了一个服务层,不会使用银行窗口的人可以在服务层寻求帮助,通过服务层,不管你识不识字,你最后都可以取到钱.

system call是系统级别的接口,也就是说需要对操作系统有一定了解的人才会使用,而大多数用户并不了解操作系统,因此像用户提供类似于printfscanf级别的库函数,同样可以使用户完成对硬件资源的使用.

C标准库(libc)具有跨平台性的原因之一是因为C的库函数中调用的system call是由当前操作系统所决定的.例如Windows下printf函数封装的system call是代码A,Linux下printf函数封装的system call是代码B,但是C的库函数printf实现时并没有指定是使用代码A还是代码B,具体情况取决于当前操作系统,如果是Windows则使用代码A,如果是Linux则使用代码B

库函数是用户操作接口的一种,库函数可以调用system call
用户操作接口还有:

  1. Windows下的GUI(图形化界面):通过图标我们可以访问顶层硬件
  2. Linux下的Shell(命令行解释器):GUI能做的Shell也能做
  3. 部分指令:部分汇编指令可以访问底层硬件

image-20231129164256076

有了上述知识,我们就将计算体系结构搭建起来了

计算机体系结构

image-20231129164336374

一方面,操作系统通过“先描述,再组织”的方式对软硬件资源进行管理,保证底层硬件及驱动程序是被有序的组织起来,另一方面,为了降低用户使用成本,操作系统通过一系列的系统调用,用户操作接口对用户提供一个稳定,安全,高效的运行环境.


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

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

相关文章

力扣 41 42.接雨水问题详细讲解,保证看完必会接雨水问题!!!时间复杂度最优解 o(n)

首先来个开胃小菜,41.缺少最小整数(难度:困难)真实感觉像是个简单级别 41. 缺失的第一个正数 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额…

干货:机器学习之线性代码基础

资料地址:https://machine-learning-from-scratch.rea 线性代数 0. 要点汇总1. 向量 Vector 1.1 向量是什么1.2 向量的运算 1.2.1 向量的加法1.2.2 向量的数乘 2. 线性组合、张成的空间与基 Linear Combination, Span and Basis 2.1 运算封闭2.2 线性组合2.2 向量…

Android进阶之路 - TextView文本渐变

那天做需求的时候,遇到一个小功能,建立在前人栽树,后人乘凉的情况下,仅用片刻就写完了;说来惭愧,我以前并未写过文本渐变的需求,脑中也仅有一个shape渐变带来的大概思路,回头来看想着…

Proteus的网络标号与总线

Proteus为了减少过多、复杂的连线,可以使用网络标号与总线配合使用。 Proteus的导线上添加了网络标号,意味着在Proteus上相同的网络标号是连在一起的,所说在图纸上看不出来。 如下图是比较好的Proteus中使用总线的绘制的图纸。可以效仿着画…

【坤坤之夜 KUNKUNNIGHT】- 探索神秘世界,开启刺激冒险之旅!

你是否准备好迎接一个充满挑战和惊喜的单机游戏体验?坤坤之夜(KUNKUNNIGHT)将带你进入一个神秘而刺激的世界,让你尽情探索,解锁各种有趣的技能和道具,解决谜题,完成各种挑战。 坤坤之夜的游戏画…

CodeMeter软件保护及授权管理解决方案(二)

客户端管理工具 CodeMeter Runtime是CodeMeter解决方案中的重要组成部分,其为独立软件包,开发者需要把CodeMeter Runtime和加密后的软件一起发布。CodeMeter Runtim包括以下组件用于实现授权的使用: CodeMeter License Server授权服务器 Co…

我叫:基数排序【JAVA】

1.自我介绍 基数排序(radix sort)属于“分配式排序” (distribution sort),又称“桶子法” (bucket sort)或bin sort,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,是‘桶排序’的扩展 2.基本思想 将所有待比较数值统一为同样的数位长度,数位较短的数…

【图论】重庆大学图论与应用课程期末复习资料(私人复习资料)

考试章节范围 第一章:1.1、1.2、1.3 填空 顶点集和边集都有限的图,称为有限图只有一个顶点的图,称为平凡图边集为空的图,称为空图顶点数为n的图,称为n阶图连接两个相同顶点的边的条数称为边的重数;重数大…

荣耀冲击高端,一边推新「修路」,一边降价「拆桥」

作者 | 辰纹 来源 | 洞见新研社 从2020年11月17日与华为分家,开启独立创业之路,到成功逆袭,今年第三季度以18%的份额重回中国智能手机市场榜首,荣耀用了3年时间。 图源:Canalys 在这三年时间内,荣耀经历…

unity学习笔记07

一、组件 有几个物体他们之间有着重复的功能,该如何避免重复的去写代码? 可以将一些相同的功能写成一个组件,也就是组件就等同于功能。 什么是组件? 在Unity中,游戏物体是不具备任何功能的,如果想要为其…

解决api-ms-win-crt-runtime-l1-1-0.dll丢失的问题,全是干货分享

今天我的电脑中突然出现关于“api-ms-win-crt-runtime-l1-1-0.dll”的错误提示,关闭提示后再次打开程序依然不能正常打开,出现这样的问题突然不知道是因为什么,于是就去了解了关于出现api-ms-win-crt-runtime-l1-1-0.dll错误的问题&#xff0…

一款LED段码显示屏驱动芯片方案

一、基本概述 TM1620是一种LED(发光二极管显示器)驱动控制专用IC,内部集成有MCU数字接口、数据锁存器、LED驱动等电路。本产品质量可靠、稳定性好、抗干扰能力强。 二、基本特性 采用CMOS工艺 显示模式(8段6位~10段4位&#xff…

YOLOv5原创改进:全维动态卷积再改进,GCODConv

目录 一、原理 网络结构 二、代码 三、应用到YOLOv5中 一、原理

自定义注解的定义及使用场景

文章目录 1. 自定义注解如何使用2. 自定义注解使用场景2.1 自定义注解使用AOP做权限校验2.2 自定义注解使用AOP记录用户操作日志2.3 自定义注解使用AOP记录接口请求时长 1. 自定义注解如何使用 需要使用interface修饰,加上三个元注解 Documented:生成API…

微信预约小程序制作

对于许多新手来说,制作微信预约小程序可能是一项挑战,但并非不可能。本文将通过详细的步骤,指导您从零开始制作一个微信预约小程序。首先,您需要找一个合适的第三方制作平台或工具,乔拓云网就是其中之一。 找一个合适的…

入门指南:Vue的安装配置和开发环境设置

背景: ​ 这里想讲一讲为什么使用框架,而不使用原生的HTML、CSS、JavaScript写。原生开发虽然灵活,但在大型项目中可能导致代码重复、维护困难等问题,不符合软件工程的"高内聚低耦合"原则。例如,如果每个页…

人工智能 - 图像分类:发展历史、技术全解与实战

目录 一、:图像分类的历史与进展历史回顾深度学习的革命当前趋势未来展望 二:核心技术解析图像预处理神经网络基础卷积神经网络(CNN)深度学习框架 第三部分:核心代码与实现环境搭建数据加载和预处理构建CNN模型模型训练…

Python异常处理:try语句的应用与技巧

更多资料获取 📚 个人网站:ipengtao.com 异常处理在Python中是至关重要的。try-except是用于捕获和处理异常的核心机制之一。让我们深入了解如何使用try-except,处理各种异常情况。 try-except语句 在编程中,异常是指运行时发生…

linux环境下编译安装OpenCV For Java(CentOS 7)

最近在业余时间学习了一些有关图像处理的代码,但是只能本地处理,满足不了将来开放远程服务的需求。 因此,查找并参考了一些资料,成功在centos7环境安装上了opencv 460。 下面上具体安装步骤,希望能帮到有需要的同学。 …

贝叶斯Python实践

贝叶斯统计学是一种基于贝叶斯定理的概率推理方法,它在机器学习领域得到了广泛的应用。Python作为一门简洁、灵活和易学的编程语言,为贝叶斯统计学的实践提供了强大的工具和库。在本文中,我们将探讨贝叶斯在Python中的实践,包括贝…