从硬件结构到软件

这篇具有很好参考价值的文章主要介绍了从硬件结构到软件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

   先说说体系冯诺依曼的体系结构,有利于我们后面理解操作系统,软件再怎么发展,也必须遵守硬件的规则。

一 五大硬件理解

如下图:

从硬件结构到软件,Linux,linux,服务器

1 为什么要有输入输出设备

    很久以前,我们都是把指令打成孔,有孔无孔表示0,1,让计算机读,输出也是对一张纸进行打孔,输出0, 1,为了普及,能让大众使用,而且随着计算机语言的发展,我们需要有一个设备能处理二进制,例如输入一个单词move,然后能转为二进制指令让计算机识别,这也就是我们需要这些输入设备的原因。

   同理,当计算机处理完结果,需要反馈结果时,也需要把二进制结果处理为我们能认识的画面和文字,这就是目前的输出设备做的事了所以说问为什么要有输入输出设备,其实更像问为什么要对二进制做转换,就是为了降低使用难度和工作量呗。

   而什么是输入输出设备呢,我认为将数据给内存,给cpu的就是输入设备,cpu将结果返回,最后接收结果就是输出设备。这意味着cpu向磁盘要数据时,磁盘是输入设备,向磁盘输出数据时,磁盘又变成了输出设备,大多设备并非是绝对的输入和输出设备。

2 内存的作用:

   体系结构中还有个叫存储器,这个存储器我们可以理解为就是内存,那内存又有什么作用呢,我不能让输入输出设备直接和cpu打交道吗?

   假如没有内存, 由于cpu内部的寄存器比较小,能存的数据不多,也就不能预加载数据给cpu,那cpu就只能一点一点向输入设备要数据,而输入设备一般是磁盘文件,读取数据比较慢,不能快速传数据给cpu,cpu的处理速度太快了,一下子把给的数据处理完了,后面的数据又还没来,那cpu就只能等了,那此时cpu就被拖累了。       而且当cpu要输出结果时,写入磁盘文件同样很慢,假如此时cpu内存了不少结果要返回,但是由于写入太慢了,此时cpu又只能等你把结果都写入了,我才能继续计算,此时计算机的效率就由输入输出设备存储速度决定,再好的cpu都提高不了效率,所以结构得改,怎么快速地多存点数据给cpu呢?可以多弄几个寄存器,这样访问速度不就很快了,但是价格太贵,所以不能弄太多寄存器,那我们就选择弄一个便宜一点,存储速度勉强跟得上cpu的"寄存器"。如下

从硬件结构到软件,Linux,linux,服务器

   可是不对啊,你数据先从输入设备到存储器,然后才给cpu, 输出数据也是要先给内存,再给输出设备,这不是比我输入设备直接给cpu,cpu结果直接给输出设备慢吗(只有输入输出设备和cpu的结构下文我们称为结构2)

    这里有个误区, 那就是并行和串行的关系,冯诺依曼体系结构中数据的流动是并行的,你以为cpu是傻傻地等数据从输入设备到内存,再给自己,实际上数据会预加载到内存,预加载的时候cpu可以去做其它的计算,这样CPU就不用等待你输入数据,可以解放出来,然后内存的读取速度比外设快,所以当cpu要数据时,也可以快速提供,结果也是快速地写给内存,然后让内存去慢慢地给输出设备,不就又把cpu从输出中解放了吗,整体效率呈现的是内存的存储速度。而结构2没有内存这个存储器,就不能预加载,只能来一点数据,此时数据流动就是串行的,整体效率呈现的是外设的存储速度。

   综上内存的作用1:此时读数据的时候cpu就被解放去做其它事情了。作用2:内存可以快速传给cpu,作用3:内存的出现降低了电脑的成本,使得计算机可以更普及,因为还有一种结构是增加很多的寄存器给cpu,也能让cpu从io中解放。

    好好好,你说内存这么有用那我就听你的喽,可是我还有个疑惑,是谁让内存预加载,是谁在指挥那些硬件干活呢?下面的cpu会提及。

3 控制器和运算器作用

  运算器理解很简单,就是对数据,指令做运算,而控制器我理解则是cpu要去控制其它硬件,比如cpu执行了一条代码scanf,要我们输入数据,这个时候cpu就要控制外设,赶紧接收数据给我,我等着运算呢,我也是基于这一点大致理解虽然外设和cpu没有数据的传输,却有控制信号直接连接,或许后面的到linux网络部分会理解地更深刻。

   到了这里我们就大致理解了五大硬件的作用,可是好像少了什么东西,对,软件呢,软件在哪里和硬件交互呢,软件的本质就是一句一句的指令,指令最后那就是数据,由计算机体系结构要求,要让cpu处理软件的指令,那就要让软件加载到内存,所以软件就在内存。还有就是先前让内存预加载的指令就是操作系统这个软件给cpu发的指令,让控制器去实施的。那为什么是操作系统发指令呢,我代码写了一句scanf,不是我的编译器对cpu发号施令吗?下面来看看操作系统,我们就知道了。

二 操作系统

1 计算机的层状结构

  我们总说cpu处理指令,处理数据,数据去内存拿,指令呢,谁传到内存,然后传给cpu的,谁呢?这就是我们的操作系统了噢,那我就理解了为什么说操作系统控制硬件了,就是将指令发给cpu,让硬件干活,先前说操作系统是这个软件要加载到内存,才能让cpu访问执行,所以操作系统就在内存,而由内存断电就丢失数据得,电脑每次开机,连接电源时都要先把操作系统加载到内存。

  那为什么是让操作系统去给硬件发指令呢,我的QQ,微信,编译器软件就不能发吗,不行,因为操作系统不信任这些软件,如果让这些软件随意访问硬件资源,那你的设备数据将随意地由其它软件获取。那QQ微信难道不需要硬件的支持吗,这个当然是需要的,接下来就谈谈计算机的层状结构来理解QQ微信是如何获得硬件支持的。

如下图

从硬件结构到软件,Linux,linux,服务器

    先前说操作系统控制硬件,可是我们可以看到硬件和操作系统中间还有个驱动程序,我理解的驱动程序是什么呢,就是从硬件拿数据给操作系统的,因为操作系统要对进程,文件,驱动做管理,那就都要访问硬件拿数据,所以将从硬件拿数据的功能独立出来,让大家共用(驱动程序也不能理解为函数,网上资料也看不太懂,我才刚接触操作系统,具体理解为什么,也不好说,希望以后工作中慢慢体会)。虽然操作系统对硬件做了封装,但是仅仅保护硬件资源不是操作系统的价值,就像一家银行金库封的死死地,却不为你提供服务,你说这银行硬件条件再好有什么用呢? 所以必须在保证安全的前提下,提供一个小窗口能让用户取钱存钱,所以操作系统也必须将一些接口给外部,而这个接口就是一个一个的函数,基于这个接口不同的语言对系统调用进行封装,c语言printf调用向显示器打印数据的接口,而c++的cout也是调用类似的接口,所以语言的库的都是在系统调用接口之上开发的。从硬件到系统软件,再到封装的系统调用接口的库函数,再到我们使用的软件,不断地封装,包含个头文件,写个printf就能打印数据,我们轻轻一点就能发送消息,实际上却是底层在一层一层地响应。

    我很久以前看到个问题,操作系统是c语言写的,语言的开发又是在系统之上,那c语言都还没开发出来咋写的操作系统呢?我现在大致能解释了,语言的开发应该说的就是实现一个个便利的库函数,scanf这些库函数是对系统调用接口进行封装,当然得在系统之上,而没有这些库函数,c语言也能写代码,难道没有成语,就写不了文章了?

   

2 操作系统的管理

好好好,计算机的层状结构我大致理解了,也就明白操作系统对上是要提供接口和服务的,对下是要做软硬件资源管理的,那咋管的呢?

