进程 可执行文件

来源:互联网 发布:windows最高权限 编辑:程序博客网 时间:2024/06/06 00:08
              进程是系统中的一种抽象,是系统中竞争资源的基本单位,资源所涵盖的范围其实很广,软件是建立在硬件基础之上的,最终的行为还是会落实到硬件之上,在一个系统中的硬件部分中,熟悉每个硬件的功能以及每个硬件模块之间的通信有助于对整个软件系统的理解,毕竟软件是对硬件的一种抽象,抽象是在实体的基本之上构建的,如进程的内存地址空间和物理上的和CPU连接的地址总线所确定的物理地址,两者之间通过叫页表的数据结构来建立一种联系,对某一概念的抽象必须得对这种抽象进行一种描述,如进程这个抽象,在linux系统中是以数据结构struct task_struct来描述的,资源的抽象也是用数据结构来描述的,由于资源的类型很多,如进程的地址空间(由数据结构struct mm_struct来描述), 和文件系统相关的资源,和信号系统相关的资源等,因此在内核中(所谓内核代码,只是CPU在执行这些代码时处理一个特权的的level,在这个level可以执行一些特权操作,比如对其它设备进行读/写,而处于非特权时执行代码时不允许进行设备读写的,一般称为用户态,这是由硬件来保证这种安全机制的)就有不同的数据结构来描述不同的资源,进程描述符通过指针来链接进程所拥有的资源。 说白了,这些抽象在物理上不过是一些内存块,只是由电信号表示的0或者1而已,计算机的最基本模型就是给定一个输入,经过CPU的计算,给定一个输出,CPU和其它设备的交互就是读/写数据。软件代码也是一种资源,当把软件代码加载到内存中后,可以由不同的进程(进程只不过是在内存中一堆数据结构的集合,进程在向前推进的时候(即执行进程相应的代码时),CPU只访问和本进程相关的数据结构,不会试图访问其它进程的数据结构,即只访问物理内存中特定的内存区域)来共享,也就是不同的进程可以同时执行同一个程序,而同一个进程却不可能同时执行多个程序(程序是计算机指令的集合,在物理上表现为一个可执行文件,具有特定的文件格式,如ELF格式),可执行文件是用来构建进程的执行上下文的,即用可执行文件的有关内容来填充进程相关数据结构内的内容,当fork出一个子进程时,如果没有调用exe类函数时,子进程和父进程的执行上下文基本是一样的(前提是没有判断fork的返回值),创建一个进程时,内核会创建相应的数据结构来表述进程和对其进行管理,linux采用所谓的写时复制的机制来进行进程的创建,这样就节省了很多内存分配和复制的时间;当调用exe类的函数时,进程会根据一个给定的可执行文件来重新初始化相关数据结构的成员,如mm_struct结构,这样,进程的执行上下文就和父进程的执行上下文基本没太多的联系了。