Semaphoren - Schlafende Frieseure / Paging

wieviele Frieseure sind es denn? / Fragmentiert nicht auch unsere Seiten-Kacheltabelle?

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Semaphoren - Schlafende Frieseure / Paging
Hallo, zwei Fragen:

  • Im Sript (D-120) ist eine programmiersprachliche Behandlung von Friseuren gegeben, die ihre Kunden frisieren sollen.
    Die Frage, dich mich bewegt ist: wieviele Friseure haben wir (maximal)?
    Meine Vermutung ist einer (denn P funktioniert ja nur bei semaphore=0).

  • Segemtierung und Seitenadressierung (E-29)
    Hier hat ja jedes Segment einen Zusammenhängenden Bereich von Seiten (!= Kacheln). Wenn ein Segement sich in der Grösse verändern kann, dann haben wir ja das Problem, dass die Seiten dann nciht mehr zusammenhängend sind oder plötzlich Verschnitt in unserer Seiten-Kacheltabelle auftritt (der Hauptspeicher - also die Kacheln fragmentieren dadurch natürlich nicht - aber immerhin die Seiten).
    Wo ist der Denkfehler?


zu den friseuren:
die anzahl der friseure kann im prinzip beliebig hoch sein. P blockiert dann wenn kein frisieur mehr frei ist, ansonsten erniedrigt sich die anzahl der friseure um eins. d.h. ganz intuitiv können solange kunden bedient werden solange ein friseur nix zu tun hat.
(der wert der semaphore gibt in diesm fall an wieviele friseure nichts zu tun haben)
verständlich?!

zu2 weiß ich nciht


“der Wert [von barbers] gibt […] an, wieviele Friseure nichts zu tun haben”

Tatsächlich? D.h. gleich am Anfang haben 0 Friseure nichts zu tun?

Und wenn ein Kunde kommt, dann hat ein weiterer Firseur nichts zu tun (P(barbers))?

Ach ja, danke für die Antwort :wink:


“Dieser Beitrag wurde 7 mal verändert, zuletzt am 22.02.2004, 16:49 von matthias”

unentschlossen? Naja richtiger wird des durchs verändern scheinbar nicht g

Initialisiert muss diese Semaphore natürlich mit der Anzahl der Friseure ( wenn am morgen der Salon aufmacht hat ja keiner was zu tun, somit sind alle verfügbar) werden.

P: ein Kunde lässt sich die Haare schneiden (um muss evtl warten)
V: der Kunde ist fertig

ist das wirklich so schwer? Mit exklusivem Auschluss oder sonstigen binären Semaphoren hat das nix zu tun.


Yep, das scheine ich mir in letzter Zeit ziemlich anzugewöhnen. :red:

ist die Deklaration

semaphor barbers=0; customers=0 (...)

dann falsch?

Nun, die obige Deklaration irritiert mich noch etwas.

Die Mutex zum Schutz von waiting sehr wohl :-p .


Hast du den Button „Vorschau“ schon gefunden? :wink: SCNR


Verwende ich auch :wink:

Aber nachdem mir eine Idee gekommen ist, oder ich einen Rechtschreibfehler gefunden habe, korrigiere ich das. Auch kommen mir häufig Korrekturideen oder bessere/ genauere Fragestellungen in den Sinn - natürlich erst nachdem ich auf „Speichern“ geklickt habe.


huch ihr habt ja komplexere Friseure als die in meinem Buch damals (oder waren des Kassierinnen? irgendsowas Einzelhandelsmässiges jedenfalls), die durften glaub ich gar net schlafen.

Des stimmt schon wie des im Skript steht, du hast hier erstmal nur einen Barber, kannst aber durchaus mehrere haben, wenn man halt mehrere solche Prozesse vom Typ Barber hat.
Was allerdings begrenzt ist, das ist N die Anzahl der Warteplätze.


Ahhh. Mehrere Prozesse GroschenIstGefallen

Danke :wink:


Bei Segmentierung + Seitenadressierung ist die Idee, dass jedes Segment seine eigene
Seiten-Kachel-Tabelle hat. Wenn ein Segment groesser wird muss man dann nur am
Ende der zugehoerigen SKT eine weitere Seite eintragen. Damit fragmentiert
nix - die neue Seite kann man ja irgendwo in eine freie Kachel packen.
Nachdem eine virtuelle Adresse aus (Segmentnr, Seitennr, Offset) besteht, ist das
Wachstum eines Segments durch die Anzahl der Bits fuer „Seitennr.“ natuerlich
beschraenkt - mehr Seiten wie dadurch adressierbar sind geht nicht.
Soweit die grundlegende Theorie (wie es auch im Multics-System umgesetzt war).

Im Fall vom Pentium ist’s ein wenig anders: aus (Segment,Offset) wird
ueber normale Segmentierung ein Adresse berechnet. Wenn zusaetzlich Seitenaddr.
aktiviert ist, ist das Resultat hieraus eine virtuelle Adresse mit der die MMU in
die Seitenkacheltabelle geht (korrekter in die Tabellen geht - es ist ja eine 2-stufige
Umsetzung - aber vom Prinzip her ist das egal, die 2-stufige Umsetzung macht
man ja nur damit die Tabelle nicht zu gross wird).

Damit kann ein Segment prinzipiell innerhalb des gesamten virt. Adressraums von
4 GB beliebig gross werden. Wenn ein Segment wachsen koennen soll, muss man
nur beachten, dass im virtuellen Adressraum hinter dem Segment noch Platz ist -
dann koennen da bei Bedarf weitere Seiten fuer das Segment allokiert werden.


Ja, dann macht das natürlich wieder Sinn. :cheesy:

Dass mein Pentium auch wirklich 32 Bit/Prozess addressieren kann hoffe ich ja wohl :wink: