Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
U
uva
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Taddeüs Kroes
uva
Commits
5e59cf79
Commit
5e59cf79
authored
Nov 21, 2010
by
Sander Mathijs van Veen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Finished assignment 4 of Operating Systems.
parent
cb9c748b
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
96 additions
and
17 deletions
+96
-17
os/ass4/main.c
os/ass4/main.c
+2
-0
os/ass4/report/report.tex
os/ass4/report/report.tex
+94
-17
No files found.
os/ass4/main.c
View file @
5e59cf79
...
...
@@ -213,6 +213,8 @@ void *philo_start(void *raw_stats) {
// Philosophers wait for each other, before they can start eating diner.
pthread_barrier_wait
(
&
wait_barrier
);
printf
(
"P #%u: let's eating!
\n
"
,
id
);
while
(
!
diner_finished
&&
!
(
*
philo_types
[
type
])(
stats
,
id
));
printf
(
"P #%u: i'm leaving, after paying the bill.
\n
"
,
id
);
...
...
os/ass4/report/report.tex
View file @
5e59cf79
...
...
@@ -66,19 +66,6 @@ bijvoorbeeld:
laten draaien.
\end{enumerate}
% What Are Threads Used For?
%
% Operating systems: one kernel thread for each user process.
%
% Scientific applications: one thread per CPU (solve problems more quickly).
%
% Distributed systems: process requests concurrently (overlap I/Os).
%
% GUIs:
% - Threads correspond to user actions; can service display during long-running
% computations.
% - Multimedia, animations.
\subsection
{
Threads en performance
}
Threads hebben een shared state (zoals een fork van een process) en shared
memory en zijn daarom de meest voor de hand liggende oplossing om een hoge
...
...
@@ -292,7 +279,7 @@ for(int i = 0; i < philos; i++) {
Merk op dat hier bewust geen gedrag aan een filosoof wordt toegewezen. Dit
is een eigenschap van de filosoof en is daarom verplaatst naar de functie
van een filosoof, die aangeroepen wordt als de fil
e
soof ``binnenkomt''
van een filosoof, die aangeroepen wordt als de fil
o
soof ``binnenkomt''
(in deze opdracht is dat
\texttt
{
philo
\_
start()
}
).
\item
De host controleert minimaal 100 maal per seconde of er misschien deadlock
...
...
@@ -435,6 +422,20 @@ pthread_mutex_unlock(&introduction_lock);
vervolgens de twee stokjes weer netjes terug. Als er geen signaal is dat
er nu moet worden afgerekend, probeert ze weer opnieuw twee eetstokjes te
pakken (terug naar stap 3).
\begin{lstlisting}
[numbers=none,backgroundcolor=
\color
{
darkgray
}
]
// Leg twee stokjes neer
pthread
_
mutex
_
unlock(
&
forks[f]);
pthread
_
mutex
_
unlock(
&
forks[(f+1)
% philos]);
// En neem weer twee stokjes aan
pthread
_
mutex
_
lock(
&
forks[f]);
pthread
_
mutex
_
lock(
&
forks[(f+1)
% philos]);
\end{lstlisting}
Het signaal wordt gecontroleerd doordat er eerst een loop condition wordt
controleert, voordat de stokjes weer worden opgepakt door de filosoof.
\item
Afrekenen bestaat er uit te melden hoe vaak deze filosoof heeft geprobeerd
stokjes en pakken, en hoe vaak ze feitelijk heeft gegeten. Deze eis is bij
de eisen van de host besproken.
...
...
@@ -442,9 +443,85 @@ pthread_mutex_unlock(&introduction_lock);
\end{enumerate}
\begin{lstlisting}
[numbers=none,backgroundcolor=
\color
{
darkgray
}
]
code example
\end{lstlisting}
\subsection
{
Verschillend gedrag
}
Er zijn meerdere soorten gedrag voor de filosofen geimplementeerd. De
gedragsvormen worden letterlijk in de opdracht vermeld en daarom niet verder in
dit verslag behandeld. Om
\emph
{
random behaviour
}
te implementeren is er gebruik
gemaakt van de function
\texttt
{
rand()
}
en dan wordt er een pseudo-random keuze
gemaakt uit de andere vier soorten gedragsvormen. Daarnaast is er gebruik
gemaakt van function pointers om de gedragsvormen eenvoudig aan te kunnen
roepen. Dit maakte het makkelijk om de gedragsvorm
\emph
{
random behaviour
}
toe
te voegen.
\pagebreak
\section
{
Analyse van de gedragsvormen
}
\begin{verbatim}
Host: inviting philo #0
Host: inviting philo #1
P #0: hello everybody, i'm optimistic!
Host: inviting philo #2
P #1: hello everybody, i'm shy!
Host: inviting philo #3
P #2: hello everybody, i'm shy!
Host: inviting philo #4
P #3: hello everybody, i'm right!
P #4: hello everybody, i'm right!
Host: invitations done.
Host: deadlock occured.
P #0: let's eating!
P #1: let's eating!
P #2: let's eating!
P #4: let's eating!
P #3: let's eating!
Host: diner is finished.
P #0: i'm leaving, after paying the bill.
P #1: i'm leaving, after paying the bill.
P #4: i'm leaving, after paying the bill.
Philo #0 ate 0 meal(s) and grabbed 12677 fork(s).
P #2: i'm leaving, after paying the bill.
P #3: i'm leaving, after paying the bill.
Philo #1 ate 46281 meal(s) and grabbed 47562 fork(s).
Philo #2 ate 41127 meal(s) and grabbed 43236 fork(s).
Philo #3 ate 38098 meal(s) and grabbed 76198 fork(s).
Philo #4 ate 8555 meal(s) and grabbed 17112 fork(s).
Host: philosophers are done.
\end{verbatim}
In bovenstaande output treedt ``vrijwel direct'' een deadlock op.
\begin{verbatim}
Host: inviting philo #0
Host: inviting philo #1
P #0: hello everybody, i'm random!
Host: inviting philo #2
P #1: hello everybody, i'm optimistic!
Host: inviting philo #3
P #2: hello everybody, i'm right!
Host: inviting philo #4
P #3: hello everybody, i'm left!
P #4: hello everybody, i'm optimistic!
Host: invitations done.
P #4: let's eating!
P #1: let's eating!
P #0: let's eating!
P #2: let's eating!
P #3: let's eating!
Host: diner is finished.
P #4: i'm leaving, after paying the bill.
P #1: i'm leaving, after paying the bill.
P #2: i'm leaving, after paying the bill.
P #3: i'm leaving, after paying the bill.
P #0: i'm leaving, after paying the bill.
Philo #0 ate 16930743 meal(s) and grabbed 21233771 fork(s).
Philo #1 ate 15252154 meal(s) and grabbed 963192 fork(s).
Philo #2 ate 19851122 meal(s) and grabbed 39702244 fork(s).
Philo #3 ate 16646568 meal(s) and grabbed 33293136 fork(s).
Philo #4 ate 20589769 meal(s) and grabbed 1254557 fork(s).
Host: philosophers are done.
\end{verbatim}
\pagebreak
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment