x86 lock instruction - simulator

0

Sto lavorando su un semplice simulatore 8086. Ma non sono sicuro di come implementare il prefisso di blocco. Conosco questo prefisso utilizzato nelle implementazioni del semaforo.

1) Per ora ho solo il core 8086 e nessun altro core come FPU. Il manuale dice il prefisso di blocco usato nell'ambiente multiprocessore. Quindi, come trattare il prefisso di blocco con 8086 da solo.

2) Come trattare il prefisso di blocco se esiste altri processori come FPU.

Qualche modello e suggerimento su come implementare il prefisso di blocco?

    
posta kesrut 27.09.2016 - 07:57
fonte

1 risposta

2

So how treat lock prefix with 8086 alone.

ignoralo.

How to treat lock prefix if exists other processors like FPU.

  1. Introduci un flag "Memory Lock", visibile da tutto l'hardware nell'ambiente di simulazione.

  2. Prima di qualsiasi operazione di accesso alla memoria, da qualsiasi pezzo di hardware nell'ambiente di simulazione, controlla il flag "Memory Lock": se è impostato, salta questo ciclo di clock, riprova al ciclo di clock successivo.

  3. Se il prefisso di blocco è presente su un'istruzione, (e se il flag di blocco della memoria non è già stato impostato), quindi imposta il flag "Memory Lock", esegui l'istruzione senza obbedire al flag "Memory Lock" e quando l'istruzione è completa, deselezionare il flag "Memory Lock".

Se esegui tutto il tuo hardware in modalità lock-step, (significa che su ogni ciclo di clock spunta ogni dispositivo, e quando tutti i dispositivi sono spuntati, procedi al ciclo di clock successivo), allora è tutto ciò che serve fare.

Se si esegue l'hardware in parallelo, (ovvero su ogni ciclo di clock si spunta simultaneamente tutto l'hardware disponibile su thread diversi), potrebbe essere necessario implementare il flag "Memory Lock" come mutex, in modo da impedire dispositivi da sovrascrivere accidentalmente.

    
risposta data 27.09.2016 - 10:18
fonte

Leggi altre domande sui tag