OSDev

для всех
Текущее время: 28 мар 2024, 18:03

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: операционная система
СообщениеДобавлено: 17 апр 2019, 00:29 

Зарегистрирован: 17 апр 2019, 00:02
Сообщения: 4
Доброго времени суток! Кто-нибудь знает как работает процессор в защищенном режиме.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: операционная система
СообщениеДобавлено: 17 апр 2019, 01:09 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Перенёс сюда тему из раздела "Новости", т.к. она не имеет никакого отношения к новостям.
Вопроса в вашем посте не увидел, но на всякий случай подтверждаю: да, кто-нибудь знает, как работает процессор в защищённом режиме.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: операционная система
СообщениеДобавлено: 17 апр 2019, 02:15 

Зарегистрирован: 17 апр 2019, 00:02
Сообщения: 4
Yoda писал(а):
Вопроса в вашем посте не увидел

Я извиняюсь,может я не правильно задал вопрос. меня интересует как работает процессор в защищенном режиме. Вернее его поведение при прерывании. В реальном режиме в начале прерывания сохраняются все регистры в стеке потом происходит переход по вектору прерывания
(вектор находиться в начале оперативной памяти 0000h-003fh) при возвращении по iret восстанавливает все регистры из стека. в защищенном режиме не все регистры сохраняются.в стеке какие не знаю. При этом не все прерывания по одинаковому сохраняют в стеке. некоторые еще сохраняют код ошибки. какие не знаю. Еще как я понял после перехода в защищенный вектора прерывания (по крайней мере рабочего) нет. Хотелось бы знать какие минимально нужно описать что бы операционная система не зависла. Как я понимаю таймер, клавиатура, критические ошибки нужны может еще какие то. Хотелось бы знать их прерывание (int) а не условное обозначение и описание (что прерывания должны делать). Заранее спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: операционная система
СообщениеДобавлено: 17 апр 2019, 11:24 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
dmitriy писал(а):
Вернее его поведение при прерывании. В реальном режиме в начале прерывания сохраняются все регистры в стеке потом происходит переход по вектору прерывания (вектор находиться в начале оперативной памяти 0000h-003fh)


Не совсем верно. Насколько помню (а если ошибусь, знающие поправят), в архитектуре IA-32 (x86) при входе в обработчик прерывания (независимо от того, в каком режиме) сохраняются только адрес команды (пара регистров CS:IP, если говорим о реальном режиме) и регистр флагов (FLAGS), а отнюдь не все регистры. Остальные регистры при необходимости сохраняет обработчик прерывания, он же отвечает и за их восстановление.

У IA-32 256 векторов прерываний, в реальном режиме каждый вектор имеет длину 4 байта (он содержит адрес точки входа в обработчик соответствующего прерывания), соответственно, вся таблица векторов занимает 1024 байта -- физические адреса с нуля до 3FFh (Вы написали 3F).

dmitriy писал(а):
в защищенном режиме не все регистры сохраняются.в стеке какие не знаю. При этом не все прерывания по одинаковому сохраняют в стеке. некоторые еще сохраняют код ошибки. какие не знаю. Еще как я понял после перехода в защищенный вектора прерывания (по крайней мере рабочего) нет.


Сохраняется та же информация (адрес команды + флаги), плюс иногда код прерывания. Вход в обработчики осуществляется с помощью описателей (дескрипторов), которые собраны в таблицу IDT, положение которой в памяти задаётся регистром IDTR; в него надо загрузить корректную информацию (правильный адрес уже сформированной таблицы) до разрешения прерываний. Подробностей не помню, читайте документацию на архитектуру -- там всё достаточно подробно описано.

dmitriy писал(а):
Хотелось бы знать какие минимально нужно описать что бы операционная система не зависла. Как я понимаю таймер, клавиатура, критические ошибки нужны может еще какие то. Хотелось бы знать их прерывание (int) а не условное обозначение и описание (что прерывания должны делать)


То, что может возникнуть, то и должно обрабатываться. Прерывания, возникающие прямо из-за действий программы (например, при выполнении команды INT), описаны в документации на архитектуру, там же приведены и номера их векторов. Аппаратные прерывания поступают от логически независимой от процессора железки -- контроллера прерываний (PIC в древних машинах, APIC в современных). Он должен быть правильным образом запрограммирован, чтобы правильно передавать прерывания от аппаратуры процессору.

Пы.Сы. И не пытайтесь сразу прыгнуть выше крыши: разберитесь сначала досконально с реальным режимом, сделайте в нём рабочую недосистему (с прерываниями и всем таким прочим) и лишь затем перебирайтесь в защищённый режим. Пытаться сразу разобраться в куче разнообразного материала -- верный путь ничего не добиться, а лишь запутаться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: операционная система
СообщениеДобавлено: 17 апр 2019, 16:56 

