PM: VM & задача как обработчик прерывания

Тема в разделе "WASM.OS.DEVEL", создана пользователем C0DiCK, 26 июл 2007.

  1. C0DiCK

    C0DiCK New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2005
    Сообщения:
    38
    Я наверное чего-то не знаю, а просматривая документацию упорно это пропускаю. Но никак не могу понять, почему, когда я включаю виртуальную память, при возврате из обработчика прерывания от клавиатуры (отдельная задача) происходит какая-то ошибка с CS. Bochs пишет: "CS not valid executable seg". Без виртуальной памяти всё работает замечательно. В чём может быть ошибка? Код есть, это смесь C и ассемблера.
     
  2. C0DiCK

    C0DiCK New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2005
    Сообщения:
    38
    извините это случайно получилось
     
  3. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Странно, по коду, вроде, все правильно. Залей сюда образ для Bochs, может там что интересное обнаружится. И, кстати, Bochs, случайно, не имеет проблем с четырехмегабайтными страницами?
     
  4. C0DiCK

    C0DiCK New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2005
    Сообщения:
    38
    Проблем с четырёхмегабайтными страницами нет. Но не работает и код с таблицей четырёхкилобайтных страниц. И нет никакого образа. Программа работает с дискеты FAT12. Кстати я пробывал и запускать просто так, не через Bochs: всё рабно не работает.
     
  5. C0DiCK

    C0DiCK New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2005
    Сообщения:
    38
    Короче, на случай подобных проблем у кого-нибудь другого, проблема в том, что в начальный сегмент остояние задачи не загружается регистр CR3. Соответственно при возврате из обработчика прерывания при включеной виртуальной памяти это вызывает неисправимую ошибку. Решение - занести этот регистр в TSS предварительно, более элегантного варианта я пока не нашёл.
     
  6. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    C0DiCK
    при чем здесь TSS
    у тебя обработчик прерывания вызывается через шлюз задачи что-ли?
     
  7. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    C0DiCK

    в BIOSе отключи APIC, поскольку ты пользуешь PIC.
     
  8. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    rei3er

    А где ты возьмешь ss:esp для 0 кольца, при передаче управления из любого другого?
     
  9. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    PROFi
    из TSS
    откуда ж еще