Многозадачность

Тема в разделе "WASM.WIN32", создана пользователем Dart_Bobr, 27 сен 2004.

  1. Dart_Bobr

    Dart_Bobr New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    100
    Адрес:
    Ukraine
    Как в Винде происходит переключение процесов? Насколько я понимаю висит процес, который переключает выполнение других процесов. Он по идее находится в кеше, но когда он переключает другой процес, то в кеш должен загружаться он. Не слишком ли медленно? Насколько помню руководить загрукой кеша програмно - невозможно. Или может здесь есть что-то чего я не знаю? :dntknw:(.
     
  2. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Переключение адресных пространств процессов происходит как часть переключения контекстов потоков и, как это ни странно, для этого достаточно всего двух инструкций :)


    Код (Text):
    1. mov eax, KPROCESS.DirectoryTableBase ; get new directory base
    2. mov cr3, eax                         ; set new directory base




    DirectoryTableBase - это физический адрес каталога страниц процесса. По значению в cr3 процессор добирается до физических адресов. При этом специально из кэша ничего не грузится. Вся система (логически) поделена на кучку диспетчеров: Диспетчер памяти, Дипетчер объектов и т.п. Каждый отвечает за своё хозяйство. После переключения контекста, поток продолжает выполнение. Если он обращается к отсутствующей странице, происходит исключение и его обработчик вызывает диспетчер памяти, который и достает из кэша (имеется ввиду файл подкачки) страницу (есили она конечно была туда перемещена).



    Подробнее в книжках умных написано.
     
  3. Dart_Bobr

    Dart_Bobr New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    100
    Адрес:
    Ukraine
    В каких умных книжках, если можно названия и адреса в нете?
     
  4. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Есть, по-крайней мере, одна умная книжка: "Inside Microsof Windows 2000" y David A. Solomon and Mark E. Russinovich.



    У нас не приняты ссылки на книги выложенные в ущерб авторам, но где-то оно лежит ;)
     
  5. Narkomanius

    Narkomanius New Member

    Публикаций:
    0
    Регистрация:
    14 апр 2003
    Сообщения:
    144
    достаточно созранить все регистры в стек, сохранить где нить в структуре процесса esp, затем -меняем cr3, из структуры нового процесса загружаем esp и из стека читаем содеримое регистров.

    я во всяком случае так делал. без замены esp потоки в пространстве ядра не возможны.
     
  6. Funbit

    Funbit Member

    Публикаций:
    0
    Регистрация:
    13 апр 2003
    Сообщения:
    92
    Адрес:
    Russia
    хорошо бы уже PM реализовать, что так долго никак :dntknw:



    если что, с книжкой могу помочь
     
  7. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    А что с книжкой сложного? Я просто написал название в гугле и нажал кнопку "мне повезет". Сразу предложили выбрать путь для сохранения 19метров. Правда, я искал английскую, с русской, возможно, проблемы будут..