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/ |