程序和进程是操作系统中的重要概念,程序是可运行的一组指令,程序以二进制代码的形式保存在存储设备中。操作系统运行程序后,该程序在内存中的映像就是进程,进程是活动的程序。
1、程序
程序是指一组指示计算机或其他具有信息处理能力设备每一步动作的指令。Linux系统下的应用程序主要由两种特殊类型的文件代表,分别是可执行文件和脚本程序。可执行文件是能够被计算机直接执行的程序,相当于Windows系统中的exe文件。使用C和C++语言设计的程序编译后即是可执行文件。Linux系统不要求可执行文件使用特定的扩展名,文件是否能被执行由文件的系统属性来决定。
系统可执行文件存放在:/bin
root可执行文件存放在:/usr/bin
用户可执行文件存放在:/usr/local/bin
(一般是用户安装的软件)
其实linux下的可执行程序没有向windows那样,分的很开,不会有扩展名的限制,一个编译好的文件ffff,在终端使用./ffff,就可以执行了或者使用sudo ./ffff,大家不妨自己试一下
2、进程
进程是一个具有独立功能的程序关于某个数据集合的一次可以并发执行的运行活动,是处于活动状态的程序。进程作为构成系统的基本元件,不仅是系统内部独立运行的实体,而且是独立竞争资源的实体。在Linux系统中,用户创建进程时会先在系统的进程表中为进程创建独一无二的编码,即PID。PID是一个正整数,取值范围在2到32768之间。进程创建时会顺序挑选下一个未使用的编号数字作为自己的PID,如果他们已经经过一圈的循环,新的编码重新从2开始。数字1一般是为特殊进程init保留的,它负责管理其他的进程。
用top命令可以看到当前的进程,pid,cpu占用率等信息。
三个用于进程控制的主要函数为:fork,exec和waitpid。
3、线程
线程是在共享内存空间中并发的多道执行路径,他们共享一个进程的资源,如文件描述符和信号处理。操作系统在两个进程间进行切换时,要对前一个进程进行保护现场操作,对后一个进程进行还原现场操作。反复进行上下文切换会带来极大的系统开销,CPU必须为此分配一定的时钟周期。线程则无需进行上下文切换,因为多个线程共享同一个进程的上下文。多个线程也共享同一个进程的CPU时钟周期,进程的状态并为因线程切换而改变。
4、线程与线程id
通常情况下,一个进程只有一个控制线程,同一时刻只执行一组机器指令,对于有些问题,如果不同部分各使用一个控制线程,那么整个问题解决起来就容易的多,而且多个控制线程也能利用多处理器系统的并行性。在进程内的所有线程共享一个地址空间,文件描述符,栈以及进程相关的属性,因为他们能访问同一个存储器区,所以各线程在访问共享数据时候,采取同步措施以免不一致。
与进程相同,线程也有ID,但是线程ID只在他属于的进程内部起作用,一个进程中的线程ID在另一个进程中没有意义,当一个进程对多线程操作时,我们用线程ID引用相应线程。控制线程的函数与控制进程的函数类似,在进程模型建立很久之后,线程模型才被引入到系统中,两个模式存在相互复杂的关系。