Зарегистрирован: 10 авг 2007, 15:37
Сообщения: 60
Вообще вопрос очень обширный.
В первую очередь вам нужно руководство по архитектуре IA32. А точнее даже третий том его.
https://software.intel.com/en-us/articles/intel-sdm
Там описано как работает процессор во всех его режимах.
Как уже сказал SII - стоит начать с реального режима, т.к. в защищенный вы все равно будете переключаться из реального и некоторые аспекты понимать надо.
Принципиальное отличие обработки прерываний в реальном и защищенном режимах в том, что в реальном таблица векторов хранит просто адреса обработчиков,
а в защищенном нужно создать и настроить таблицу IDT, которая используется для определения того, где лежит обработчик прерывания, а так же содержит кучку других полей.
Начните с чтения SDM и если будут возникать более конкретные вопросы, то уже по ним можно будет что-то отвечать.
Так же в инете полно примеров, так что они то же в помощь.
Например тут:
https://vxlab.info/wasm/publist.php-list=24.htm


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: операционная система
СообщениеДобавлено: 17 апр 2019, 19:02 

Зарегистрирован: 17 апр 2019, 00:02
Сообщения: 4
Не получается у меня правильно все объяснить попробую еще раз
SII писал(а):
Не совсем верно. Насколько помню (а если ошибусь, знающие поправят), в архитектуре IA-32 (x86) при входе в обработчик прерывания (независимо от того, в каком режиме) сохраняются только адрес команды (пара регистров CS:IP, если говорим о реальном режиме) и регистр флагов (FLAGS), а отнюдь не все регистры. Остальные регистры при необходимости сохраняет обработчик прерывания, он же отвечает и за их восстановление.


Вы ошибаетесь. в реальном (не защищенном) режиме обработчик прерывания сохраняет регистры AX BX CX DX SI DI ES DS CS IP регистр флагов (FLAGS) не помню только в какой последовательности. это точно сам проверял. Поэтому иногда (когда надо в регистрах оставить результат) при выходе из прерываний приходиться корректировать стек.

SII писал(а):
У IA-32 256 векторов прерываний, в реальном режиме каждый вектор имеет длину 4 байта (он содержит адрес точки входа в обработчик соответствующего прерывания), соответственно, вся таблица векторов занимает 1024 байта -- физические адреса с нуля до 3FFh (Вы написали 3F).


Да уж бывает описался :D это надо же было так. Писал для людей не для компа поэтому цифры не проверил.
64 байта под 256 прерываний :lol: :lol: :lol: :lol: :lol: сам себя рассмешил :lol: :lol:

SII писал(а):
Сохраняется та же информация (адрес команды + флаги), плюс иногда код прерывания. Вход в обработчики осуществляется с помощью описателей (дескрипторов), которые собраны в таблицу IDT, положение которой в памяти задаётся регистром IDTR; в него надо загрузить корректную информацию (правильный адрес уже сформированной таблицы) до разрешения прерываний. Подробностей не помню, читайте документацию на архитектуру -- там всё достаточно подробно описано.


Не совсем верно. Прерывания общей защиты (когда в память не туда залезишь, или полномочий не хватает и т. д) еще сохраняют код ошибки. Какие именно (прерывания) не где найти не могу.



SII писал(а):
То, что может возникнуть, то и должно обрабатываться. Прерывания, возникающие прямо из-за действий программы (например, при выполнении команды INT), описаны в документации на архитектуру, там же приведены и номера их векторов. Аппаратные прерывания поступают от логически независимой от процессора железки -- контроллера прерываний (PIC в древних машинах, APIC в современных). Он должен быть правильным образом запрограммирован, чтобы правильно передавать прерывания от аппаратуры процессору.

Пы.Сы. И не пытайтесь сразу прыгнуть выше крыши: разберитесь сначала досконально с реальным режимом, сделайте в нём рабочую недосистему (с прерываниями и всем таким прочим) и лишь затем перебирайтесь в защищённый режим. Пытаться сразу разобраться в куче разнообразного материала -- верный путь ничего не добиться, а лишь запутаться.


Реальный (не защищенный) режим я знаю. Проблем с ним у меня не возникало. Только в реальном режиме уже есть прерывание (в BIOS)и достаточно много. То бишь не загружая не какой системы уже можно опрашивать клавиатуру, записывать\стирать с диска, выводить на экран и т.д И все это не программируя прерываний


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: операционная система
СообщениеДобавлено: 17 апр 2019, 19:47 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
dmitriy писал(а):
SII писал(а):
Не совсем верно. Насколько помню (а если ошибусь, знающие поправят), в архитектуре IA-32 (x86) при входе в обработчик прерывания (независимо от того, в каком режиме) сохраняются только адрес команды (пара регистров CS:IP, если говорим о реальном режиме) и регистр флагов (FLAGS), а отнюдь не все регистры. Остальные регистры при необходимости сохраняет обработчик прерывания, он же отвечает и за их восстановление.


