Linux修炼之路之冯系结构,操作系统

news2024/12/24 20:34:07

目录

一:冯诺依曼体系结构

 1.五大组件

2.存储器存在的意义

3.几个问题

二:操作系统

接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

一:冯诺依曼体系结构

我们当代的计算机的基本构成都是由冯诺依曼体系结构来进行构成计算机的基本单元,所以计算机就是由一个个的硬件组成的 

 1.五大组件

1.存储器:具体指的是内存

2.输入设备:指鼠标,键盘,摄像头,话筒,磁盘,网卡等

3.输出设备:指显示器,播放器硬件,磁盘,网卡等

4.运算器:对我们的数据进行计算任务(算术运算,逻辑运算)

5.控制器:对我们的计算硬件流程进行一定的控制

输入设备和输出设备共同组成外部设备(外设),控制器和运算器组成cpu

对于五大组件,每个都是一个独立的个体,因此对于计算机来说每个硬件单元都必须用线联系起来

 对于这里的线就是总线,分为系统总线(cpu与内存之间相互交互的线)和IO总线(外设与内存之间相互交互的线)

2.存储器存在的意义

1.对于在冯诺依曼体系结构中的数据的流向

数据先从输入设备加载到存储器中,,然后cpu从存储器中读取数据,经过cpu计算过后,再将数据再次写入存储器中,最后将数据从存储器刷新到输出设备

2.对于上述的过程,可能初识觉得过于复杂了,想直接将数据从输入设备交到cpu中去执行计算,再将计算后的数据直接交到输出设备,我们想如果直接这样的话,岂不会简单很多,省去存储器这一中间介质的转换,但事实上不会这样做的,这是因为外设与cpu的存储速度差距非常大,下面是计算机的存储体系结构

这张图可以看出存储是分级的,而对于cpu的存储速度是纳秒级别的,内存是微秒级别的,外设则是毫秒级别的

所以根据木桶原理,如果cpu直接与外设相连的话,计算机整体的存储效率就会以外设为主,这势必会使计算机整体的存储速度和效率变得低下

所以引入存储器去适配cpu与外设之间的存储速度差,这是计算机整体的存储效率就以存储器为主,比上述过程存储速度和效率会提升很多

但这时我们也会想,有存储器的参与,但相互之间的存储速度和效率差仍然很大,并且是串联的形式,似乎并没有快多少,但其实不然,操作系统会将所有的数据先缓存到对应的内存中,等cpu执行完上一轮计算后,会直接从内存中读取数据进行计算,在cpu读取计算数据的过程中,操作系统会再次预先加载其他的数据,这样计算机整体的存储速度和效率是有很大提升的

3.几个问题

1.对于一个程序在执行执行之前,必须要先加载到内存当中运行,这是为什么?

这是因为在程序中会有大量的数据要在cpu中进行计算,而cpu只会从内存中读取数据,所以程序必须先加载到内存当中,这也是冯诺依曼体系结构所规定的

2.对于前面写的进度条,默认显示的数据,是可能会缓存起来的,那么在哪缓存呢?

当没有强制刷新或者'\n'时,这是数据就会缓存到存储器当中,所以存储器就是一个硬件级别的缓存空间,并且在冯诺依曼体系结构中是处于核心地位的

对于现实中的每一台设备都可以看作是一个冯诺依曼体系结构

二:操作系统

1.操作系统是一款做管理的软件,管理的是相应的硬件和软件

2.概念:任何计算机系统都包含一个基本的程序集合,称为操作系统,广义的操作系统是包括内核(进程管理,内存管理,文件管理,驱动管理)和其他程序(例如函数库,shell外壳等),侠义上的操作系统主要指内核

3.设计操作系统的目的

操作系统会帮助用户管理好下面的软硬件资源,并且为用户提供一个良好(安全,稳定,高效)的运行环境,总结起来就是操作系统通过管理好底层的软硬件资源(手段),为用户提供一个良好的运行环境(目的)

4.计算机的层状体系结构

对于底层硬件是以冯诺依曼体系结构为基础,把 硬件之间互相用总线连接起来的

所有的硬件要被软件访问的话,就得有它所匹配的驱动程序的参与,如果没有的话,则访问不了

用户是不能直接访问硬件的,而是要经过操作系统来完成访问硬件的操作

在操作系统里面会有各种的数据,可是操作系统不相信任何用户,所以用户是不能直接访问操作系统内部的数据的

于是操作系统为了保证自己的数据安全,也为了保证给用户提供服务,操作系统是以接口的方式给用户提供调用的入口,来获取操作系统内部的数据。 对于这里的接口是用c来实现的,由操作系统来提供的自己内部的函数调用

所以所有访问操作系统的行为,都只能通过系统调用来完成

5.关于操作系统是如何做管理的

首先从生活来说管理者和被管理者是不需要见面的,就像员工与老板是不需要见面的,那么在不见面的情况下,管理者是如何做管理的呢?  其实管理者只要得到被管理者的管理信息,就可以在未来进行管理决策---------------管理的本质就是通过对数据的管理,达到对人的管理

那么既然管理者与被管理者是不见面的,那么管理者的管理信息是怎么得到的呢------通过执行者

比如在公司当中员工人数是庞大的,当要管理员工就要对员工的数据进行统计整理,一般的会整理为excel表格,在表格当中填入员工的相关数据(如姓名,年龄,入职时间,工资卡账号,所属部门,工号等),当要查询某个员工的数据时,就得采用一个个遍历的方式来查找

但这样的话对于管理者去管理查询数据的话,仍是很大的工作量,因此可以采用c语言结构的方式,将相关数据用结构体struct描述起来,将每个员工定义为一个struct结构体对象并用自己的数据进行初始化,但每个员工都是一个独立的结构体对象,因此每个结构体对象当中应该还包括struct people* next的结构体指针,将每个结构体对象连接起来,形成一张员工的单链表,这就叫建模组织的过程       ------------这种方法就叫做先描述再组织

因此对于管理者来说,只要管理好这张员工链表就可以,将对于员工的管理工作转换为对这张单链表的增删改查

所以在操作系统中,管理任何对象的操作都可以转化为对某种数据结构的增删改查

 对于在计算机层状体系当中,操作系统和硬件并不直接见面,只需要操作系统能获取到硬件的状态数据就能够进行管理的操作,但操作系统系统是不能直接获取硬件的数据的,而是通过由驱动程序来获取硬件的数据,再从驱动程序交到操作系统当中

详细的来说就是,操作系统要管理不同的设备,包括内存,进程,文件和驱动,如操作系统要对硬件做管理,其实在操作系统内部就需要描述这一个个的硬件设备,对于每个硬件设备都使用同样的struct结构体来描述,不同的设备填上不同的属性值,然后给这个设备构建出相应的结构体对象,把每个构建的结构体对象用一种数据结构管理起来,当操作系统要检测某个设备的状态,做出相应的操作,就转换为在操作系统内部对特定设备所维护的数据结构的增删改查

5.计算机管理硬件

  先用struct结构体描述起来,再用链表或者其他高效的数据结构组织起来

6.系统调用和库函数

在开发角度。操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,就叫做系统调用

系统调用在使用上,功能比较基础,对用户的要求也比较高,所以有些开发者对部分系统调用进行了部分的封装,从而形成了库,有了库,就很有利于更上层用户或开发者进行开发

所以库函数和系统调用属于上下层的调用和被调用的关系

7.总结来说,在操作系统内部对被管理对象进行建模,形成对应的某种数据结构,对对象的管理就转化为对某种数据结构的增删改查

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

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

相关文章

【深度学习】第1章

概论: 机器学习是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析,其基础主要是归纳和统计。 深度学习是一种实现机器学习的技术,是机器学习重要的分支。其源于人工神经网络的研究。深度学习的模型结构是一种含多隐层的神经…

MySQL增删查改进阶

数据库约束表的关系增删查改 目录 一.数据库约束类型 NOT NULL约束类型 UNIQUE 唯一约束 DEFAULT 默认值约束 PRIMARY KEY:主键约束 FOREIGN KEY :W外键约束 二,查询 count()两种用法 sum,avg,max…

python文件处理之os模块和shutil模块

目录 1.os模块 os.path.exists(path):文件或者目录存在与否判断 os.path.isfile(path):判断是否是文件 os.path.isdir(path):判断是否是文件夹 os.remove(path):尝试删除文件 os.rmdir(path):尝试删除目录 os.m…

【设计模式】——装饰模式(包装器模式)

💻博主现有专栏: C51单片机(STC89C516),c语言,c,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux&#xf…

行为型设计模式之模板模式

文章目录 概述原理结构图实现 小结 概述 模板方法模式(template method pattern)原始定义是:在操作中定义算法的框架,将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板方法中的算法可以理解为广义上的业…

Linux驱动(3)- LInux USB驱动层次

在Linux系统中,提供了主机侧和设备侧USB驱动框架。 从主机侧,需要编写USB驱动包括主机控制器驱动,设备驱动两类,USB 主机控制驱动程序控制插入其中的USB设备。 USB设备驱动程序控制该设备如何作为从设备与主机进行通信。 1.主机…

文件夹打开出错?这里有你需要的数据恢复与预防指南

在日常使用电脑时,我们有时会遇到文件夹打开出错的情况。当你尝试访问某个文件夹时,系统可能会弹出一个错误提示,告诉你无法打开该文件夹。这种情况不仅会影响我们的工作效率,还可能导致重要数据的丢失。接下来,我们将…

Flutter-自定义折叠流布局实现

需求 在 Flutter 开发中,常常需要实现自定义布局以满足不同的需求。本文将介绍如何通过自定义组件实现一个折叠流布局,该组件能够显示一系列标签,并且在内容超出一定行数时,可以展开和收起。 效果 该折叠流布局可以显示一组标签…

ROCm上运行Transformer

10.7. Transformer — 动手学深度学习 2.0.0 documentation (d2l.ai) 代码 import math import pandas as pd import torch from torch import nn from d2l import torch as d2l#save class PositionWiseFFN(nn.Module):"""基于位置的前馈网络""&qu…

【uni-best+UView】使用mitt实现自定义错误对话框

痛点 目前在设计一个uni-best的前端全局的异常提示信息,如果采用Toast方式,对微信支持的不友好。微信的7中文长度连个NPE信息都无法完整显示,更不用提Stacktrace的复杂报错了。如果使用对话框,必须在页面先预先定义,对…

C/C++ 进阶(2)多态

个人主页:仍有未知等待探索-CSDN博客 专题分栏:C 目录 一、多态的概念 二、多态的定义及其实现 1、多态的构成条件 2、虚函数 3、虚函数重写 a.常规 b.两个例外 1、协变(基类与派生类虚函数返回值类型不同) 2、析构函数重…

10G UDP协议栈 (9)UDP模块

目录 一、UDP协议简单介绍 二、UDP功能实现 三、仿真 一、UDP协议简单介绍 UDP协议和TCP协议同位于传输层,介于网络层(IP)和应用层之间:UDP数据部分为应用层报文,而UDP报文在IP中承载。 UDP 报文格式相对于简单&am…

单工无线发射接收系统

1 绪论 随着无线电技术的发展,通讯方式也从传统的有线通讯逐渐转向无线通讯。由于传统的有线传输系统有配线的问题,较不便利,而无线通讯具有成本廉价、建设工程周期短、适应性好、扩展性好、设备维护容易实现等特点,故未来通讯方式将向无线传输系统方向发展。同时,实现系…

leedcode【203】. 移除链表元素——Java解法

Problem: 203. 移除链表元素 题目思路解题方法复杂度Code效果 题目 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val…

【图解IO与Netty系列】IO多路复用

IO多路复用 为什么要使用IO多路复用Linux的IO多路复用接口selectpollepoll 为什么要使用IO多路复用 我们常用的IO模型是BIO,我们Java里的IO流大多数都是BIO,也就是同步阻塞式IO,这种IO操作的好处是简单方便,但是缺点也很明显——…

【技术实操】银河高级服务器操作系统实例分享,TCP长连接与短连接详细说明

1.服务器环境以及配置 物理机/虚拟机/云/容器 物理机 处理器: HUAWEI Kunpeng 920 具体操作系统版本 Kylin-Server-10-SP1-Release-Build20-20210518- aarch64 内核版本 kernel-4.19.90-23.8.v2101.ky10.aarch64 2.问题现象描述 对TCP长连接有疑问 1、如何…

Yolov8训练自己的数据集(脱离ultralytics库)

最近在整理关于yolov8的相关内容,有个很大的问题,抛开yolov8性能不谈,yolov8代码的使用灵活性不如yolov5,尤其是对于一些新手或者对yolo框架不是很熟悉的人(这也是因人而异,有些人可能会喜欢v8代码的使用方式)。比如在…

牛客网刷题 | BC94 反向输出一个四位数

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 将一个四位数&…

1.int 与 Integer 的简单区别

蓝桥杯刷题从此开始: 第一题就是两个数的和,个人看来主要考察 int与integer 的区别; 这是我提交的答案,竟然会报错: import java.util.*; //输入A、B,输出AB。 class add {public static void main(String …

MT7628原厂Uboot修改交互串口

工作中,遇到用户用Skylab的SKW92A模组,在参考设计时,将UART接口预留错的情况,对于这种情况,需要将原厂SDK默认的交互串口UART0,改为UART1。在开发过程中,经常需要在Uboot阶段升级固件&#xff0…