История изменений
Исправление arkhnchul, (текущая версия) :
Достаточно посмотреть сколько кода в драйвере sata в линуксовом ядре выполняется на каждый запрос.
не особо-то и много на самом деле, если брать во внимание количество данных, получаемых после запроса.
Если бы накопитель был отображен в адресное пространство проца - все это было бы не нужно.
(очень) утрированное описание того, что происходит сейчас:
-
процессу нужны данные с устройства из файла foo.bar
-
ядро смотрит куда чево каво, видит, что запрошенный кусок лежит в блоках с 0x8AF45BC4 по 0x8AF4F7DD
-
ядро пинает контроллер «дай мне блоки с 0x8AF45000 по 0x8AF50000»
-
контроллер по DMA перекладывает данные из откуда там они у него лежат в RAM, ядро и процессор в это время заняты другими делами, DMA (почти) аппаратный
-
в MMU взлетает флаг, что данные залились из медленной памяти в быструю и что с ними можно чото делать
-
ядро может переключить процесс на работу с запрошенным куском
ты предлагаешь такое, опять же - сильно утрировано и упрощенно:
-
процессу нужно сложить два инта по адресам 0x8AF45BC4 и 0x8AF4F7DD
-
процесс пинает процессор MOV [0x8AF45BC4], EAX
-
мееееедленно и печально 0x8AF45BC4 ползет из флеша в пока еще холодный кэш, процессор ждет, ибо никаких устаревших костылей для информирования процессора о том, что простая атомарная операция будет выполняться еще хз сколько тысяч тактов, не предусмотрено
-
история повторяется с 0x8AF4F7DD
Исходная версия arkhnchul, :
Достаточно посмотреть сколько кода в драйвере sata в линуксовом ядре выполняется на каждый запрос.
не особо-то и много на самом деле, если брать во внимание количество данных, получаемых после запроса.
Если бы накопитель был отображен в адресное пространство проца - все это было бы не нужно.
(очень) утрированное описание того, что происходит сейчас:
-
процессу нужны данные с устройства из файла foo.bar
-
ядро смотрит куда чево каво, видит, что запрошенный кусок лежит в блоках с 0x8AF45BC4 по 0x8AF4F7DD
-
ядро пинает контроллер «дай мне блоки с 0x8AF45000 по 0x8AF4F000»
-
контроллер по DMA перекладывает данные из откуда там они у него лежат в RAM, ядро и процессор в это время заняты другими делами, DMA (почти) аппаратный
-
в MMU взлетает флаг, что данные залились из медленной памяти в быструю и что с ними можно чото делать
-
ядро может переключить процесс на работу с запрошенным куском
ты предлагаешь такое, опять же - сильно утрировано и упрощенно:
-
процессу нужно сложить два инта по адресам 0x8AF45BC4 и 0x8AF4F7DD
-
процесс пинает процессор MOV [0x8AF45BC4], EAX
-
мееееедленно и печально 0x8AF45BC4 ползет из флеша в пока еще холодный кэш, процессор ждет, ибо никаких устаревших костылей для информирования процессора о том, что простая атомарная операция будет выполняться еще хз сколько тысяч тактов, не предусмотрено
-
история повторяется с 0x8AF4F7DD