Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
U
uva
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Taddeüs Kroes
uva
Commits
5e59cf79
Commit
5e59cf79
authored
14 years ago
by
Sander Mathijs van Veen
Browse files
Options
Downloads
Patches
Plain Diff
Finished assignment 4 of Operating Systems.
parent
cb9c748b
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
os/ass4/main.c
+2
-0
2 additions, 0 deletions
os/ass4/main.c
os/ass4/report/report.tex
+94
-17
94 additions, 17 deletions
os/ass4/report/report.tex
with
96 additions
and
17 deletions
os/ass4/main.c
+
2
−
0
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
);
...
...
This diff is collapsed.
Click to expand it.
os/ass4/report/report.tex
+
94
−
17
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
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment