Отличный проект и красивая реализация! Спасибо! Очень пригодится как компонент будущей ОСи.
Отдельно порадовала чистота русского языка в статье и отсутствие заимствованных без необходимости слов, что в последнее время было распространенным и раздражающим явлением в русской компьютерной прессе.
Также присоединяюсь к мнению Oleg N. Cher:
А по-моему лучше вообще не использовать никаких регистров. Кроме программистов на Си встречаются ещё программисты на ассемблере, которые передают параметры в регистрах. Например, "резидентная интерфейсная часть" (в английском используется термин "Import Library") может состоять из команд JP 0, JP 3, JP 6 и т.д., которые изменяются в ходе настройки основной программы на фактический адрес загрузки модулей.
Также стоит иметь в виду, что динамическая библиотека может не только экспортировать, но и импортировать функции из других динамических библиотек. Например, загрузчик исполняемых модулей будет обращаться к драйверу файловой системы.
- - - Добавлено - - -
Я тоже думал над этой проблемой. Пришел к следующим идеям:
1) Исполняемые файлы и динамические библиотеки состоят из сегментов. Paged Code/data - код или данные, которые можно размещать в страницах (C000-FFFF); Nonpaged Code/data - то, что необходимо размещать вне страниц, в резидентной памяти. Сегменты реализованы в современных исполняемых форматах (Windows EXE, ELF). Упомянутый подход реализован для драйверов Винды, где часть кода или данных загрузчик размещает в "дорогой" резидентной памяти (Nonpaged Pool), а остальные - в той памяти, которая может свопиться.
2) Системный менеджер памяти принимает параметр - какая требуется память: резидентная (которой мало), страничная в текущей странице (которой тоже мало, но предпочтительно использовать её) или же страничная в любой странице (которой много, но доступ неудобный).
3) Программист должен стремиться свести к минимуму перемещения данных между страницами и использование Nonpaged Memory. Вызовы функций можно разделить на "близкие" (когда вызываемый код находится в резидентной памяти или той же странице); и "далёкие" - посредством системной функции, переключающей страницу перед вызовом и после возврата.
4) Для крайних случаев сделать системные функции вроде "Far memory Read" и "Far memory Write", которые перемещают данные из "чужой" или "в чужую" страницы.
5) Резидентный код может вызывать системные фукнции переключения страниц и иметь непосредственный доступ к памяти из любых страниц.
Ну дык, аналогично. Давай скооперируемся. Я уже выкладывал прототип диспетчера многозадачности. С тех пор пришло много идей его улучшения, грустно только было за это браться ввиду отсутствия единомышленников! Также я недавно выложил свой оконный интерфейс, драйверы клавиатур, диска. Этот код старый, но тоже может быть тщательно переработан и выведен на современные стандарты качества. За последнюю неделю занимался функциями быстрого вывода текста. Выложить только не успел еще.






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