я тут недавно задумался о поддержке потоков и процессов и Windows, как известно на процессорах Intel поддрежка потоков происходит через TSS сегменты и для переключения задач нужно просто сделать прыжок указав селектор требуемой задачи. Так вот, максимальное число потоков которое может быть на компьютере в защищённом режиме это примерно 8000. Недавно посмотрел с помощью утилиты GdtDump таблицу GDT, её лимит 3FF, следовательно максимальное количество дескрипторов 128 включая дескрипторы сегментов, максимальное количество дексрипторов TSS примерно 100, а этого не может быть так как количество потоков в Windows обычно примерно 250. Отсюда вывод: Windows реализует многопоточность програмно, а не аппаратно. поправьте меня если я не прав.
действительно так и есть) ВИнда много чего не юзает. Например, LDT пустует обычно. Первое и второе кольца защиты тоже.
rpy3uH А ты как хотел? Атрибуты доступа ставятся на страницы.. или ты хотел снизить лимит сегмента кода, чтобы вообще были недоступны системные адреса чтоли?
ну да, а ядра свои сегменты и их можно оставить без изменения, а вот пользовательские сегменты с уровнем 3 урезать
Где-то была уже тема про SYSENTER/SYSEXIT, где было сказано про принудительное превращение модели памяти в flat при выходе из сискала по SYSEXIT.
TSS необходим в любом случае откуда по-вашему брать SS/ESP (для ring0) при исключении/прерывании (когда CPL = 3)? кроме того, для аппаратного переключения задач вполне хватит одного общего TSS дескриптора (изменяем в нем значение базы TSS и делаем jmp, текущий контекст (регистры) записывается в текущий TSS (база TSS берется из TR, в котором хранится ее значение до изменения))
rei3er Не встречал я такой инфы о Windows. Ссылку бы дали , чтоли.. И все равно при переключении процессов, Windows не использует TSS, у него свой планировщик, все делает сам. Думаю это сделано для того, чтобы было проще портировать эту часть кода на другие платформы... ИМХО
нет, это просто к вопросу о том, что аппаратное переключение возможно без создания отдельных TSS дескрипторов для каждой задачи как в Windows я не знаю Эта часть кода все равно зависит от аритектуры (все-таки работа с регистрами), так что сомнительный аогумент
Вообщем ясно, что для отдельного потока TSS не создается точно. А уж как там дальше - фиг знает, надо сорсы планировщика смотреть.