OSDev http://osdev.su/ |
|
Работа с прерываниями http://osdev.su/viewtopic.php?f=7&t=366 |
Страница 3 из 3 |
Автор: | phantom-84 [ 23 мар 2011, 10:51 ] |
Заголовок сообщения: | Re: Работа с прерываниями |
SII писал(а): Например, перезагрузка сегментных регистров -- это кошмарно долгая операция, которая при неудачном раскладе (вполне возможном, между прочим) может растягиваться у современных процов на многие тысячи тактов. Во, во. А самое главное зачем перезагружать сегментные регистры, если большинство из них (у меня cs, ds, es, ss) в старой и в новой задачах должно содержать одни и те же значения (переключение происходит в режиме ядра). Есть еще TR, а фактически сохранение/загрузка множества ненужных значений в/из TSS. Про такой (практически никому ненужный) реликт, как LDTR, я уже молчу.
|
Автор: | Yoda [ 23 мар 2011, 22:38 ] |
Заголовок сообщения: | Re: Работа с прерываниями |
SII писал(а): При аппаратном переключении они "трогаются" аппаратно, хочешь ты этого или нет. Я плохо выразил свою мысль. Я имел ввиду следующее. Я почти уверен, что если новое загруженное значение сегментного регистра совпадает с текущим, то процессор не станет подгружать новый дескриптор из GDT, проверять его на валидность, сравнивать уровни привилегий и т.д. Наверняка этот момент оптимизирован. Если это действительно так, то в одном обращении к ячейке памяти нет ничего страшного. Если оно не попало в кэш, значит редко используется и его вклад в производительность близок к нулю. При частых обращениях оно наверняка будет попадать в кэш. SII писал(а): А исследовать время выполнения разных операций было бы неплохо. Тут главная проблема -- суметь это сделать корректно. Всё ж Коре и7 -- это не 80386, сейчас куда труднее учесть все побочные факторы... Скажем так. С точки зрения влияния на общую производительность нас больше волнуют часто выполняющиеся переключения задач в нормальных условиях. Как правило, это обращение к системным функциям и обмен сообщениями между задачами. Мне кажется, здесь реально замерить накладные расходы. Если рассматривать ненормальные условия, то по большей части это page fault, что в целом тоже не очень сложно замерить. В общем, надо бует попробовать на реальном оборудовании. phantom-84 писал(а): Есть еще TR, а фактически сохранение/загрузка множества ненужных значений в/из TSS. Про такой (практически никому ненужный) реликт, как LDTR, я уже молчу. Да не так уж и много там ненужных значений. Кроме сегментных регистров, это указатели стеков неиспользуемых уровней привилегий (которые, кстати, и не трогаются процессором без необходимости), это, пожалуй, только линк и LDTR. |
Автор: | SII [ 23 мар 2011, 23:47 ] |
Заголовок сообщения: | Re: Работа с прерываниями |
Yoda писал(а): SII писал(а): При аппаратном переключении они "трогаются" аппаратно, хочешь ты этого или нет. Я плохо выразил свою мысль. Я имел ввиду следующее. Я почти уверен, что если новое загруженное значение сегментного регистра совпадает с текущим, то процессор не станет подгружать новый дескриптор из GDT, проверять его на валидность, сравнивать уровни привилегий и т.д. Наверняка этот момент оптимизирован Глубоко заблуждаетесь, и дело здесь не в оптимизации. Мог измениться сам дескриптор, а не ссылка на него, поэтому процессор просто обязан перезагрузить его, если перезагружена ссылка. |
Автор: | Yoda [ 24 мар 2011, 01:27 ] |
Заголовок сообщения: | Re: Работа с прерываниями |
Мда, действительно. Эххблин, получается, одна архитектурная кривизна накладывается на другую, в результате в целом хорошая идея (аппаратное переключение задач) становится невостребованной. Похоже, придётся отказаться от неё. А так хотелось сделать девственно чистое адресное пространство пользовательской задачи, без кусков ОС. Было бы красиво. Хочется крепко выругаться в адрес Intel. |
Автор: | SII [ 24 мар 2011, 02:34 ] |
Заголовок сообщения: | Re: Работа с прерываниями |
Не такая это и хорошая идея, как Вам кажется. Если её реализовать, то каждый раз, когда оси потребуется обратиться в адресное пространство задачи пользователя (а такое случается весьма и весьма часто), придётся настраивать определённым образом таблицы переадресации, сбрасывать (по крайней мере, частично) TLB и всё такое прочее... В общем, и эффективность снижается, и больше геморроя при создании собственно ядра. А без этого всё просто: есть контекст собственно ядра (не привязанный ни к какой задаче) и есть контекст ядра для определённой задачи. |
Автор: | Himik [ 24 мар 2011, 04:22 ] |
Заголовок сообщения: | Re: Работа с прерываниями |
Yoda, ни кто не говорит, что ядро должно быть размером 1ГБ. Минимизируй, сделай 4МБ, для задачи незаметно будет. |
Автор: | Yoda [ 24 мар 2011, 11:31 ] |
Заголовок сообщения: | Re: Работа с прерываниями |
SII писал(а): Не такая это и хорошая идея, как Вам кажется. Если её реализовать, то каждый раз, когда оси потребуется обратиться в адресное пространство задачи пользователя (а такое случается весьма и весьма часто), придётся настраивать определённым образом таблицы переадресации, сбрасывать (по крайней мере, частично) TLB и всё такое прочее... Это в любом случае потребуется делать. Либо минимизируем адресное пространство ОС, тогда придётся динамически мапировать страницы, либо отъедаем внушительную часть адресного пространства задачи. Himik писал(а): Минимизируй, сделай 4МБ, для задачи незаметно будет. Естественно. Так я и планирую сделать. |
Автор: | SII [ 24 мар 2011, 12:38 ] |
Заголовок сообщения: | Re: Работа с прерываниями |
Yoda писал(а): SII писал(а): Не такая это и хорошая идея, как Вам кажется. Если её реализовать, то каждый раз, когда оси потребуется обратиться в адресное пространство задачи пользователя (а такое случается весьма и весьма часто), придётся настраивать определённым образом таблицы переадресации, сбрасывать (по крайней мере, частично) TLB и всё такое прочее... Это в любом случае потребуется делать. Либо минимизируем адресное пространство ОС, тогда придётся динамически мапировать страницы, либо отъедаем внушительную часть адресного пространства задачи. На ходу переотображать страницы из-за каждого чиха точно не придётся, если система сколько-нибудь грамотно спроектирована и реализована. Если установлен контекст нужной задачи, то дальше в отображении вообще ничего менять системе не придётся (если, конечно, она не обрабатывает обращение задачи с просьбой изменить её, задачи, отображение на память -- например, выделить дополнительную область). |
Автор: | phantom-84 [ 24 мар 2011, 13:44 ] |
Заголовок сообщения: | Re: Работа с прерываниями |
Yoda писал(а): Himik писал(а): Минимизируй, сделай 4МБ, для задачи незаметно будет. Естественно. Так я и планирую сделать. |
Автор: | Yoda [ 24 мар 2011, 18:23 ] |
Заголовок сообщения: | Re: Работа с прерываниями |
phantom-84 писал(а): Но для монолита такое не прокатит. Это очевидно. Но монолит по ряду причин и не рассматривается. Делается микроядро. |
Страница 3 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |