计算机基本组成
计算机的电气构成
我们使用的计算机,都是冯诺依曼体系的计算机,均由运算器,存储器,控制器,输入设备和输出设备组成。其中运算器和控制器均集成在中央处理器中,存储器就是我们所说的内存,而显示屏,硬盘,键盘灯都属于IO设备。很多人不相信硬盘是IO设备,但实际上硬盘的电气机制和运行速度决定了其外设的地位,在计算机发展早期,人们用打孔纸带作为输入设备,后来发展成为了磁带,再后来人们用磁盘来进行更快速的输入输出,因此硬盘一直是作为一种IO设备存在的,而不属于存储器,尽管硬盘确实有所谓的存储功能。
当然作为软件开发者,没有必要对计算机组成原理以及计算机的发展历史有着特别深厚的见解,因此我们仅需了解如今的计算机构成即可。如今时代变迁,计算机也有了长足的发展,虽然总体上还是和之前的计算机结构大同小异,但是我们有了一种新的外挂加持设备,那就是适配器,适配器作为连接计算机硬件系统和IO设备的桥梁,为我们如今愉快的使用电脑提供了很大的方便,如显卡,声卡,网卡,他们在快速的计算机和慢速的外接设备之间起到了缓冲加速的作用,如显卡,显卡中的GPU可以提供大量的矩阵运算算力,进而弥补CPU核心数量少,运算空间坐标变化是乏力的缺点,网卡则是实现了网络信号向计算机硬件系统内的快速转化,声卡提供了声音文件的高清解析。在我们组装电脑时,都要往一块板子上插这个插那个,这块板子就是电脑最关键的部分,即主板,主板上边集成了总线,以及大大小小的电流电压控制设备,只要硬件们往上一插,就可以直接连接到一个闭合的总线中,形成一个回路,通过总线,硬件之间的信息交互便成为可能,在主板上,最为重要的就是CPU,CPU通过总线连接着内存,显卡等硬件,其他硬件为CPU提供加速服务。
基于人类的科技树,只要是电器,或者电器相连,其必须形成一个闭合电路。一根导线在同一时刻只能传输一个比特信号,其物理形式是高低电平,比特流实际上就是电压在导线上的快速切换,而不是真的有一串高低不平的电信号流了进来。当然在计算机中肯定存在多字节信号,但是这些信号是通过排线传送的,而非在一根导线上可以同时传输,所谓带宽就指的是这种多字节信号的宽度,还有CPU的位数,如今的CPU多是64位,意思就是说它可以同时传输一个64位的二进制信号,在物理上表现为从CPU出发的信号导线至少有64根。
作为一个初级垃圾佬,我对计算机的硬件组成还是有些研究的,在主板上,要插入CPU,内存,显卡,网卡,硬盘(当然散热也要加)之后,插好电源线,连接好跳线,一个机箱就整好了,然后我们将显示屏的连接线接到显卡上边外露的接口上,把电源线接到电脑电源的接口上,给机箱后边的usb接口插上鼠标键盘,基本上就能开机了,计算机开机的过程是通过按钮制造一个电位差,发送到主板上,主板受到激活后就会启动(这里的更深层原理我还没有了解过),然后控制权首先在bios上,进行开机自检之类的计算机自我行为后,从硬盘上的主引导扇区开始读取信息,一般操作系统的地址都会存储在此,操作系统开始读入内存,计算机的指挥权限开始交给CPU,CPU从内存中连续不断吞吐来自硬盘的信息,不够的话会向内存发出请求,内存进而再从硬盘中读入更多的信息,从CPU中吞进来的操作系统信息在被处理后,会变为多个向其他设备发出的信息,如显卡,CPU会向显卡发出显示数据,这些数据会存储在显存中,显卡中的GPU通过其自身驱动的支持,快速的将这些信息编码为像素点阵信息,然后通过数据线发送给屏幕,屏幕显示出系统表现的界面,操作系统中的声音信息将被CPU发送给声卡,声卡将数字信号转码,并发送给喇叭,喇叭会将处理好的信号转化成连续的电磁信号,而操作系统中的网络请求信号将被网卡转送到路由器,路由器开始向计算机进行网络信息转发,至此,整个电脑进行了一次愉快的开机。
我们如今之所以能这么愉快的使用电脑,都是因为各种软件在给我们当垫子,在计算机发展的早期,对于计算机的操作是非常困难的,这里简述一下计算机各种基础软件的出现。在最早的最早,计算机刚刚出现的时候,人们是直接和CPU打交道的,人们直接将机器语言也就是01代码写进到纸带中,磁带中,硬盘中,然后再通过一个输入接口导入到电路中,整个计算机就可以开始计算处理了。然而久而久之人们发现了,在由01构成的机器语言中,存在很多重复的部分,因为一个项目中有可能很多地方都会用到同一个处理问题的方式,这种情况下,同样的一串01代码就有可能手写很多次,非常累,人们为了偷懒,就用一个简短的字母序列代表这串01代码,用到这个功能的时候就直接先把这个字母串拿过来,到最后输入给计算机时,再翻译为01代码,很快人们发现这种方法对程序设计者非常友好,程序设计者可以很轻松地用简短的代价写出之前庞大的01代码,因此人们开始着力发展这种封装思想的技术,并最终出现了汇编语言,同时人们发现,在使用者利用计算机处理问题时,必须手动的写程序控制计算机的整体运行,这非常的不方便,比如资源的分配,进程的调度都需要大家商量好然后写好之后再运行吗,这也非常的不方便,如果能把这个过程提前写好然后就让计算机自己来进行内部管理,这该有多好哇!因此,专注于计算机内部资源管理的操作系统出现了,操作系统的最关键的部分就是其内核,操作系统的内核大部分都是几十年如一日没什么变化的,如果一个软件仅仅调用系统内核中的库,那它的兼容性可能非常的高,很有可能2025年的该软件仍然兼容于1998年的win98。操作系统的内核功能其实就是控制计算机中的各种资源,硬件资源也好,进程信息也好,统统由系统内核来管,比如显卡的信息发送,硬盘的数据请求等,计算机正在愉悦的发展着,然而好景不长,时代变了。在早期是没有GPU一说的,网卡什么的也都不存在,计算机中的大部分功能都要由CPU来代劳,如屏幕中的文字显示。CPU完全胜任简单的文字显示,因为这并不需要什么算力,然而随着时代的发展,游戏出现了,游戏必然伴随着画面,这样一来CPU的显示处理能力就显得捉襟见肘,因为CPU具有快速的单信息处理能力,却不具有同时显现的能力,随着硬件技术的发展,开始有公司制作一种具有非常多的内核但是单核性能不强的处理器,为CPU进行显示加持,这就是GPU,GPU的多核使得其可以同时读取多个像素点阵信息并进行显示,当然,它们也是由CPU控制的,这时还没有驱动这一概念,随着时代的进步,时代又变了,游戏越来越花里胡哨,CPU虽然有了GPU的加持,仍然力不从心,因此人们专门开发了驱动程序,在硬件中运行并为CPU提供一个接口,CPU仅需处理一些简单的信息,然后将这些信息提交给驱动接口之后,就不用管了,这些信息的转码,编译等工作全部由驱动程序结合GPU来实现,这样一来就大大加速了图形的发展。
适配器以及适配器驱动的意义在于中和外设和计算机内部的速度差,因为大部分外设的速度都很慢,因此需要一个适配器来结合驱动程序做一个缓冲,将一些快速输入的信息进行处理后,再低俗的提交给外设。如打印机,打印机的速度远远慢于计算机的文字处理速度,因此其需要一个驱动程序完成一系列的工作保证其打印不会出错,通常情况下,打印机里边会有一个内存,需要打印的信息会先存在这个内存中,以队列的形式存储下来,然后逐一让打印机去打印,这样CPU就不会在打印时一直关注打印机,从而耽误其他的工作了,它仅需将信息发送给这个内存,然后就可以去干其他工作,这大大提升了CPU的效率,而驱动程序的作用就是接受CPU的信息,转存给打印机内存,驱动在这个过程中起到了灵魂作用,而打印机的硬件则是灵魂的肉体。
总而言之,对于计算机来说,驱动程序其实是在硬件中运行的,它为硬件和CPU提供一个快捷的接口,并加持硬件运算速度。对于操作系统来说,驱动并不属于计算机系统中的软件,操作系统的内核直接和他们打交道,在系统中,直接和硬件打交道的是系统的内核,操作系统的三大内核为苹果内核,linux内核,Windows内核,操作系统会有很多其他的乱七八糟的功能,这些功能均不属于内核,他们都是在内核基础上加装的其他外挂功能。