![]() |
Quote:
Допустим, мы эмулируем два процессора на одной шине. При однопоточной эмуляции - в каждый момент времени работает эмулятор одного процессора, а эмулятор другого ждёт своей очереди. При многопоточной эмуляции - эмуляторы обоих процессоров работают одновременно - каждый на своём физическом процессоре хост-машины. Чтобы при многопоточной эмуляции быстродействие с блокировками было ниже, чем при однопоточной без блокировок - код блокировки должен суммарно выполняться дольше, чем код эмуляции - тогда удвоенное быстродействие двух физических ядер будет "убито" непрерывно выполняющимся кодом блокировок. Если код блокировок будет "отъедать" ровно столько же процессорного времени хост-машины, сколько и код эмуляции - быстродействие многопоточной эмуляции будет РАВНО быстродействию однопоточной. Во всех остальных случаях многопоточная эмуляция будет быстрее. |
Quote:
|
Quote:
|
Quote:
|
Quote:
|
Quote:
Пример, по шагам, как они взаимодействуют? |
Quote:
|
Quote:
---------- Post added at 16:20 ---------- Previous post was at 16:16 ---------- Quote:
|
Quote:
Многопоточная эмуляция хороша там, где эмулируются два принципиально несинхронных устройства, всё взаимодействие между которыми основано на ожидании бита готовности ( или прерывания готовности ) от другого. Например, когда ДВК запускает программу пользователя в КМД - единственный способ для реальной ДВК определить, когда реальный КМД завершит выполнение программы пользователя - это дождаться бита готовности в регистре статуса КМД ( или соответствующего прерывания ). В такой ситуации частичная несинхронность многопоточной эмуляции совершенно незаметна и на общую достоверность эмуляции никак не влияет. |
Quote:
|
| All times are GMT +4. The time now is 02:58. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.