поддержка потоков и процессов в Windows

Тема в разделе "WASM.WIN32", создана пользователем rpy3uH, 13 апр 2007.

  1. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    я тут недавно задумался о поддержке потоков и процессов и Windows, как известно на процессорах Intel поддрежка потоков происходит через TSS сегменты и для переключения задач нужно просто сделать прыжок указав селектор требуемой задачи. Так вот, максимальное число потоков которое может быть на компьютере в защищённом режиме это примерно 8000. Недавно посмотрел с помощью утилиты GdtDump таблицу GDT, её лимит 3FF, следовательно максимальное количество дескрипторов 128 включая дескрипторы сегментов, максимальное количество дексрипторов TSS примерно 100, а этого не может быть так как количество потоков в Windows обычно примерно 250.
    Отсюда вывод: Windows реализует многопоточность програмно, а не аппаратно.
    поправьте меня если я не прав.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    ну да, так и есть. Windows не юзает TSS.
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    действительно так и есть) ВИнда много чего не юзает. Например, LDT пустует обычно.
    Первое и второе кольца защиты тоже.
     
  4. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    кстати я заметил что она защищает свою память только на уровне страниц
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    rpy3uH
    А ты как хотел? Атрибуты доступа ставятся на страницы.. или ты хотел снизить лимит сегмента кода, чтобы вообще были недоступны системные адреса чтоли?
     
  6. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    ну да, а ядра свои сегменты и их можно оставить без изменения, а вот пользовательские сегменты с уровнем 3 урезать
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Где-то была уже тема про SYSENTER/SYSEXIT, где было сказано про принудительное превращение модели памяти в flat при выходе из сискала по SYSEXIT.
     
  8. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    TSS необходим в любом случае
    откуда по-вашему брать SS/ESP (для ring0) при исключении/прерывании (когда CPL = 3)?
    кроме того, для аппаратного переключения задач вполне хватит одного общего TSS дескриптора (изменяем в нем значение базы TSS и делаем jmp, текущий контекст (регистры) записывается в текущий TSS (база TSS берется из TR, в котором хранится ее значение до изменения))
     
  9. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    rei3er
    Не встречал я такой инфы о Windows. Ссылку бы дали , чтоли..
    И все равно при переключении процессов, Windows не использует TSS, у него свой планировщик, все делает сам.
    Думаю это сделано для того, чтобы было проще портировать эту часть кода на другие платформы... ИМХО
     
  10. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    нет, это просто к вопросу о том, что аппаратное переключение возможно без создания отдельных TSS дескрипторов для каждой задачи
    как в Windows я не знаю
    Эта часть кода все равно зависит от аритектуры (все-таки работа с регистрами), так что сомнительный аогумент
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Вообщем ясно, что для отдельного потока TSS не создается точно. А уж как там дальше - фиг знает, надо сорсы планировщика смотреть.