недавно чета мысля в голову стукнула как можно сделать поддержку семафоров без запрета прерываний достаточно быстрым методом.
главная задача- в один шаг изменить значение запирающей общей ячейки памяти на "занято", получив при этом предыдущее значение. на z80 для этих целей прекрасно подходит команда dec (hl) (dec(ix/iy), inc (hl/ix/iy))
вот примерный код семафора
единственная опасность, которую мне удалось рассмотреть, это если 255 процессов последовательно прервут друг друга между точками А и В. прежде чем кинуться считать такую вероятность, посчитайте вероятность простого запуска такого количества процессов %)Код:spinlock db 1 ;1-free, other-busy db 0 ;for owner ... ld ix,spinlock call lock ... ;do smth call unlock ... lock dec (ix) ;A jr z,isfree ;B inc (ix) call sleep jr lock isfree ld a,(pid) ld (ix+1),a ret unlock ld (ix),1 ret
http://3os.ru - довольно интересный проект. немного почитал, симпатишно, но одна мысля испортила все настроение. когда почитаете, поймете какая %)




Ответить с цитированием