[ASM] Iemand een idee hoe een semafoor werkt?

Pagina: 1
Acties:
  • 152 views sinds 30-01-2008
  • Reageer

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Laatst op school bezig geweest met semaforen in embedded systems.

Je krijgt natuurlijk in alle omgevingen met I/O te maken met Semaforen.

Maar in ieder geval. Dankzij die les begon ik me een beetje af te vragen hoe een semafoor nou echt werkt. Want ergens moet er een atomic manier zijn om die flag check op die semafoor te kunnen doen.

Ik dacht, ik vraag het maar niet in de les, want dan worden die lui om me heen helemaal knetter gek (ze snappen er nu al weinig van, kun je nagaan zo erg is het niveau van mijn opleiding). Waarschijnlijk zou de docent het ook niet weten, ookal is tie gepromoveerd en al.

Ik heb zelf nog geen manier kunnen verzinnen. Enige wat ik kon verzinnen was een conditionele schrijf instructie naar een bepaald register/adres. Maar euh, ik heb hem in mijn ASM 286 handleiding niet kunnen vinden. Ookal heb ik er de instructie TEST in staan, maar die hebben ze in mijn boekjes niet gedocumenteerd.

Dus iemand enig idee?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Uit mijn boek: ;)

1. Software matig met behulp van mutual exclusion...
2. Interrupt disable.
3. Speciale machine-instructie (dit zal wel het meest gebruikelijk zijn).
4. Met monitoren kan je een semafoor implementeren, maar das niet echt een oplossing denk ik ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

TSL-instructie (test and lock) je kan in ASM iets van:

CLI
LOCK
TEST [BX],0000000000000001b (oid)

doen. Lock zorgt ervoor dat de bus gelocked wordt en er maar 1 cpu bij kan, verder moet je de interrupts uitschakelen voor 'obvious reasons'. (lock is nodig omdat je de ints alleen op de cpu die je process uitvoert kan uitschakellen)

Wederom :) "Operating systems: design and implementation - andrew s tanenbaum"

  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 11-09 10:38

Killemov

Ik zoek nog een mooi icooi =)

Dat doe je met een TAS-instructie elke proc heeft hiervan wel een variant. (Test And Set) Dat is nl. de enige manier waarvan je zeker weet dat het niet kan worden onderbroken door een context switch.

Hey ... maar dan heb je ook wat!


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Dus toch die TEST instructie...
Ik had al zo'n donkerbruin vermoeden.

Thnx lui.. :)

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

nee, test op zich is gewoon een compare. het gaat om dat 'lock' prefix ervoor. Die locked de memory bus voor de volgende instructie, zodat er geen 2e cpu doorheen gaat.

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Blader, blader...

Yup, Lock staat ook genoemd in m'n ASM boekje, maar niet gedocumenteerd.

In Operating Systems van Stallings staat het ook wel enigzins, maar niet echt in een ASM voorbeeld. (heb dat boek vandaag even in de mediatheek ingekeken)

Verwijderd

Snel mijn boek erbij: Semaforen zijn door de Nederlander Dijkstra bedacht. Het wordt beschreven als een protected variable die alleen geinitialiseerd kunnen worden en waar alleen twee bewerkingen op gedaan kunnen worden, P en V. De functies werken als volgt:
code:
1
2
3
4
5
6
7
8
9
function P(S)
  if S>0 
  then S:=S-1
  else (wait on S)

function V(S)
  if(one or more processes are waiting on S)
  then (let one of these processes proceed)
  else S:=S+1

De S staat voor de semafoor variabele.

Ziet er simpel uit, maar is knap ingewikkeld. |:( Maar erug leuk, als je er mee gezich bent :9

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Op dinsdag 02 oktober 2001 00:01 schreef Doekman het volgende:
Ziet er simpel uit, maar is knap ingewikkeld. |:( Maar erug leuk, als je er mee gezich bent :9
Precies, leuk omdat je echt per instructie na moet gaan hoe het nou werkelijk door je chip uitgevoerd wordt, maar daardoor soms ook verrot lastig en verwarrend.

Bitneuken noemen ze dat toch?
Pagina: 1