4.0 Linux进程前导知识

个人主页:Lei宝啊 

愿所有美好如期而遇


冯.诺依曼体系  

CPU:运算器,控制器

输入设备:键盘,麦克风,摄像头,鼠标,网卡,磁盘等。

输出设备:显示器,声卡,显卡,打印机,磁盘,网卡。

存储器:内存

这些设备并不是随便连接起来的,是由总线连接,现在总线集成在主板上,这些硬件只需要插入主板的插槽就可以实现连接,设备的连接不是单纯为了连接,是为了数据的流动,能够让数据从输入设备流入内存,从内存流出到输出设备,就好像数据从磁盘加载到内存,再从内存刷到显示器上一样,如果硬件不连接,数据无法从一个硬件到另一个硬件,设备连接不是目的,而是为了让数据流动的手段。设备之间数据流动的本质是数据在硬件之间进行来回拷贝,拷贝的整体速度,是决定计算机效率的重要指标。

而冯.诺依曼体系能够在如今还是主流,是因为他的稳定性和效率都不错,而且价格便宜。



那么第二个问题来了,我们为什么需要内存,直接外设和CPU交互不好吗?

就像这样:

我们加了内存之后看起来更耗费时间了,但内存的存在一定是有他存在的意义

寄存器和缓存是集成在CPU上的

越靠近CPU的硬件越贵,效率越高,容量越小。

越远离CPU的硬件越便宜,效率越低,容量越大,如磁盘。

而CPU和磁盘的效率差距非常大,CPU太快,磁盘太慢,直接交互的话,那么对CPU来说会造成效率上的极大浪费。(磁盘将数据加载到CPU会很慢,而CPU计算很快,也就是CPU算出来了,而且已经给了输出设备,但是输入设备和输出设备反应不过来,数据还没再次给到CPU,并且CPU算出的数据输出设备还未刷新出去)

那加上内存就不浪费了吗?硬盘直接和CPU交互,还省了和你内存交互的时间,你凭什么说加上内存就效率高了?

这是因为我们在内存中加了预加载和缓存,把硬件上的问题转换为软件上的问题,只要有个好的操作系统,那么就可以由操作系统判断,预先把数据加载到内存上,CPU需要时直接和内存交互,然后计算出来的结果不给输出设备,而是返回给内存,在内存不忙时刷新到输出设备,最后,也就变成了CPU和内存交互。

这样,计算机的整体效率就提高到了以内存效率为主。

当然,如果你非常非常有钱,可以把所有硬件全部换成寄存器,这样的设备当然极快。



那么,我们明白了,数据传输时先从输入设备加载到内存上,再由内存和CPU交互,CPU算出来后给内存,再由内存刷新到输出设备。

我们也就又有了个问题:

为什么说程序要运行时要先加载到内存上呢?

首先,程序是不是可执行的二进制文件,是文件就存储在磁盘上,要运行就要先加载到内存上,这是冯.诺依曼体系所决定的,然后二进制文件由CPU计算后再给到内存,结果由内存刷新。

就好像我们的QQ,是不是个程序呢? 他要运行一定是在内存中,由CPU执行,我们在给别人发消息时,由键盘输入内容,加载到内存中,经过CPU计算到内存,由内存刷新到网卡中,通过网络传输到别人的网卡上,这个内容加载到内存中,通过CPU解码,再由内存刷新到显示器上。、



而硬件都是由操作系统进行管理,操作系统是个进行硬件管理的软件,其实本质也是可执行程序

它包括了内容管理,文件管理,进程管理,驱动管理等

每一个硬件都有他们各自的驱动程序,驱动程序可以驱动硬件,也可以使其待机,但是驱动只负责执行,是否驱动硬件的指令,由操作系统下达,也就是说操作系统通过驱动来控制硬件。 

而操作系统对硬件的管理是有一套逻辑的:

首先他要对硬件的属性进行描述,定义一个struct结构体,去存放硬件的属性,操作系统要管理硬件,是定义硬件数量的对象,然后通过链表将他们连接起来,在操作系统想要管理某个硬件时,可以通过遍历这个链表找到对应的硬件,然后他通过驱动程序去驱动。当我们不需要这个硬件卸载其驱动或者需要其他硬件而下载驱动时,通过对这个硬件的链表的增删查改来管理这些硬件。

总结就是:先描述,再组织

描述硬件的属性,然后通过定义硬件对象,将他们用链表连接起来,也就是组织起来,这样就能进行管理。

就像是我们写的通讯录,我们首先是对人的属性进行描述,定义人的对象,可以定义很多对象,而后通过链表将这些联系人连接起来,在我们需要查找或者删除某人时,他通过对链表的增删查改来管理这个通讯录。

任何面向对象的语言,都离不开这六个字,一定是先描述对象的属性,如类,然后通过类去实例化对象,而且不止一个对象,然后我们通过容器,也就是某种数据结构来组织连接这些对象,对他们进行增删查改,实现对他们的管理,C语言也是如此。

这些就是将现实的实际问题,进行计算机级别的建模过程,转化成计算机能够认识的问题,就像我们的操作系统去管理硬件。

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

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

相关文章

51单片机PCF8591数字电压表LCD1602液晶显示设计( proteus仿真+程序+设计报告+讲解视频)

51单片机PCF8591数字电压表LCD1602液晶设计 ( proteus仿真程序设计报告讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0060 51单片机PCF8591数字电压表LCD1602液晶设计 1.主要功能&a…

【C++】【Opencv】minMaxLoc()函数详解和示例

minMaxLoc()函数 是 OpenCV 库中的一个函数,用于找到一个多维数组中的最小值和最大值,以及它们的位置。这个函数对于处理图像和数组非常有用。本文通过参数和示例详解,帮助大家理解和使用该函数。 参数详解 函数原型…

linux下使用Docker Compose部署Spug实现公网远程访问

📑前言 本文主要是linux下使用Docker Compose部署Spug实现公网远程访问的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 &am…

CountDownLatch使用

常用于多线程场景&#xff0c;待多线程都结束后方可继续主线程逻辑处理 CodeConstant 常量类 import java.util.HashMap; import java.util.Map;public class CodeConstant {public static final Map<String, Map<String, String>> CODE new HashMap<>();…

标本传送设备物联网应用案例|蓝蜂物联网一体化方案

标本传送设备物联网应用案例 标本传输系统被大量应用到现代医院场景中&#xff0c;系统各个设备的运行情况直接影响到整个医院系统的正常稳定&#xff0c;所以对于标本传输系统的实时监控和及时运维是维持医院稳定和规避风险的重中之重。 针对标本传输系统应用过程中的数据统…

分组取每组数据的最大值和最小值的方法思路,为类似场景的数据分析提取提供思路,例如提取宗地内建筑的最高层数等可参考此方法思路

目录 一、实现效果 二、实现过程 1.读取并剔除无效数据 2.数据分组 3.提取最大值 4.提取最小值 三、总结 使用FME实现批量分组取每组数据的最大值和最小值&#xff0c;为类似场景的数据分析提取提供思路&#xff0c;例如提取宗地内建筑的最高层数等可参考此方法思路。关…

基于RK3399的室内健身魔镜方案

I 方案背景 一、健身魔镜的兴起 2020年疫情席卷全球&#xff0c;宅家是防疫的措施之一&#xff0c;因而宅家运动火爆&#xff0c;随之而来的宅家运动器材也风靡起来&#xff0c;其中包含既有颜值又具有多种功能的健身魔镜。 Ⅱ 方案介绍 一、健身魔镜的方案介绍 …

ORA-00257: Archiver error. Connect AS SYSDBA only until resolved错误解决

错误的原因&#xff1a;是因为服务器分配空间不足&#xff0c;数据库归档日志满导致系统数据库登陆失败。 解决办法&#xff1a;1.删除以前的日志 2.增大归档日志的容量 3.关闭归档模式 一、删除以前的容量 1.登录账号后&#xff0c;查看ORACLE_BASE目录 【oraclelocalhost~】$…

数据结构与算法之排序: Leetcode 21. 合并两个有序链表 (Typescript版)

合并两个有序链表 https://leetcode.cn/problems/merge-two-sorted-lists/ 描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 …

Linux网络——自定义协议

目录 一.什么是协议 二.协议与报文 三.自定义协议 1.封装套接字 2.构建请求与响应 3.序列化和反序列化 4.报头添加和去除 5.报文读取 四.服务器端程序 五.客户端程序 一.什么是协议 协议在生活中泛指&#xff1a;双方或多方为了完成某项任务或达成某种目的而制定的共…

【Proteus仿真】【Arduino单片机】简易计算器设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用PCF8574、LCD1602液晶、4*4矩阵键盘等。 主要功能&#xff1a; 系统运行后&#xff0c;操作矩阵按键可实现简单四则运算。 二、软件设计 /* …

链表题(3)

链表题 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 本篇内容继续给大家带来链表的一些练习题 链表分割 知识点&#xff1a; 编程基础 链表…

MUYUCMS v2.1:一款开源、轻量级的内容管理系统基于Thinkphp开发

MuYuCMS&#xff1a;一款基于Thinkphp开发的轻量级开源内容管理系统&#xff0c;为企业、个人站长提供快速建站解决方案。它具有以下的环境要求&#xff1a; 支持系统&#xff1a;Windows/Linux/Mac WEB服务器&#xff1a;Apache/Nginx/ISS PHP版本&#xff1a;php > 5.6 (…

Vue3问题:如何实现页面引导提示?

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约1700字&#xff0c;整篇阅读大约需要3分钟。 本文主要内容分三部分&#xff0c;第一部分是需求分析&#xff0c;第二部分是实现步骤&#xff0c;第三部分是问题详解。 …

【数据结构】非递归实现二叉树的前 + 中 + 后 + 层序遍历(听说面试会考?)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;数据结构 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&…

第2关:还原键盘输入(list)

题目&#xff1a; 知识点&#xff1a; 列表list相较于数组&#xff1a; 优势&#xff1a;可在任意指定位置插入或者删除元素而不影响列表其他地方 。 劣势&#xff1a;无法直接进行下标索引&#xff0c;需要迭代器it逐个遍历。 代码&#xff1a; #include <iostream>…

Mysql学习笔记--基础

一&#xff0c;SQL最重要的增删改命令格式 1&#xff0c;insert into 表名&#xff08;不写这个括号里面的内容就默认所有字段都要添加&#xff09; values&#xff08;&#xff09; 插入单条数据 2&#xff0c;insert into 表名 (里面是列名) values&#xff08;根据列名依次…

Git之分支与版本->课程目标及知识点的应用场景,分支的场景应用,标签的场景应用

1.课程目标及知识点的应用场景 Git分支和标签的命名规范 分支 dev/test/pre/pro(即master) dev:开发环境--windows (自己的电脑) test:测试环境--windows/linux (公司专门的测试电脑 pre:灰度环境(非常大的公司非常重要的项目) pro:正式环境 灰度环境与正式环境的服务器配置…

Azure 机器学习 - 使用受保护工作区时的网络流量流

目录 环境准备入站和出站要求方案&#xff1a;从工作室访问工作区方案&#xff1a;从工作室使用 AutoML、设计器、数据集和数据存储方案&#xff1a;使用计算实例和计算群集方案&#xff1a;使用联机终结点入站通信出站通信 方案&#xff1a;使用 Azure Kubernetes 服务方案&am…

数据结构线性表——栈

前言&#xff1a;哈喽小伙伴们&#xff0c;今天我们将一起进入数据结构线性表的第四篇章——栈的讲解&#xff0c;栈还是比较简单的哦&#xff0c;跟紧博主的思路&#xff0c;不要掉队哦。 目录 一.什么是栈 二.如何实现栈 三.栈的实现 栈的初始化 四.栈的操作 1.数据入栈…