OSDev
http://osdev.su/

Загрузка программ
http://osdev.su/viewtopic.php?f=5&t=3632
Страница 1 из 1

Автор:  Sebt [ 13 фев 2019, 10:06 ]
Заголовок сообщения:  Загрузка программ

Здравствуйте, появился довольно таки абстрактный вопрос.

Как именно происходит загрузка скомпилированных программ и что для этого нужно? Естественно кроме работающей многозадачности, пользовательского пространства и загрузчика elf файлов. К примеру, если я скомпилирую код так на Линукс:
Код:
i686-elf-gcc init.c -o init

Автор:  SII [ 13 фев 2019, 10:50 ]
Заголовок сообщения:  Re: Загрузка программ

Многозадачность не нужна (однозадачные системы в природе существуют и вполне способны грузить выполняемые файлы), пользовательское пространство не нужно (существуют системы без разделения пространств, причём даже без логического разделения, не говоря о физическом -- для последнего нужна аппаратная поддержка, которая имеется не у любого процессора). Вот загрузчик для загрузки таки нужен :) А что и как он делает, зависит от конкретной системы, хотя общая последовательность действий везде примерно одинакова: 1) определить потребности загружаемого файла (как минимум, сколько места в памяти ему требуется), 2) получить необходимую память, 3) прочитать в неё нужные куски загружаемого файла, 4) скорректировать загруженное с учётом адреса загрузки.

Автор:  Sebt [ 13 фев 2019, 17:38 ]
Заголовок сообщения:  Re: Загрузка программ

Спасибо за ответ! Я вас понял. А как быть со случаем когда имеется пользовательское пространство, как я могу вызвать из загруженной программы так называемый системный вызов?

Автор:  SII [ 14 фев 2019, 01:29 ]
Заголовок сообщения:  Re: Загрузка программ

Используется та или иная команда процессора, вызывающая переключение режима. В IA-32 (x86) в 16- и 32-разрядном защищённых режимах могут использоваться команды INT и CALL (при соответствующей настройке дескрипторов GDT и/или LDT), плюс было что-то для быстрого вызова, причём изначально разное у AMD и Intel. В 64-разрядном -- не помню, я им не занимался, поскольку отошёл от программирования для ПК. Сделать сие на языке высокого уровня (неважно, на каком) в общем случае невозможно в принципе -- это уровень ассемблера и со стороны кода режима пользователя, и со стороны кода режима ядра (первому необходимо определённым образом подготовить параметры и выдать команду вызова, второму -- обеспечить сохранение контекста кода режима пользователя для последующего восстановления и в зависимости от параметров обеспечить вызов нужной подпрограммы кода режима ядра).

Автор:  pavia [ 15 фев 2019, 21:12 ]
Заголовок сообщения:  Re: Загрузка программ

Создаёшь файл в папке \process\33
Номер выбираешь из свободных. Из elf файла копируешь секции согласно заголовку.
Снимаешь блокировку и процесс будет запущен планировщиком.

Для прыжка в ядро вызываешь int, в обработчике перекидываешь параметры из регистров или стека в системный процесс. И вытесняешь прикладной процесс системным.

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