1 什么是管理

   操作系统是怎么知道什么时候给指令给cpu,给什么指令呢?要解释这个得先说说什么是管理比如在大学里,大学校长就是管理学校的,管理成千上万的师生,可是我们几乎没见过校长,我是怎么被管的呢?这难道说明管理者与被管理者无需见面,也能实现管理,实际上校长只需要获取你的学习成绩,就能判断你成绩合不合格,要不要让你继续读下去,这就已经在管理你了(这点非常关键),噢,那管理者与被管理者见面也是为了获取状态数据,所以只要管理者能从其它方面获取到数据,也就不用和你见面也能通过数据知道你的情况,而且这个数据足够详细,就能描述你,组合在一起能让管理者做出决策。

2 数据从哪来

  好好好,那数据哪来,校长去搜集吗,校长是做决策的,校长应该让辅导员来返回你的数据给他,也就是说操作系统不会自己去搜集数据?,而是让一个一个的程序去返回数据给自己,而这些程序就叫驱动程序,可是辅导员哪知道要采集哪些数据呢,总不能把学生的,他们父母的所有数据都一股脑地全传给校长吧,此时校长如果只想找身高最高的同学,那读取数据对校长来说就得累死,数据量太大了,有些可能是没必要的数据,如何对这些庞杂的数据做管理呢?

3 如何管理数据

  校长说我给你们一个模板,你们就按照这个模板填数据,除模板需要的其它都不用填,这就减少了数据的采集,但是由于表格比较容易受损,所以校长打算放到网络上去维护,一个学生的信息是各种类型的数据,而操作系统是c语言写的?,所以只能用一个结构体将这些数据统一封装,也就是说一个结构体也就可以描述一个学生,那所有学生都被存在了一个个结构体中。而这个模板就是先对学生进行描述的过程,这一步非常关键,数据的准确度和详细程度大大影响校长的判断。

    那我们如何管理这些结构体对象,这不就是数据结构吗,可以用链表将一个一个的结构体组织起来,这个时候校长对学生信息表格的维护就变成对链表的增删查改,那只要再实现配套函数例如find,erase,那每次就调用配套管理函数就能实现管理了。最终这还引出了一个通用的思想,管理就是先描述,再组织。而操作系统要管理文件,内存和进程,那也是先描述,再组织,所以在操作系统内就是存在大量的数据结构。

  实际上我们实现的类都是先描述,再组织,例如实现的容器vector,内部是连续存储的,而我们只需要三个指针就能描述vector,其内部的每个元素则由动态开辟的连续空间联系起来,随后就是对这个空间内元素的增删改查,而c++提供容器则是为了帮我们更好地组织对象,例如想让数据以链表的方式组织起来,那就用list,想排序就用map。

   由于后面的博客要开始提及进程,那我们就浅谈一下操作系统如何对进程进行管理,由上述情况得,对进程,那不就是先描述,再组织呗,进程就是一个加载到内存的程序,所以进程包括代码和数据,而操作系统管理进程不用在意它的代码和数据,只要用一个描述进程的结构体(linux下称为-PCB)就可以达到管理的目的。文章来源地址https://www.toymoban.com/news/detail-725367.html

