Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Всем ОС-писателям :) А давайте (+)

1.8K
24 ноября 2003 года
gwg605
76 / / 06.03.2003
разберем такую маленькую вещь как системый вызов и асинхронный вызов приклада из режима ядра !
Начальные данные:
1. Платформа IA-32
2. Не используем SYSENTER/SYSEXIT комманды
3. Система поддерживает процессы и потоки
4. У каждого процесса свое адресное пространство
5. Пространство процесса разделено пополам: для приклада и системы
6. Один процессор
7. У процессов и потоков нет такого понятия как очередь сообщений (как в виндах)
8. Переключение контекстов может происходить в двух случаях:
- сразу после перехода процессора в режим ядра
- перед выходом из режима ядра

Будем разбирать следующее поведение:
а) конкурентные вызовы прикладами системы
1. Поток1 вызывает систему SysCall1
2. Сохраняем состояние Потока1
3. Что-то делаем
4. Необходимо переключение контекстов (Поток2)
5. Переключаем контекст
6. Востаналиваем состяние Потока2
7. Выходим в пользовательский режим
8. Поток2 вызывает систему SysCall2

b) асинхронный вызов приложения для уведомлении о каком-то событии (вызов CALLBACK функции пользователького приложения из режима ядра)
1. Приходит асинхронное событие (прерывание)
2. Переходим в режим ядра
3. Определяем что надо уведомить Поток1 в Процессе1
4. Переключаемся в Поток1 Процесса1
5. Формируем в ползовательском стеке Потока1 необходимый фрагмент для возврата в режим ядра после окончания CALL BACK функции
6. устаналиваем в контексте Потока1 адрес на CALLBACK функцию
7. выходим из режима ядра
Здесь начинаются варианты:
х1 - код CALLBACK функции правильный, он выполняется и возвращает управление системе.
х2 - код CALLBACK функции правильный, но ему необходимо дернуть систему SysCall3 для получения каких-то данных, после чего вернет управление системе.
п - код CALLBACK функции плохой и не возвращает управление, может дергать систему, а может и нет.

Вот интересно было бы услышать кто и как реализует или планировал это реализовать применительно к архитектуре Интела и с одним TSS для всех приложений. Что храним в стеке, сколько стеков, как они связываются, какие возможности Интела используются, какие данные привязываются к процессу/потоку.

С уважением,
Валерий.

ЗЫ. Сорри, что так много.
447
26 ноября 2003 года
CodeWorld
315 / / 05.10.2003
айда ось со мной писать..дай асю
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог