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

Ваш аккаунт

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

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

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

Где хранить ТСС'ы и др.

6.0K
02 августа 2007 года
artyom-tyanutov
107 / / 10.07.2006
Где и как хранить ТСС'ы прог, ведь каждая в своем адресном пространстве?
Я пока выделяю для каждого malloc'ом в адресном пространстве ядра и храню во взаимосвязанном списке и при переключении задач или создании процесса загружаю cr3 ядра.
Или лучше выделить метр оперы и монтировать везде?
Просто это накладывает ограничение на количество ТСС'ов, но в то же время первый способ медленнее.
Что скажите?
И еще:
Почему в qemu при дальнем прыжке на собственный ТСС при старте многозадачности возникает Debug Exception?
Хотя в бочсе, вмваре и в реале все нормально?
И напоследок: Подскажите что-нибудь почитать про реализацию обмена процессов сообщениями.
1.9K
02 августа 2007 года
disasm
232 / / 06.02.2006
Можно сделать память ядра общей для всех процессов, тогда переключение будет сводиться только лишь в JMP-е на нужный дескриптор ТСС.
Кроме того можно использовать всего 2 дескриптора ТСС, один текущий, а другой заполнять прямо перед переходом, попутно сбрасывая флаг занятости.

По поводу исключений отладки ничего толком сказать не могу, думаю стоит во время исключения заглянуть в отладочные регистры.

По поводу книг.. По поводу реализации обмена сообщениями между процессами ничего посоветовать не могу, зато в книге А.В. Гордеев "Операционные системы" можно найти описание принципов работы тех или иных методов (почтовые ящики, очереди сообщений, pipe)
6.0K
02 августа 2007 года
artyom-tyanutov
107 / / 10.07.2006
А на сколько долго происходит смена cr3?
Стоит ли так делать?
Если все же располагать ТСС'ы в одном месте то сколько памяти выделить под это дело?
Метра хватит!
qemu не нравиться прыжок на свой ТСС, это вообще нормально?
З.Ы.:Спасибо за книгу, скачать ее где-нибудь можно?
З.Ы.Ы.: Где можно взять инфу про GCC constraints?
1.9K
02 августа 2007 года
disasm
232 / / 06.02.2006
А зачем cr3 заменять?? Если ТСС промэппированы в разных процессах в одном месте то не имеет значения чей cr3 стоит на данный момент. cr3 меняется автоматически при переключении процессов.

К сожалению скачать не знаю где.

GCC constraints? А что именно интересует? Можно попробовать почитать официальную документацию по компилятору.
6.0K
02 августа 2007 года
artyom-tyanutov
107 / / 10.07.2006
1) Так в том то и дело что ТСС'ы у меня выделяются динамически и нигде не определены изначально!
Или лучше отвести им память где-нибудь?
2) интересует оформление вставок. например в чем ошибка:
asm("movl %eax, %esi \n movl %ebx, %edi \n rep movsb"::"a"(src), "b"(dest));
И прочее, чем больше тем лучше)
1.9K
02 августа 2007 года
disasm
232 / / 06.02.2006
Без разницы как выделены ТСС, главное чтобы перед переходом они были прописаны как сегменты ТСС в таблице GDT, причем этот сегмент не совпадал с текущим.

HOWTO по асму в gcc
http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
6.0K
02 августа 2007 года
artyom-tyanutov
107 / / 10.07.2006
Спасибо то что надо!
Значит придется расположить все ТСС'ы где-нибудь в одном месте и будет мне счастье!
И сколько под них выделить?
1.9K
02 августа 2007 года
disasm
232 / / 06.02.2006
Не обязательно в одном месте, главное чтобы память, отводимая под каждую ТСС была промэппирована во всех процессах по одному и тому же адресу. В WinNT, например, память ядра общая для всех процессов, если в вашей ОС похожий метод распределения памяти ядра то можно просто выделать часть памяти под новую ТСС, только возможно необходимо еще и какое-то выравнивание для сегмента ТСС, но я точно утверждать не могу.. Можно выделить сразу большой кусок под множество ТСС "наперед".
По поводу того сколько выделять под ТСС ничего сказать не могу, разве что память нужна собственно для таблицы ТСС (она немного занимает) и для битовой карты портов. Как работать с битовой картой портов я не в курсе, может быть даже можно исползовать одну карту для всех процессов...
6.0K
03 августа 2007 года
artyom-tyanutov
107 / / 10.07.2006
Наверно лучше выделить под них кусок памяти, так как если они будут разбросаны по всей памяти то их будет проблематично монтировать для каждого процесса.
1.9K
03 августа 2007 года
disasm
232 / / 06.02.2006
Вы наверное что-то не так поняли...
До и после перехода ТСС текущего потока должна лежать в одном и том же месте, все равно где, главное по одному и тому же адресу. В структуре, описывающей поток можно записывать местонахождение ТСС этого потока, а перед переходом на этот поток брать это значение и инициализировать им свободный на данный момент дескриптор GDT.
6.0K
03 августа 2007 года
artyom-tyanutov
107 / / 10.07.2006
Да, но ведь и структуры, описывающие поток, тоже надо где-то хранить и причем в области памяти, доступной всем процессам.
Поэтому я думаю для простоты хранить ТСС'ы вместе с описанием процесса в доступной всем памяти.
1.9K
03 августа 2007 года
disasm
232 / / 06.02.2006
Так обычно и делается
6.0K
03 августа 2007 года
artyom-tyanutov
107 / / 10.07.2006
Ясно!
Спасиб!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог