程序是静态的文件!
进程是程序的一次执行过程
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位!
进程=PCB + 程序段 + 相关数据段
注:PCB(Process Control Block)
进程具有:动态性、并发性、独立性、异步性、结构性
进程间通信常用三种高级通信方式:
- 共享存储
- 进程间共享一个(外部)存储空间,注意不是进程被分配的空间,因为进程的独立性。常用同步互斥工具(如:P操作,V操作)进行辅助
- 消息传递
- 直接通信方式:发送进程直接把消息发送给接收进程,将它挂在接收进程的消息缓冲队列上
- 间接通信方式:发送进程把消息发送到某个中间实体中,接收进程从中取得消息。这种中间实体一般称为信箱,这种通信方式也叫信箱通信方式。
- 管道通信:这是linux系统常用的一种方式。管道是一种特殊的文件,但是和一般的文件不一样。它的大小是有限制的,其作用是实现读写进程间的共享。即如果管道为空,则写进程可以将管道写满,然后读进程将其读空!值得注意的是,如果要写就一定要写满,如果要读就一定要读空。而且因此,管道只支持半双工通信。
引入了线程后,进程就只是拥有资源的最小单位,而线程则成了系统进行调度和分派的基本单位了。但是此时,进程仍然具有与执行相关的状态(创建、就绪、运行、阻塞、结束),而线程有三种基本状态(就绪、阻塞、运行)
线程是独立调度的基本单位,进程是拥有资源的基本单位
线程也有一点点很少的必不可少的资源,且多个线程共享这个进程的资源。
线程之间可以支持并发
线程切换只需要保存和设置少量寄存器内容,开销很小,且线程间同步和通信非常容易实现,甚至无需操作系统干预
某进程内的线程对其他进程不可见
进程间通信需要进程同步和护持手段的辅助,而线程间通信可以通过直接读写进程数据段(如全局变量)来进行通信。