OSDev
http://osdev.ru/

Динамическая линковка и загрузка вместо таблицы процессов
http://osdev.ru/viewtopic.php?f=5&t=2403
Страница 1 из 1

Автор:  vlad9486 [ 17 май 2018, 02:07 ]
Заголовок сообщения:  Динамическая линковка и загрузка вместо таблицы процессов

Таким образом можно вынести планировщик из ядра. Пусть ядро это загрузчик и редактор связей. В любом исполняемом файле системы в местах вызова кода других исполняемых файлов вставляется syscall инструкция. Загрузчик патчит ее jmp'ом с правильным адресом, или оставляет сискол, если вызываемый код в другом адресном пространстве. Для создания новых потоков, вызывается апи планировшика, который просто еще одна прдключаемая библиотека.

Процессы, получается, не нужны? То есть, реально в ядре будет таблица адрессных пространств вместо процессов. А вся система состоять из того, что сейчас называется статические и динамические библиотеки, которые могут быть в отдельном адресном пространстве. В ельф просто добавить информацию о зависимостях что бы статически их загружать.

Так можно развить идею к тому, что ядро это просто интерпретатор некоторого байткода. Он простой и может быть даже не тюринг полный, нужно только что бы в нем можно было делать динамическую загрузку машинного кода, а потом управлять им как объектом этого самого байткода. В машинном коде можно делать вставки этого байткода (его интерпретатор подменит на джампы).

Автор:  pavia [ 17 май 2018, 10:34 ]
Заголовок сообщения:  Re: Динамическая линковка и загрузка вместо таблицы процессо

Кооперативную многозадачность никто не отменял. Мысль. Если разделить стек вызовов и стек данных для функций, то это упростит переключение задач.

Цитата:
Процессы, получается, не нужны?

Процессы нужны для для изоляции программ друг от друга. Если одна упадёт она не похоронит всю систему. Плюс для ИБ что-бы одни задачи не могли без разрешения изменять память другого процесса. И не могла считать приватные ключи, пароли и тп.


Цитата:
Так можно развить идею к тому, что ядро это просто интерпретатор некоторого байткода.

Майкрософт экспериментировала с этим для C#.

Автор:  SII [ 17 май 2018, 14:24 ]
Заголовок сообщения:  Re: Динамическая линковка и загрузка вместо таблицы процессо

ОС -- это далеко не только процессы и потоки. И что значит "вынести планировщик из ядра"? Просто физически реализовать не в составе ядра ОС, а внешней по отношению к нему задачей? Да, можно (хотя целесообразность и сомнительна). Или логически, т.е. вообще обойтись без планировщика как такового? Но кто тогда будет заниматься переключением задач? Сами задачи (кооперативная многозадачность)? Да, возможно -- но тогда зацикливание одной задачи положит всю систему, т.е. этот подход допустим лишь для определённых систем, но не годится для системы общего назначения.

Автор:  vlad9486 [ 17 май 2018, 15:27 ]
Заголовок сообщения:  Re: Динамическая линковка и загрузка вместо таблицы процессо

pavia писал(а):
Процессы нужны для для изоляции программ друг от друга. Если одна упадёт она не похоронит всю систему. Плюс для ИБ что-бы одни задачи не могли без разрешения изменять память другого процесса. И не могла считать приватные ключи, пароли и тп.

Да, я это называл адресными пространствами.

pavia писал(а):
Майкрософт экспериментировала с этим для C#.

Нет же. Я не предлагал писать приложения на байткоде, он у меня даже не тюринг полный. Вот сейчас в elf и pe файлах же не только машинный код, там хедер и другие структуры даных. Это тоже байткод со вставками машинного кода. ОС его интерпретирует. Только это убогость по сравнению с нормальным байткодом.

Автор:  vlad9486 [ 17 май 2018, 15:28 ]
Заголовок сообщения:  Re: Динамическая линковка и загрузка вместо таблицы процессо

SII писал(а):
ОС -- это далеко не только процессы и потоки. И что значит "вынести планировщик из ядра"? Просто физически реализовать не в составе ядра ОС, а внешней по отношению к нему задачей? Да, можно (хотя целесообразность и сомнительна). Или логически, т.е. вообще обойтись без планировщика как такового? Но кто тогда будет заниматься переключением задач? Сами задачи (кооперативная многозадачность)? Да, возможно -- но тогда зацикливание одной задачи положит всю систему, т.е. этот подход допустим лишь для определённых систем, но не годится для системы общего назначения.

Планировать нужно не процесы, а потоки, здесь все без изменений. Только планировщик - отдельный бинарь, который линкуется ко всему остальному во время загрузки.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/