老王的JAVA基础课:第1课 计算机基础知识

前言

看到标题你可能会问了,说好的java课程,你跟我扯计算机基础?别着急,学编程不可一蹴而就。我们必须对计算机系统有一个起码的认识必须知道程序是如何运行的,又在哪里运行。这其中的数据流向又是怎样的,只有清楚这些知识我们才能在开发的过程中对代码和数据有一个起码的掌控能力。

主板长啥样?

你可能又会问了,为什么一开始要讲主板?因为我们程序的输入输出都依赖主板和常驻在主板上的器件,如CPU、内存条。我们先来看实际的主板。
在这里插入图片描述
这是一块华擎H310主板,可以看出它有一个CPU插槽(橙色),两个内存插槽(红色),三个PCIE插槽,其中紫色可以插上显卡,两个白色框可以用来插上声卡或网卡等设备。所有的内存设备都会直接或间接与CPU关联,因为计算机系统内只有CPU可用来做逻辑运算。当然,现代显卡也已经支持浮点计算了。对主板有了概念,下面我们来看程序是如何被加载和运行的。

QQ是如何运行的?

在这里插入图片描述
以QQ为例。简单来说分为以下几个步骤。

  1. 首先我们下载QQ安装包,QQ安装包通过腾讯服务器传输到我们的网卡设备,网卡接收QQ安装包后存入硬盘。
  2. 我们双击QQ安装包进行安装,这是一种类似解压的过程,也包含了一些其他文件的释放和写入。安装完毕后通常桌面上会出现QQ的快捷方式。
  3. 双击QQ快捷方式,QQ主程序启动,将必要的数据通过主板上的总线(导线组成的传输线束)传输到内存中,桌面出现QQ登录界面。至此QQ启动完毕。
  4. 我们通过QQ和朋友聊天,我们在聊天框输入的消息首先会被传输到内存中等待被CPU处理,接下来在某个时刻会被传输到CPU中处理成QQ服务器能“看懂”的消息体,然后CPU将此数据通过主板上的总线传输到网卡设备,最后网卡将消息数据传输到远端服务器。由服务器下发到你朋友的QQ。

几个重要概念:

  • 网卡:连接计算机和网络的关键设备,我们访问互联网的任何数据都是通过网卡接收而来,我们发出去的消息也必然经过网卡传输,每张网卡在互联网上都有一个独一无二的MAC地址,类似我们的身份证,全世界唯一。其他人最终都是通过这个“身份证号”找到我们。
  • 硬盘:硬盘是计算机最主要的存储设备,现在常见的硬盘类型有HDD、SSD、NvME(结构不一样,读写速度不一样),在硬盘中的数据关机后不会丢失。
  • 内存:计算机中所有程序的运行都是在内存中进行的,就就像QQ要运行,首先就要被加载到内存中才能与CPU打交道,内存中的数据关机后会丢失。
  • CPU:中央处理器(CPU,central processing unit)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。我们只需记住,任何数据最终一定在CPU中处理,其他设备只能被存取而不能计算数据。
  • 总线:简单说就是主板上连接CPU、内存、网卡和其它设备的数据通路。计算机的总线类型可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。

主板硬件逻辑

在这里插入图片描述
按照我们上面的思路,可以得到以上这张简化过的主板逻辑图,首先我们回想一下QQ的运行是什么样的。可以看到其中多了一样东西——DMA。

DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。

百度百科

简单来说DMA是主板上一个独立的芯片,可以被用来控制数据从硬盘加载到内存,或者从内存回写到硬盘的。试想如果没有这个芯片。我们每次读写数据都要先把数据发送到CPU,让CPU输出到其他目标内。这个过程占用了CPU资源会导致我们在复制和传输文件的过程中系统假死,正是因为有了这个芯片,我们可以在传输文件的同时,还可以做其他工作而系统负载并不会升高。

再谈QQ的运行过程

现在我们以更专业一点的角度来谈谈QQ的运行过程。

  1. 我们双击了QQ快捷方式打算启动QQ主程序,操作系统会捕获这个事件通知CPU加载QQ程序。
  2. CPU向DMA发出读取QQ主程序信号,然后CPU继续处理其他事情。这个时候DMA获得控制权开始从硬盘读取QQ主程序加载到内存中。
  3. DMA读取完毕后将通知CPU:“数据加载完了,你可以开始干活了”,这个时候CPU开始正式与内存做交互。
  4. CPU通过地址总线找到QQ主程序在内存中的地址,同时通过控制总线发出读的命令到内存,内存收到类似“在0xA9D9152B位置读取数据”的指令,定位到这个内存位置通过数据总线向CPU传输这段数据,CPU开始执行计算逻辑。
  5. CPU计算完数据后需要将数据发送给网卡设备,通过地址总线、控制总线和数据总线向网卡发送类似“我将向0x8275DA90位置写入数据”的指令。至此数据发送到网卡设备。
  6. 最终网卡会将这些数据按照合适的格式发送到路由器等设备。

内存地址空间

概念:由各类内存设备(注意不包括硬盘等外设)组成的一段整体的、虚拟出来的地址空间,这么说可能有点抽象,我们来看图。CPU是如何看待这些设备的。老王:CPU你怎么看​?​CPU:我看个屁,这不就一整个嘛。
CPU视角看存储器
我们可以看出,CPU始终通过总线控制这些内存设备的输入输出。把这些设备当做一个整体的内存空间的好处在于CPU不需要在意某段内存空间是什么,直接写入或读取就完事了,以上图为例:
0x00000000~0x99999999为内存(这里指的内存条)空间
0xA0000000~0xE9999999为显存空间
0xF0000000~0xFFFFFFFF为网卡空间

今天的课就到这里,我们应该对计算机系统有了一个初步的了解,这将会对我们后面的学习打好基础。有任何疑问可以私信我,接下来我们将会学习如何安装集成开发环境(IDE,Integrated Development Environment ),即将推出~

本文章同时发布在微信公众号:Java学步园,欢迎关注点个赞再走~

猜你喜欢

转载自blog.csdn.net/u011580177/article/details/106392488