进程(Process)

进程是操作系统结构的基础,是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念。进程是一个具有独立功能的程序关于某个数据集合的一次运行活动,它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。

1.      进程的概念

l进程是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元;

l对应用程序来说,进程就像一个大容器。在应用程序被运行后,就相当于将应用程序装进容器里了,你可以往容器里加其他东西(:应用程序在运行时所需的变量数据、需要引用的DLL文件等)

l从理论角度看,进程是对正在运行的程序过程的抽象,从实现角度看,进程是一种数据结构,目的在于清晰地刻划动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。

2.      进程的内容和状态

进程由进程控制块、程序段、数据段三部分组成。一个进程可以包含若干线程(Thread),线程可以帮助应用程序同时做几件事,在程序被运行后,系统首先要做的就是为该程序进程建立一个默认线程,然后程序可以根据需要自行添加或删除相关的线程。进程在运行时,状态(state)会改变:

l新生(new):进程新产生中;

l运行(running):正在运行;

l等待(waiting):等待某事发生,例如等待用户输入完成;

l就绪(ready):排队中,等待CPU

l退出(terminated):完成运行;

状态之间的转换关系如图:

process

3.      进程死锁

如果多个进程同时占有对方需要的资源而同时请求对方的资源,而它们在得到请求之前不会释放所占有的资源,那么就会导致死锁的发生。

l死锁产生的原因:一是系统提供的资源太少,远不能满足并发进程对资源的需求;二是由于进程的推进顺序不合适

l产生死锁的必要条件:互斥条件(Mutual exclusion)、请求与保持条件(Hold and wait)、非剥夺条件(No pre-emption)和循环等待条件(Circular wait

l死锁的预防:采用资源静态分配策略,破坏“部分分配”条件;允许进程剥夺使用其他进程占有的资源,从而破坏“不可剥夺”条件;采用资源有序分配法,破坏“环路”条件。最著名的死锁避免算法是银行家算法

4.      进程间通信

进程间通信(IPCInter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法。进程是计算机系统分配资源的最小单位,每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。这些进程可以运行在同一计算机上或网络连接的不同计算机上。进程间通信技术包括消息传递、同步、共享内存和远程过程调用。IPC是一种标准的Unix通信机制。主要的IPC方法:

l信号Signals信号是Unix系统中使用的最古老的进程间通信的方法之一。操作系统通过信号来通知进程系统中发生了某种预先规定好的事件(一组事件中的一个),它也是用户进程之间通信和同步的一种原始机制;

l套接字(Socket:更为一般的进程间通信机制,可用于不同机器之间的进程间通信。

l消息队列(Message queue消息队列就是消息的一个链表,它允许一个或多个进程向它写消息,一个或多个进程从中读消息;

l管道(Pipe)和命名管道(Named Pipe:管道可用于具有亲缘关系进程间的通信,命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;

l信号量(Semaphore:主要作为进程间以及同一进程不同线程之间的同步手段;

l共享内存:通常由一个进程创建,其余进程对这块内存区进行读写;

l消息传递(Message passing(不共享):用于MPI规范,Java RMICORBAMSMQ MailSlot 以及其它;

l内存映射文件(Memory-mapped file:内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它。

java实现进程间通信的方法主要有socket、RMI和CORBA

猜你喜欢

转载自cake513.iteye.com/blog/1184913