到了这里,关于从硬件结构到软件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux CentOS 7 服务器集群硬件常用查看命令

    (一)查看内核:uname -a (二)查看系统: cat /etc/redhat-release (三)查看CPU: cat /proc/cpuinfo 或者 lscpu tips:两者命令差不多,lscpu更简洁,主要关注 Core(s) per socket 和 Socket(s) 参数,以及 Thread(s) per core 。后者表示逻辑核心,一般是1,如果使用超线程技术,则是2; CPU(s) 是三者

    2024年04月27日
    浏览(37)
  • Linux下常见的代理服务器软件介绍

    在Linux系统中,代理服务器是我们搭建网络环境和处理网络请求的常用工具。但是,你知道Linux下常见的代理服务器软件有哪些吗?本文将为你带来对几款常见的Linux代理服务器软件的介绍,帮助你选择适合的代理服务器。 一、Squid(Squid Proxy Server) Squid是一款功能强大的开源

    2024年02月12日
    浏览(36)
  • Linux系统部署BBR服务器加速软件

       BBR简介:   BBR是谷歌的黑科技,也可以理解为用来加速网络的软件,如果服务器在海外,会发现丢包率很高,线路还会时断时续。所以,不用点黑科技,肯定是没办法使用。而BBR加速能充分利用网络带宽 BBR的作用就是尽量跑满带宽,并且尽量不要有排队的情况。BBR可

    2024年02月19日
    浏览(32)
  • Linux服务器安装杀毒软件ClamAV

    ClamAV是Linux操作系统一款免费的杀毒工具,通过命令执行病毒库升级、查找病毒和删除病毒。 官方参考文档:Installing - ClamAV Documentation 官方下载地址:https://www.clamav.net/downloads 在CentOS操作系统上安装ClamAV,请分别执行以下命令: [root@icoolkj ~]# yum install epel-release -y [root@icoolk

    2024年02月04日
    浏览(42)
  • (一)专题介绍:移动端安卓手机改造成linux服务器&linux服务器中安装软件、部署前后端分离项目实战

    总体概述: 本篇文章隶属于“手机改造服务器 部署前后端分离项目”系列专栏,该专栏将分多个板块,每个板块独立成篇 来详细记录:手机(安卓)改造成个人服务器(Linux)、Linux中安装软件、配置开发环境、部署JAVA+VUE+MySQL5.7前后端分离项目,以及内网穿透实现外网访问等全过

    2024年02月04日
    浏览(40)
  • 华为云云耀云服务器L实例评测 | 实例评测使用之硬件参数评测:华为云云耀云服务器下的 Linux 磁盘目录分析神器 ncdu

    华为云云耀云服务器L实例评测 | 实例评测使用之硬件参数评测:华为云云耀云服务器下的 Linux 磁盘目录分析神器 ncdu 介绍华为云云耀云服务器 华为云云耀云服务器 (目前已经全新升级为 华为云云耀云服务器L实例) 华为云云耀云服务器是什么 华为云云耀云服务器和上一代

    2024年02月07日
    浏览(62)
  • 【安全狗】linux免费服务器防护软件安全狗详细安装教程

    在费用有限的基础上,复杂密码+云服务器基础防护+常见端口替换+安全软件,可以防护绝大多数攻击 官方提供了两个下载方式,本文采用的是 方式2 wget安装 方法1:在安全狗官网直接下载软件安装包(.tar.gz 格式:safedog_linux64.tar.gz) 方法2:采取wget方式下载发布包: tar xzv

    2024年02月16日
    浏览(37)
  • Linux下服务器基本环境搭建步骤详解(三种软件安装方式)

    小伙伴们注意看:下面使用三种方式分别安装JDK、Tomcat、Docker进行演示 操作系统基于CentOs7. Linux服务器的学习小结,希望能给到小伙伴们一点帮助。同时也方便我自己回顾。觉得可以记得好评点赞,阿里嘎多! 1、rpm下载地址 方式一 :rpm 下载地址 方式二 :https://www.aliyundr

    2024年02月11日
    浏览(31)
  • 监测服务器硬件设备运行状况的软件 - wgcloud

    WGCLOUD是一款开源免费的运维平台,具有轻量,高效,性能稳定,部署简单,上手容易等特点 WGCLOUD可以监测服务器的cpu,内存,磁盘,负载,磁盘,缓存,网络流量,系统信息,温度,硬盘健康等指标数据,这些都不要做配置,默认自动监控 WGCLOUD的版本更新非常活跃,几乎

    2024年02月02日
    浏览(50)
  • Syncthing实时共享同步数据 服务器数据备份软件 Syncthing开机自启动 修改端口(linux、windows)

    Syncthing是一个开源文件同步工具,可以在多台设备之间实时同步文件或文件夹。它可以帮助你自由地选择数据的存储位置、数据是否被第三方共享以及同步的数据如何在互联网上传输。 Syncthing使用P2P技术实现数据在设备间的同步,和传统的网盘不同,数据在同步的过程中并不

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包