On 03/01/2015 01:42 PM, Anders Magnusson wrote:
- Vi tänker att vi har minnet indelat i 16 pages om 4k styck, dels för data och dels för kod. - När fetch sätts, kolla om instruktionen som läses är 1, 2 eller 3 bytes lång (tabell). Låt det antalet minnesreferenser gå via en pagetabell för kod istället. Kolla samtidigt om adressen + antal cykler går till en page man inte har access till, om man inte har det så fejka att den läser jmp ($02) istället. Nu fick vi en trap :-)
Och så måste vi komma ihåg var vi hoppade ifrån förstås.
- Om fetch inte är satt så kollar vi bara accessen. Om man inte har access, låt instruktionen köra färdigt och ignorera minnesreferenserna, och vid nästa fetch fejka en jmp ($03). Nu har vi fått en data access trap.
Oj, hmm. Då måste vi dels komma ihåg adressen för den föregående instruktionen, dels ogöra dess effekt i efterhand. Vi kan ju förbjuda inmappning av I/O i pageade processer för att slippa det värsta krånglet (hur undoar man en instruktion som gör en indirekt adressering av I/O-sidan). Bjarni