Вы ошибаетесь. в реальном (не защищенном) режиме обработчик прерывания сохраняет регистры AX BX CX DX SI DI ES DS CS IP регистр флагов (FLAGS) не помню только в какой последовательности. это точно сам проверял.


Вообще-то я не ошибаюсь и пишу чёрным по белому: все регистры, кроме адреса команды (CS:IP) и флагов, сохраняет обработчик (а не процессор), причём обработчик не обязан записывать эти регистры в стек или куда-нибудь ещё, если их не меняет. Он обязан (в общем случае) лишь обеспечить их неизменность, а как этого добьётся -- это его сугубо личное дело. Например, если для обработки некоторого прерывания обработчику достаточно регистров AX и DX, он может сохранить только их и не тратить время на сохранение/восстановление остальных регистров:

Код:
Intr_Enrty: push  ax
            push  dx
обработка прерывания
            pop   dx
            pop   ax
            iret


Другое дело, что проще сделать pusha в начале и popa в конце, сохранив-восстановив все 7 регистров общего назначения. Но эти команды отсутствовали в 8086/88, там приходилось отдельными push/pop (понятно, сейчас это неактуально, разве что если кто страдает некрофилией и пишет именно под 8086).

Цитата:
SII писал(а):
Сохраняется та же информация (адрес команды + флаги), плюс иногда код прерывания. Вход в обработчики осуществляется с помощью описателей (дескрипторов), которые собраны в таблицу IDT, положение которой в памяти задаётся регистром IDTR; в него надо загрузить корректную информацию (правильный адрес уже сформированной таблицы) до разрешения прерываний. Подробностей не помню, читайте документацию на архитектуру -- там всё достаточно подробно описано.


Не совсем верно. Прерывания общей защиты (когда в память не туда залезишь, или полномочий не хватает и т. д) еще сохраняют код ошибки. Какие именно (прерывания) не где найти не могу.


Я код ошибки обозвал кодом прерывания -- не помню, как оно у Интела называется; у каждой архитектуры своя терминология. А искать, естественно, в описании архитектуры IA-32, в третьей её части -- именно там описывается всё, что касается системной архитектуры (прерывания, состояния, переключения туда-сюда-обратно и т.д. и т.п.).

Цитата:
Реальный (не защищенный) режим я знаю. Проблем с ним у меня не возникало. Только в реальном режиме уже есть прерывание (в BIOS)и достаточно много. То бишь не загружая не какой системы уже можно опрашивать клавиатуру, записывать\стирать с диска, выводить на экран и т.д И все это не программируя прерываний


А вот надо уметь программировать всё это самому, не полагаясь на BIOS, и только затем лезть в защищённый режим. Если попробовать сразу совместить одно с другим, лишь создадите себе лишние проблемы (попробуй догадайся, из-за чего всё висит: неверно запрограммирован контроллер прерываний? кривой дескриптор в IDT? кривой TSS? один стек затирает другой? ну и т.д. и т.п.)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: операционная система
СообщениеДобавлено: 17 апр 2019, 20:39 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
dmitriy писал(а):
Реальный (не защищенный) режим я знаю. Проблем с ним у меня не возникало. Только в реальном режиме уже есть прерывание (в BIOS)и достаточно много. То бишь не загружая не какой системы уже можно опрашивать клавиатуру, записывать\стирать с диска, выводить на экран и т.д И все это не программируя прерываний

Во времена DOS очень даже принято было вешать свои обработчики на прерывания. Борлан паскаль заменял аж 16 штук. Grub по меньше штуки 4 не меньше.

Цитата:
Какие именно (прерывания) не где найти не могу.

3 том глава про прерывания, примерно 5.
https://dev64.wordpress.com/2012/04/16/ ... rupt-table

Цитата:
. в защищенном режиме не все регистры сохраняются.в стеке какие не знаю.

Рисунок 5.4 В верху при смене стека снизу при создании нового стека.
Изображение


Цитата:
Хотелось бы знать какие минимально нужно описать что бы операционная система не зависла. Как я понимаю таймер, клавиатура, критические ошибки нужны может еще какие то. Хотелось бы знать их прерывание (int) а не условное обозначение и описание (что прерывания должны делать). Заранее спасибо.

Минимум все 32 исключения и прерывания таймера и клавиатуры. IRQ преобразуются в INT согласно тому как вы запрограммировали PIC.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: операционная система
СообщениеДобавлено: 18 апр 2019, 00:53 

Зарегистрирован: 17 апр 2019, 00:02
Сообщения: 4
leonidpr писал(а):


Не плохая ссылка. Всю прочитал. Спасибо большое leonidpr. другую позже посмотрю

Для кого интересно прерывание 0Dh-Исключение общей защиты ( #GP - General Protection Exception ) Означает, что процессор обнаружил одно из условий нарушения защиты. оно так же добавляет код ошибки


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB