OSDev

для всех
Текущее время: 21 дек 2024, 16:47

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Загрузка программ
СообщениеДобавлено: 13 фев 2019, 10:06 

Зарегистрирован: 26 янв 2019, 14:00
Сообщения: 34
Здравствуйте, появился довольно таки абстрактный вопрос.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка программ
СообщениеДобавлено: 13 фев 2019, 10:50 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка программ
СообщениеДобавлено: 13 фев 2019, 17:38 

Зарегистрирован: 26 янв 2019, 14:00
Сообщения: 34
Спасибо за ответ! Я вас понял. А как быть со случаем когда имеется пользовательское пространство, как я могу вызвать из загруженной программы так называемый системный вызов?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка программ
СообщениеДобавлено: 14 фев 2019, 01:29 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка программ
СообщениеДобавлено: 15 фев 2019, 21:12 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Создаёшь файл в папке \process\33
Номер выбираешь из свободных. Из elf файла копируешь секции согласно заголовку.
Снимаешь блокировку и процесс будет запущен планировщиком.

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB