首页 > linux下,进程和可执行程序(bin文件)是一个概念吗?

linux下,进程和可执行程序(bin文件)是一个概念吗?

linux下,进程和可执行程序(bin文件)是一个概念吗?
如果是的话,那我在一个可执行文件里调用fork()函数,此时就出现了两个进程,但此时可执行程序还是只有一个,这又该如何解释呢?
Windows下,貌似进程和exe文件是一个概念吧?


什么操作系统下,进程和可执行程序也不是一个概念啊。进程是内存中正在运行的实例,可执行文件是硬盘上的文件,怎么能是一个概念呢?操作系统把硬盘上的文件调入内存执行,这时就产生了一个进程,如果操作系统再次把同一个可执行文件再次调入内存,这时可执行文件还是那同一个,但是内存里就产生了两个进程。


并非同一概念,就算是win,你的理解也错了。

你可以这样简单地理解:

exe和bin是机器能够识别和执行的二进制机器代码,而这个代码是存放在硬盘中的,在CPU看来,硬盘是一个很远而且很慢(电路方面来说)的存储器(下面会讲到),如果代码直接在硬盘上执行,那几乎是不可能的。

那要怎么办才好呢?

取而代之的解决方案就是将代码复制到内存中,内存是比硬盘快很多的(但依旧很远),所以如果要将一个二进制机器代码跑起来,就先要将它加载到内存。

进程是指进行中的程序,是指在内存的那一段代码副本,而bin和exe通常是指在硬盘中那一个可执行文件副本。

在win的进程管理器上可以找到进程对应的exe文件只不过是系统提供的便捷功能,其实进程和exe是两回事。


这里说的远近快慢其实是就电子的移动速度和距离来说的,因为速度是一定的,电子流要从cpu到达内存和硬盘需要不同的时间。

硬盘和固态硬盘(固态硬盘所用的存储芯片和内存的不同,是非易失性储存芯片),他们为了长时间储存数据牺牲读写速度,所以他们不会掉电失忆。

而内存这种可以执行代码的很快的闪存技术(易失性储存芯片),为了使其可以快速读写,设计时牺牲了数据可以长时间保存的特性,所以内存会掉电失忆,目前并不存在能兼顾两者的完美闪存。

可以这么说,要长久得存储数据,必须牺牲执行时的读写速度;而要有高速的执行时读写速度,就必须牺牲长久保存数据的能力。

对于cpu来说,最近的存储器是cpu内部的寄存器,其次是cpu自带的高数缓存,然后才到内存,最远的是硬盘,他们的读写速度由最快到最慢排列(因为电子流过的距离会变得越来越长,而且因为技术上的关系,限制了他们的读写速度不一样)。


运行一个程序的本质就是将它在硬盘的二进制代码副本一级一级地从低速储存器读到高数储存器,最后到达cpu内部的寄存器。

然后cpu对寄存器里边的数据进行加减移位运算,再一级一级将结果回写或输出到低速储存器或者像屏幕或者打印机这一类设备上。


再追加一小点关于不同两大类闪存的设计介绍:

我们知道,计算机上一切都是二进制,都可以用电路的开(通路)和关(断路)两种状态来表达。

像是内存这种易失性存储器的设计,它们内部的储存单元在存储数据的时候需要进行充电才能保留当前的开关状态。所以它们要不断对每个单元进行充电,才能保存数据,而要在这种存储器种读取和写入数据的话就要在两次充电之间操作,在充电过程中是无法进行操作的,一旦掉电,它内部单元由于没办法再进行充电,开关状态无法保留,就会导致所有数据丢失。

像是储存卡,固态硬盘一类的非易失性存储器的设计刚好相反。由于数据储存非常重要,如果像是易失性存储器那种设计的话,就必须要时刻保持通电状态,并且绝对不能断电,这是非常不环保不科学也不太可能实现的。

所以人们就研发出了一种内部单元可以在断电后,还可以留存微量电量并使其衰减得非常慢的存储器,使得存储器不再需要时刻需要充电就可以长时间保存数据。但是这种芯片如果你长时间不使用,内部电量完全衰减之后,数据还是会丢失的。

由于易失性和非易失性刚好是为了解决两个可以说是互相对立的问题而分化出来的设计,就目前的技术而言,是无发将两个取向的芯片取其精华去其糟粕地完美合二为一的。

【热门文章】
【热门文章】