CONFIGURATION FILES
1. example applications
	I use matrices which contain different amount of data as the sub jobs or processes of the
	whole application. These sub jobs can be replaced with any user provide source code
	or executable binary code.
	
	Application 1 and 2 are used to test the systems reaction to interdependent processes. 
	Application 3 is used the see the systems reaction to independent processes.
	
	Application1 includes processes Pr111, Pr112, Pr113, Pr114, Pr115, Pr121, Pr122, Pr123, Pr13, Pr14
	Application2 includes processes Pr211, Pr212, Pr213, Pr214, Pr221, Pr222, Pr23
	Application3 includes processes Pr31
	
	In particular, app1.txt (app2.txt app3.txt have the same format)
	<process-name>:<parent-process-name>#<port-number>
	
2. appinfo.txt
	<application1-name>:<arrival-rate of application1>;
	<application2-name>:<arrival-rate of application2>;
	<application3-name>:<arrival-rate of application3>;
	... ...
	<applicationN-name>:<arrival-rate of applicationN>;
	
3. serverinfo.txt
	<server-ip>:<server-path>#<arrival-rate>;

4. workerinfo.txt
	<worker-ip>:<worker-path>; 	

SERVER AND WORKER QUEUES
1. server-process-queue (swq.txt)	
	Find out the processes interdependent information of each application and put
	them into this queue.
	
2. server-application-queue (squeue.txt)
	Put the applications in this queue.


MAIN ALGORITHM

SERVER SIDE:
1. Generate the workload and make them arrive in Poisson arrival rate.
	(1) read appications information from appinfo.txt 
	(2) read servers information from serverinfo.txt
	(3) read workers information from workerinfo.txt
	(4) It reads the arrival rate defined at appinfo.txt file and 
		multiply with the value of a Poisson function and a random value. 
		(i.e. result = arrival-rate * Poisson-value * random-value)

2. Make decision every second and put the applications in server-application-queue (squeue.txt).
	if (result>0.5) then{
		load the corresponding application process, for example process Pr111 represent to app1 
		i.e. (1) read the application information from app1.txt
		insert the application name into the server queue
		i.e. (2) write the application information to squeue.txt 
	}

3. Find out the processes interdependent information of each application and put
   them into server-process-queue (swq.txt).
	i.e. write processes information to swq.txt
	
4. Calculate each workers virtual work load.
	
5. Newly arrived processes (during run time) are allocated by the central scheduler
   to the most light-loaded nodes Wait Queue according to FIFO policy.
	i.e. write the new processes' information into server-process-queue (swq.txt)
	
6. Processes with no parent processes will be put directly in the Ready-to-run Queue.
   Other processes will be put in the waiting queue of the worker.

WORKER SIDE:
1. When processes in Ready-to-run Queue finishes its job, they saves the intermediate result locally.

2. When all the processes in Ready-to-run Queue finished their job ,the worker
   will put the first process of Wait Queue to Ready-to-run Queue.

3. Whenever a process at the front position of the waiting queue can not be running
   because of the interdependency restriction, it will notify the server and the
   server looks for the parent processes.

4. Worker recalculates its process capability periodically and informs the server.
