mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-07-04 20:03:04 +02:00
400 lines
15 KiB
TeX
400 lines
15 KiB
TeX
\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}
|