计算机执行过程


计算机通过键盘和鼠标等输入设备将用户输入数据读入内存,或者通过外部存储器例如硬盘或光盘将数据读入内存, 再经由中央处理器算数和逻辑单元运算处理后放入内存,最后经由内存输出到屏幕等输出设备或储存到硬盘等存储设备, 整个过程由计算机硬件和软件协同运作完成。

中央处理器 (Central Processing Unit, CPU)的主要工作在于控制与运算,包含算数逻辑单元与控制单元。 其中算数逻辑单元主要负责程序运算与逻辑判断,控制单元则控制协调周边组件与各单元间的工作。 CPU从内存中读取数据,内存中的数据则是从输入单元传输进来。而CPU处理完毕的数据也必须要先写回到主内存中,最后数据才从内存传输到输出单元。

可以简单将计算机比作人体,人体的耳鼻喉手脚等相当于计算机的外部设备,cpu相当于大脑中的运算控制区域, 控制着人体耳鼻喉手脚等外部设备的动作,cpu要判断和处理的数据来自内存, 内存就相当于大脑中暂存记忆的区域, 该部分存放的数据都是通过耳鼻喉手脚等外部设备输入的即时信息, cpu从暂存记忆的区域,也就是内存中读取这些即时信息并处理后,再存放到内存中,同时控制外部设备进行相应的动作。
如果cpu觉得处理后的信息可以作为永久记忆存放,那么就会控制内存将数据存入硬盘,硬盘就相当于大脑中存放永久记忆的区域。 而主板就相当于人体的神经系统,连接着大脑和手脚等外部设备。人体的活动需要动力来源,就是心脏,而计算机也需要动力来源,就是电源。 电源就相当于人体的心脏,为计算机提供动力来源。
显示适配器相当于大脑中的影像,将来自眼睛的刺激转成影像后在大脑中呈现,所以显示适配器所产生的数据源也是CPU控制的。
我们举一个小孩被猴子咬大哭逃跑的反应处理过程。
小孩就相当于整部计算机,"手指头被猴子咬"就是计算机要处理的数据信息,眼睛和手相当于键盘或鼠标等输入设备, 手将"被猴子咬的"信息输入到大脑的暂存区域也就是内存,cpu从内存区域读取"手被猴子咬了"的信息数据, cpu判断这个猴子对自己会有伤害,于是将猴子标记为有害,并放回内存中。同时控制眼睛哭,手臂和腿摆动跑起来!
小孩在经过这么一次惊吓后,cpu判断"这只猴子对自己有害的"信息需要永久记忆保存,于是便将该信息从暂存信息的内存区域, 存入可以保存永久信息的大脑区域,也就是计算机的硬盘或者光盘,等下次再碰到猴子,眼睛就会将猴子信息读入内存,cpu将硬盘信息也读入内存, cpu比较内存中的两个输入信息,发现以前被猴子咬过,再次控制腿脚摆动逃跑!这就是人工智能自我学习的过程!

整个活动中最重要的就是大脑! 整部主机当中最重要的就是 CPU 与主存储器, 大脑当中与现在正在进行的工作有关的就是CPU与主存储器!
任何外界的接触都必须要由大脑中的主存储器记录下来, 大脑中的CPU依据这些数据进行判断后,向各个接口设备发送控制指令! 如果需要用到过去的经验, 就得由过去的经验(硬盘)当中读取!
CPU的数据源来自于主存储器,如果要由过去的经验来判断事情时,也要将经验(硬盘)读取到当前主存储器中, 再交由CPU来判断!

抽象的理论讲的再多都不如一个具体的例子来的实在。我们以在linux的shell命令行下执行命令为例, 介绍在执行一条命令的过程中计算机硬件各组成部分和软件是如何参与到整个过程的。假设我们在shell命令行下执行了如下命令:

                vim /home/initroot/test.txt
              
通过whereis vim我们发现vim命令的可执行文件存放在磁盘目录/usr/bin/vim中。 shell读取键盘输入,将键盘输入读入内存并将键盘输入回显到屏幕。根据用户输入的命令,shell将文本处理程序vim从磁盘目录/usr/bin/vim中加载到内存中执行, vim打开磁盘文件/home/initroot/test.txt并读入内存,同时将文本文件的内容显示到屏幕上并等待用户的键盘输入。

整个过程涉及到cpu、内存、磁盘、键盘、显示器以及两个计算机程序shell和vim。一般情况下,计算机程序都是存储在磁盘中的某个可执行文件中, 通过whereis即可查看可执行文件的目录,例如shell可执行文件目录为/bin/bash,vim的可执行文件目录为/usr/bin/vim:

                initroot@initroot:/home/initroot$ whereis vim
                vim: /usr/bin/vim.tiny /usr/bin/vim.basic /usr/bin/vim /etc/vim /usr/share/vim /usr/share/man/man1/vim.1.gz
                initroot@initroot:/home/initroot$ whereis bash
                bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz
                initroot@initroot:/home/initroot$
              
shell在linux开机启动的时候已经从硬盘加载到内存中,cpu从内存中一条一条读取并执行shell程序指令。

我们将存储在磁盘中的可执行程序称为程序,而加载到内存被cpu执行的程序称为进程。
同一时刻,内存中会存在多个进程,而同一时刻cpu只能同时执行一个进程,这么多进程,cpu该选择哪个进程执行呢? 这么多进程都同时驻留在内存中,那么内存是如何分配给这些进程的呢? 这就是linux操作系统的作用了,linux操作系统最基本也是最重要的作用就是进程调度和内存管理了。
linux也是存储在磁盘里的计算机程序(在嵌入式系统中存放在flash设备中),一般存放在/boot目录下, 在开机启动的时候由引导程序bootloader(grub或uboot)加载到内存中,此后便常驻在内存中。

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读