一起来探索从双击程序到开始运行期间计算机经历了哪些过程

前言

经常打开电脑双击桌面上的图标,之后就会跳出程序的界面,那么童鞋们有想过这期间计算机经历了什么吗?正所谓知其然知其所以然,了解了指不定还有机会向妹子科普一下(●ˇ∀ˇ●)。

计算机结构

一个程序想要运行肯定是依托于计算机的,尽管我们天天使用计算机,但能真正对计算机结构有系统了解的人不多。好吧我也不行,浅显的谈一下~~
计算机有五大组成部分,分别是运算器、控制器、存储器、输入装置和输出装置。而三大核心部件就是CPU(中央处理器)、主存储器、输入/输出设备。

CPU

CPU包含了我们常用的运算器和控制器,以及寄存器和时钟,它是计算机的核心部分。
运算器:实现算术运算和逻辑运算的部件。
控制器:计算机的指挥系统。
寄存器:可用来暂存指令、数据等处理对象,可以将其看作是内存的一种。根据种类的不同,一个CPU内部会有不同数量的寄存器。
时钟:负责发出CPU开始计时的时钟信号
可以说CPU就是计算机的大脑,一定程度上决定了这个计算机的性能。常见的CPU就是我们常说的i5、i7。
在这里插入图片描述

存储器

存储器是计算机中用来存放所有数据和程序的记忆部件,它的基本功能是按指定的地址存(写)入或者取(读)出信息。
计算机中的存储器可分成两大类:一类是主存储器(main memory),简称内存或主存;另一类是外存储器(辅助存储器),简称外存或辅存。 存储器由若干个存储单元组成,每个存储单元都有一个地址,计算机通过地址对存储单元进行读写。内存是利用电流来实现存储的,而外存(磁盘)则是利用磁效应来实现存储的。从存储容量来看,内存是高速高价,而外存是低速廉价。

内存
我们通常所说的内存,使用DRAM(动态随机存取存储器)芯片,DRAM可以对任何地址进行数据的读写操作,但需要保持稳定的电源供给并时常刷新以确保是最新数据。其通过控制芯片等与CPU相连,主要负责存储指令和数据。内存由可读写的元素构成,每个字节都带有一个地址编号。CPU可以通过该地址编号读取主存中的指令和数据,当然也可以写入数据。

外存储器(辅助存储器)
也就是我们所说的磁盘,磁盘中存储的程序,必须要加载到内存后才能运行。在磁盘中保存的原始程序是无法直接运行的,这是因为,负责解析和运行程序内容的CPU,需要通过内部程序计数器来指定内存地址,然后才能读出程序。即使CPU可以直接读出并运行磁盘中保存的程序,由于磁盘读取速度慢,程序的运行速度还是会降低。

输入/输出设备

这个应该好理解了,输入设备就是向计算机中输入信息(程序、数据、声音、文字、图形、图像等)的设备。例如键盘、鼠标、图形扫描仪等。而输出设备就是显示器、打印机和绘图仪等。

程序运行

铺(mo)垫(ji)了这么多(jiu),进入正题。
程序想要运行首先需要配置好运行环境,其次计算机真正能运行的程序是机器语言编写的程序也就是本地代码(native code),在你的Windows操作系统中,应用程序的本地代码,你应该很熟悉了,其实就是EXE文件及DLL文件等形式。
程序员用C、Java等高级语言先编写程序,在编写阶段仅仅是文本文件,文本文件在任何环境下都能显示和编辑,这其实就是源代码。然后通过对源代码进行编译,才能得到本地代码(EXE文件)。
在这里插入图片描述
双击它就进入了祖安大陆,我们前面已经谈到过,CPU直接从磁盘读取文件速度是非常慢的,所以我们会将LOL的本地代码先复制一份到内存,然后CPU才会解释执行其中内容。下面详细介绍一下:

运行环境

运行环境=操作系统+硬件。可以说运行环境是决定了程序能否运行的关键因素,一台机器的配置还决定了你能带动多大的程序。经常玩游戏的童鞋应该知道,游戏下载页中有个最低配置就类似于该程序的运行环境,如下图

在这里插入图片描述

EXE文件

EXE文件(executable可执行)是Windows操作系统中的二进制可执行应用文件。它可以加载到内存中,并由操作系统加载程序执行,是可在操作系统存储空间中浮动定位的可执行程序。大多数操作系统通过验证文件是否是有效的可执行形式来启动执行过程,以避免随机位序列被意外地作为指令执行。

DLL文件

Dynamic Link Library文件,顾名思义,是在程序运行时可以动态加载Library(函数和数据的集合)的文件。
计算机上有一类文件被称为库文件,就跟仓库一样,里面存放了很多代码,它分为两种,一种是静态库,另一种就是是动态库DDL文件,又叫动态链接库文件。静态库和动态库的区别是:静态库在程序的链接阶段(把目标文件链接产生可执行文件)被复制到了程序中;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。

Windows的操作系统本身也是多个DLL文件的集合体,当我们执行某一个程序时,相应的DLL文件就会被调用,有时在安装新应用是,DLL文件也会被追加。

一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。之所以要利用多个DLL文件,其中一个原因就是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的副本,因此可以节约内存。DLL文件还有一个优点就是,在不变更EXE文件的情况下,只通过升级DLL文件就可以更新。例如我经常玩的LOL中,小版本的更新和补丁的修复就是通过升级DLL文件来完成的。
在这里插入图片描述

程序运行示例

最后我们来看下程序运行的流程示例,为了描述能够形象具体,我用C语言编写小程序来给大家举例。

1、先用C语言编写程序
在这里插入图片描述
保存后桌面会生成这样的文件。
在这里插入图片描述
2、将程序编译后转换成机器语言的EXE文件
我在编写程序的Dev-C++软件点击编译运行,在电脑桌面上就会多了一个EXE文件
在这里插入图片描述
3、程序运行时,在内存中生成EXE文件的副本
双击桌面上的Hello.exe文件,此时你用Ctrl+Shift+Esc打开任务管理器就会看到此时内存中生成的EXE文件的副本(那个括号里面的数字就代表了文件副本的意思)
在这里插入图片描述
4、CPU解释并执行程序内容
程序开始运行弹出控制台窗口
在这里插入图片描述

看到这,相信你已经对程序的双击运行有了浅显的了解了,想要更深入学习程序运行过程,就需要去系统的学习计算机系统(慎入!学海无边,回头是岸啊!>&<)。不过了解这些足够忽悠一下电脑小白萌妹纸喽。

猜你喜欢

转载自blog.csdn.net/weixin_45797022/article/details/105798551
今日推荐