Introduction to Lab 1: Understanding Migratable Processes and Transactional File Streams
Explore the fundamentals of lab 1, covering topics such as Migratable Processes, Transactional File Streams, Process Managers, Command Line Parsing, Launching Processes, and Thread Management. Delve into key concepts and implementations to kickstart your understanding of this practical project.
Download Presentation
Please find below an Image/Link to download the presentation.
The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.
E N D
Presentation Transcript
Getting Started on Lab 1 ksu@andrew
Requirements MigratableProcess TransactionalFile{Input, Output}Stream ProcessManager MigratableProcesses
MigratableProcess A simple interface which extends two other interfaces: Runnable: void run(); Given an object, can start a new thread Serializable: Can marshal/unmarshal the object Does NOT serialize volatile (and transient) fields You ll also want void suspend(); declared
TransactionalFile{Input, Output}Stream Traditional file input/output Pseudocode: File opened once Read: Read n bytes from file descriptor What s the problem here?
TransactionalFile{Input, Output}Stream A transactional read Read: Open file each time for read on first open initialize i := 0 Read n bytes starting from i i = i + n Close file State kept in class, not file descriptor
ProcessManager The meat of the project Several important parts to this: Command line parser (robust!!!) Launching a process Joining terminated threads Lastly, the distributed part
Command Line Parsing Look at String.split() Breaks a string apart This lab is fun => { This , lab , is , fun } Make sure your parser is robust Should not crash on unrecognized input Test it yourself, because we will :D
Launching a process Object to be run given to you as a String What do we do now? The Reflection API!!! Can use it to get the class from a String Class<?> myClass = Class.forName( Foo ); Can also get the constructor Constructor myCtor = myClass.getConstructor() Thread t = new Thread(myCtor.newInstance( ));
Joining a thread Threads have a join function Waits for that thread to die Can be used to wait for threads to finish Be sure to maintain your list of running processes as well
The Distributed Part: Communication Can use Sockets 2-way communication Socket class in Java We want to send objects across the network Here s where the serializable comes into play Object{Input, Output}Stream
The Distributed Part: Master/Slave Master accepts incoming connections from slaves (does not need to know their hostname ahead of time!) Slave connects to master Must know hostname ahead of time The -c [masterhostname] flag
The Distributed Part: Load Balancing Every 5 seconds or so, you ll want to check the load across all nodes Redistribute the load Use the suspend here Suspend process Package it up Send to slave node to run
Migratable Processes There s a Grep example on the course website These must have a run() and a suspend() run() Called to start the process Called for both the initial start as well as resuming suspend() Called to tell a process to pause Way for a process to gracefully save its state Blocks until the run() is finished suspending (why??)
Migratable Processes To write one, wrap the main work loop with a check on a suspending variable Don t forget to make it volatile (why?) When loop breaks, save state, then restore suspending to old value This will wake up the suspend() call