1. Simple to install;
2. Simple to configure;
3. Multiple applications from one user can implement;
4. Multiple users can each use PVM concurrently;
5. C, C++, and Fortran supported;
6. Package is minute;
7. Users can select the group of machines for a given run of a PVM program;
8. Process-based computation;
9. Heterogeneity support, and
10. Explicit message-passing model
When the PVM is begins it examines the virtual machine in which it is to function, and makes a process called the PVM demon, or simply pvmd on every machine. An example of a daemon program is the mail programs that runs in the background and take care all the incoming and outgoing electronic mail on a computer, pvmd gives inter-host point of contact, authenticates task and implements processes on machines. It also gives the fault detection, routes messages not from or intended for its host, transfer messages from its application to a destination, receives messages from some other pvmd's, and buffers it until the destination application can take care it.
PVM gives a library of functions, libpvm3.a that the application programmer calls. Every function has some particular effect in the PVM. Though, all this library really gives is a convenient way of asking the local pvmd to perform a few works. The pvmd then acts as the virtual machine. Both pvmd and PVM library considered the PVM system.
The PVM system supports data decomposition as well as functional model of parallel programming. It attached with C, C++, and FORTRAN. The C and C++ language attaching for the PVM user interface library are executed as functions (subroutines in case of FORTRAN) . User programs written in C and C++ can access PVM library by connecting the library libpvm3.a (libfpvm3.a in case of FORTRAN).
Every PVM tasks are uniquely identified by an integer known as task identifier (TID) assigned by local pvmd. Messages are sent to and received from tids. PVM haves several routines that return TID values so that the user application can classify other tasks in the system. PVM also supports sets of tasks. A task may belong to more than one set and one task from one set can communicate with the task in the other groups. To use one of the group functions, a program must be connected with libgpvm3.a.