\documentclass{article} \usepackage{listings} \usepackage{hyperref} \usepackage{graphicx} \usepackage{float} \begin{document} \title{EOPSY Lab 3 Report} \author{Krzysztof Rudnicki, 307585} \date{\today} \maketitle \section{Introduction} ALL TEXT SURROUNDED BY [] LIKE \cite{lab3 Manual} SHOULD BE CLICKABLE AND LEAD EITHER TO WEBPAGE OR PLACE IN THIS DOCUMENT \\ The goal of the laboratory was to create three scenarios using config file and then investigate how those scenarios played out. \\ Scenario 1: 2 Processes \\ Scenario 2: 5 Processes \\ Scenario 3: 10 Processes \\ We had to get to know how the schedulers work, how they switch. \cite{lab3 Manual} \paragraph{First come first serve} We used First come first serve algorithm $\rightarrow$ This algorithm simply executes the process which arrived first. The process that requests CPU as a first process gets the CPU first. It is easy to implement and understand. We just use Queue data structure and we pick processes from the head of the queue and new procesess are added at the tail of the queue. \cite{First come first serve} \begin{figure}[H] \caption{First come first serve example graphic from \href{https://www.geeksforgeeks.org/program-for-fcfs-cpu-scheduling-set-1/}{[Geeks for Geeks]}} \includegraphics[width=\textwidth]{FCFS} \end{figure} \paragraph{Other algorithms} \cite{Other scheduling algorithms} \begin{enumerate} \item Shortest-Job-Next - Executes first processes that will take least time to finish \item Priority Scheduling - Each process gets assigned a prority and we execute them from the process with highest priority to the process with lowest prority \item Round Robin Scheduling - We give each process a constant time to execute, after this time expires regardless whether process finished or not we go to another process untill all of them are finished \end{enumerate} \section{Explanation of types of values in summary results and summary process} \subsection{Summary Results} \begin{itemize} \item Scheduling Type - Type of scheduling algorithm used \item Scheduling Name - Name of the scheduling algorithm \item Simulation Run Time - How long simulation run \item Mean - Average runtime for the processes \item Standard Deviation - Deviation from mean \item Process \# - Process number \item CPU Time - Total runtime for the process \item IO Blocking - How long process runs before it is blocked for input or output \item CPU Completed - How long runtime completed for the process \item CPU Blocked - How often the process was blocked \end{itemize} \cite{lab3 Manual} \subsection{Summary Processes} \begin{itemize} \item process-number - Process number assigned by simulator \item process-status - Registered - process can be used by scheduling algorithm, I/O blocked - process blocked for input or output, Completed - process met or exceeded execution time \item cpu-time - Total amount of runtime allowed for this process \item block-time - amount of time before blocking process \item accumulated-time - how long the process has already executed (appears twice) \end{itemize} \cite{lab3 Manual} \section{Scheduling conf settings} \begin{lstlisting} // # of Process numprocess 2 or 5 or 10 // mean deivation meandev 2000 // standard deviation standdev 0 // process # I/O blocking process 500 process 500 (more if we set numprocess to 5 or 10) // duration of the simulation in milliseconds runtime 10000 \end{lstlisting} \section{Two processes} \subsection{Summary Results file} \begin{lstlisting} Scheduling Type: Batch (Nonpreemptive) Scheduling Name: First-Come First-Served Simulation Run Time: 4000 Mean: 2000 Standard Deviation: 0 \end{lstlisting} \begin{center} \begin{tabular}{| c | c | c | c | c |} \hline Process\# & CPU Time & IO Blocking & CPU Completed & CPU Blocked \\ \hline 0& 2000 (ms)& 500 (ms)& 2000 (ms)& 3 times \\ \hline 1& 2000 (ms)& 500 (ms)& 2000 (ms)& 3 times \\ \hline \end{tabular} \end{center} \subsection{Summary Processes file} \begin{lstlisting} Process: 0 registered... (2000 500 0 0) Process: 0 I/O blocked... (2000 500 500 500) Process: 1 registered... (2000 500 0 0) Process: 1 I/O blocked... (2000 500 500 500) Process: 0 registered... (2000 500 500 500) Process: 0 I/O blocked... (2000 500 1000 1000) Process: 1 registered... (2000 500 500 500) Process: 1 I/O blocked... (2000 500 1000 1000) Process: 0 registered... (2000 500 1000 1000) Process: 0 I/O blocked... (2000 500 1500 1500) Process: 1 registered... (2000 500 1000 1000) Process: 1 I/O blocked... (2000 500 1500 1500) Process: 0 registered... (2000 500 1500 1500) Process: 0 completed... (2000 500 2000 2000) Process: 1 registered... (2000 500 1500 1500) Process: 1 completed... (2000 500 2000 2000) \end{lstlisting} \subsection{Comments} Scheduling type was Batch since I did not change it in SchedulingAlgorithm.java file \\ Scheduling Name was First-Come First-Served since this is what what we use as described in README for this laboratory \\ Simulation Run time is 4000 ms and NOT 10000 ms since the simulation finished before it exceeded this max time \\ Mean is 2000 since this is a value I set in conf value according to laboratory task description, same with standard deviation equal to 0 and CPU Time equal to 2000 ms \\ IO Blocking is equal to 500 ms, this is a value which we specified in configuration file and since we did not exceeded the runtime parameter it stayed equal to 500 ms \\ CPU completed is equal to 2000 since this is deviation we set in configuration settings and the runtime was not exceeded \\ All processes blocked 3 times, analysing summary processes we can see that they blocked at 500 ms, 1000 ms and 1500 ms and at 2000 seconds they completed \section{Five processes} \newpage \subsection{Summary Results file} \begin{lstlisting} Scheduling Type: Batch (Nonpreemptive) Scheduling Name: First-Come First-Served Simulation Run Time: 10000 Mean: 2000 Standard Deviation: 0 \end{lstlisting} \begin{center} \begin{tabular}{| c | c | c | c | c |} \hline Process\# & CPU Time & IO Blocking & CPU Completed & CPU Blocked \\ \hline 0& 2000 (ms)& 500 (ms)& 2000 (ms)& 3 times \\ \hline 1& 2000 (ms)& 500 (ms)& 2000 (ms)& 3 times \\ \hline 2& 2000 (ms)& 500 (ms)& 2000 (ms)& 3 times \\ \hline 3& 2000 (ms)& 500 (ms)& 2000 (ms)& 3 times \\ \hline 4& 2000 (ms)& 500 (ms)& 2000 (ms)& 3 times \\ \hline \end{tabular} \end{center} \subsection{Summary Processes file} \begin{lstlisting} Process: 0 registered... (2000 500 0 0) Process: 0 I/O blocked... (2000 500 500 500) Process: 1 registered... (2000 500 0 0) Process: 1 I/O blocked... (2000 500 500 500) Process: 0 registered... (2000 500 500 500) Process: 0 I/O blocked... (2000 500 1000 1000) Process: 1 registered... (2000 500 500 500) Process: 1 I/O blocked... (2000 500 1000 1000) Process: 0 registered... (2000 500 1000 1000) Process: 0 I/O blocked... (2000 500 1500 1500) Process: 1 registered... (2000 500 1000 1000) Process: 1 I/O blocked... (2000 500 1500 1500) Process: 0 registered... (2000 500 1500 1500) Process: 0 completed... (2000 500 2000 2000) Process: 1 registered... (2000 500 1500 1500) Process: 1 completed... (2000 500 2000 2000) Process: 2 registered... (2000 500 0 0) Process: 2 I/O blocked... (2000 500 500 500) Process: 3 registered... (2000 500 0 0) Process: 3 I/O blocked... (2000 500 500 500) Process: 2 registered... (2000 500 500 500) Process: 2 I/O blocked... (2000 500 1000 1000) Process: 3 registered... (2000 500 500 500) Process: 3 I/O blocked... (2000 500 1000 1000) Process: 2 registered... (2000 500 1000 1000) Process: 2 I/O blocked... (2000 500 1500 1500) Process: 3 registered... (2000 500 1000 1000) Process: 3 I/O blocked... (2000 500 1500 1500) Process: 2 registered... (2000 500 1500 1500) Process: 2 completed... (2000 500 2000 2000) Process: 3 registered... (2000 500 1500 1500) Process: 3 completed... (2000 500 2000 2000) Process: 4 registered... (2000 500 0 0) Process: 4 I/O blocked... (2000 500 500 500) Process: 4 registered... (2000 500 500 500) Process: 4 I/O blocked... (2000 500 1000 1000) Process: 4 registered... (2000 500 1000 1000) Process: 4 I/O blocked... (2000 500 1500 1500) Process: 4 registered... (2000 500 1500 1500) \end{lstlisting} \subsection{Comments} Scheduling type was Batch since I did not change it in SchedulingAlgorithm.java file \\ Scheduling Name was First-Come First-Served since this is what what we use as described in README for this laboratory \\ Simulation run time is 10000 ms since it run untill the limit I set in conf file according to task description \\ CPU blocking is set everywhere to 500 ms as in conf file \\ Mean is 2000 since this is a value I set in conf value according to laboratory task description, same with standard deviation equal to 0 and CPU Time equal to 2000 ms \\ CPU completed is equal to expected 2000 ms, this makes sense since we had run time equal to 10000 ms and 5 procesess so each of them could take exactly the amonunt of time we set them to take. \section{Ten processes} \subsection{Summary Results file} \begin{lstlisting} Scheduling Type: Batch (Nonpreemptive) Scheduling Name: First-Come First-Served Simulation Run Time: 10000 Mean: 2000 Standard Deviation: 0 \end{lstlisting} \begin{center} \begin{tabular}{| c | c | c | c | c |} \hline Process\# & CPU Time & IO Blocking & CPU Completed & CPU Blocked \\ \hline 0 &2000 (ms) &500 (ms)& 2000 (ms)& 3 times \\ \hline 1 &2000 (ms) &500 (ms)& 2000 (ms)& 3 times \\ \hline 2 &2000 (ms) &500 (ms)& 2000 (ms)& 3 times \\ \hline 3 &2000 (ms) &500 (ms)& 2000 (ms)& 3 times \\ \hline 4 &2000 (ms) &500 (ms)& 1000 (ms)& 2 times \\ \hline 5 &2000 (ms) &500 (ms)& 1000 (ms)& 1 times \\ \hline 6 &2000 (ms) &500 (ms)& 0 (ms)& 0 times \\ \hline 7 &2000 (ms) &500 (ms)& 0 (ms)& 0 times \\ \hline 8 &2000 (ms) &500 (ms)& 0 (ms)& 0 times \\ \hline 9 &2000 (ms) &500 (ms)& 0 (ms)& 0 times \\ \hline \end{tabular} \end{center} \subsection{Summary Processes file} \begin{lstlisting} Process: 0 registered... (2000 500 0 0) Process: 0 I/O blocked... (2000 500 500 500) Process: 1 registered... (2000 500 0 0) Process: 1 I/O blocked... (2000 500 500 500) Process: 0 registered... (2000 500 500 500) Process: 0 I/O blocked... (2000 500 1000 1000) Process: 1 registered... (2000 500 500 500) Process: 1 I/O blocked... (2000 500 1000 1000) Process: 0 registered... (2000 500 1000 1000) Process: 0 I/O blocked... (2000 500 1500 1500) Process: 1 registered... (2000 500 1000 1000) Process: 1 I/O blocked... (2000 500 1500 1500) Process: 0 registered... (2000 500 1500 1500) Process: 0 completed... (2000 500 2000 2000) Process: 1 registered... (2000 500 1500 1500) Process: 1 completed... (2000 500 2000 2000) Process: 2 registered... (2000 500 0 0) Process: 2 I/O blocked... (2000 500 500 500) Process: 3 registered... (2000 500 0 0) Process: 3 I/O blocked... (2000 500 500 500) Process: 2 registered... (2000 500 500 500) Process: 2 I/O blocked... (2000 500 1000 1000) Process: 3 registered... (2000 500 500 500) Process: 3 I/O blocked... (2000 500 1000 1000) Process: 2 registered... (2000 500 1000 1000) Process: 2 I/O blocked... (2000 500 1500 1500) Process: 3 registered... (2000 500 1000 1000) Process: 3 I/O blocked... (2000 500 1500 1500) Process: 2 registered... (2000 500 1500 1500) Process: 2 completed... (2000 500 2000 2000) Process: 3 registered... (2000 500 1500 1500) Process: 3 completed... (2000 500 2000 2000) Process: 4 registered... (2000 500 0 0) Process: 4 I/O blocked... (2000 500 500 500) Process: 5 registered... (2000 500 0 0) Process: 5 I/O blocked... (2000 500 500 500) Process: 4 registered... (2000 500 500 500) Process: 4 I/O blocked... (2000 500 1000 1000) Process: 5 registered... (2000 500 500 500) \end{lstlisting} \subsection{Comments} Scheduling type was Batch since I did not change it in SchedulingAlgorithm.java file \\ Scheduling Name was First-Come First-Served since this is what what we use as described in README for this laboratory \\ Simulation run time is 10000 ms since it run untill the limit I set in conf file according to task description \\ IO Blocking set to 500 ms as in config file \\ Mean is 2000 since this is a value I set in conf value according to laboratory task description, same with standard deviation equal to 0 and CPU Time equal to 2000 ms \\ CPU completed this time is equal to 2000 up to 4th process and then is equal to 1000 ms for 5th and 6th and then it is equal to 0 ms, this means that the simulation exceeded the runtime before it had a chance to run all processes \section{Getting process to be blocked 4 times} Up untill now process got blocked for maximum of 3 times. This makes sense since since they get blocked every 500 ms and the runtime for single process is 2000 ms, so they get blocked first time at 500 ms, second time at 1000 ms and third time at 1500 ms, at 2000 ms they finish execution so they do not get blocked. \\ If we change runtime of process to 2001 ms we should get as the result them getting blocked 4 times! \\ I changed meandev in scheduling.conf to 2001 and observed results: \subsection{Summary Results file} \begin{lstlisting} Scheduling Type: Batch (Nonpreemptive) Scheduling Name: First-Come First-Served Simulation Run Time: 6003 Mean: 2001 Standard Deviation: 0 \end{lstlisting} \begin{center} \begin{tabular}{| c | c | c | c | c |} \hline Process \#& CPU Time& IO Blocking& CPU Completed& CPU Blocked \\ \hline 0 & 2001 (ms)& 500 (ms)& 2001 (ms)& 4 times \\ \hline 1 & 2001 (ms)& 500 (ms)& 2001 (ms)& 4 times \\ \hline 2 & 2001 (ms)& 500 (ms)& 2001 (ms)& 4 times \\ \hline \end{tabular} \end{center} Sure enough we got all of the processes blocked 4 times! \section{Finishing comments} We runned all the processes, get to know scheduling, get to know first come first served algorithm. \\ There are upsides and downsides of first come first served algorithm: \\ Upsides: \begin{itemize} \item It is easy to implement \item It is easy to understand \end{itemize} Downsides: \begin{itemize} \item It is very inefficient (Last experiment with 10 processes barely acknowledged existence of the 5th one) \item High average wait time (Imagine 1000 processes and how long we would have to wait) \end{itemize} Using pretty much any other algorithm we could get better results \cite{First come first serve} \begin{figure}[H] \caption{\href{https://commons.wikimedia.org/wiki/File:Process_states.svg}{[Process states and how they switch from wikimedia]}} \includegraphics[width=\textwidth]{procestates} \end{figure} \begin{thebibliography}{9} \bibitem{lab3 Manual} Manual in the laboratory 3 files. \bibitem{First come first serve} \href{https://www.studytonight.com/operating-system/first-come-first-serve}{[https://www.studytonight.com/operating-system/first-come-first-serve]} \bibitem{Other scheduling algorithms} \href{https://www.tutorialspoint.com/operating_system/os_process_scheduling_algorithms.htm}{[Tutorials point process scheduling algorithms]} \end{thebibliography} \end{document}