Модераторы: powerfox, ZeeLax
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переключение CPU в "ring 0" для проверки приорит? 
V
    Опции темы
banderlog17
Дата 7.9.2012, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 7.9.2012

Репутация: нет
Всего: нет



Здравствуйте. 
Насколько я знаю, переключение процессора в режим "ring 0" происходит при получении прерывания.
Далее процессор переключается в упомянутый режим и запускает установленный операционной системой обработчик полученного прерывания. А как происходит переключение в этот режим для проверки "не слишком ли долго работает текущий процесс"? Ведь такую проверку можно произвести только из "ring 0" так как "ring 3" не может иметь доступ к информации о приоритетах процессов, верно? Вопрос такой. В процессорах аппаратно зашита функция переключения в "ring 0" после определенного времени, количества операций, или как?
Спасибо.

PM MAIL   Вверх
500mhz
Дата 8.9.2012, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 4
Всего: 14



Какого еще прерывания????




--------------------

PM MAIL ICQ   Вверх
tzirechnoy
Дата 9.9.2012, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 2
Всего: 16



По прерыванию от таймера и происходит.

Хотя, справедливости ради: есть аж 4 варианта перехода в ring 0: interrupt gate, trap gate, call gate, task gate. По прерыванию -- это, соответственно, первый вариант. 

Вообще, на эту тему можно почитать интеловские или амд-шные доки (напр. Intel® 64 and IA-32 Architectures Software Developer's Manual) -- но смысла в этом немного, дажэ ядерные хакеры обычно не оперируют такими концэпцыями, не нужно это. А там, где всё в одиночку делается (эмбедщина всякая), ia32/amd64 практически не встречается.
PM MAIL   Вверх
Cheloveck
Дата 9.9.2012, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 2
Всего: 32



Всё, что тебе нужно написано в /proc/[pid]/stat (man proc). Не нужно выдумывать велосипедов. Прерывания тебе никто не даст райзить из пользовательского режима.





--------------------
user posted image
PM Jabber   Вверх
banderlog17
Дата 10.9.2012, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 7.9.2012

Репутация: нет
Всего: нет



Цитата(tzirechnoy @ 9.9.2012,  15:49)
По прерыванию от таймера и происходит.

Хотя, справедливости ради: есть аж 4 варианта перехода в ring 0: interrupt gate, trap gate, call gate, task gate. По прерыванию -- это, соответственно, первый вариант. 

Вообще, на эту тему можно почитать интеловские или амд-шные доки (напр. Intel® 64 and IA-32 Architectures Software Developer's Manual) -- но смысла в этом немного, дажэ ядерные хакеры обычно не оперируют такими концэпцыями, не нужно это. А там, где всё в одиночку делается (эмбедщина всякая), ia32/amd64 практически не встречается.

Большое спасибо. Почитаю и про другие варианты. Мне это не то чтобы нужно в каком-то реальном проекте - просто я начал изучать архитектуру ОС и задался этим вопросом.

Добавлено через 59 секунд
Цитата(Cheloveck @ 9.9.2012,  17:57)
Всё, что тебе нужно написано в /proc/[pid]/stat (man proc). Не нужно выдумывать велосипедов. Прерывания тебе никто не даст райзить из пользовательского режима.

Спасибо. Но я пока и райзить ничего не собирался вроде-как smile Просто изучаю как это работает.
PM MAIL   Вверх
tzirechnoy
Дата 10.9.2012, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 2
Всего: 16



Цитата
 Прерывания тебе никто не даст райзить из пользовательского режима.


Лол, один из самых старых методов вызова сисколла -- int 0x80.
PM MAIL   Вверх
Cheloveck
Дата 10.9.2012, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 2
Всего: 32



Цитата(tzirechnoy @  10.9.2012,  13:44 Найти цитируемый пост)
Лол, один из самых старых методов вызова сисколла -- int 0x80. 

Спешу разочаровать тебя, это эмуляция. К аппаратным ресурсам имеет доступ только ОС. И она сама решает, что разить.
Цитата

 В отличие от реального режима, в защищённом режиме x86-процессоров обычные программы не могут обслуживать прерывания, эта функция доступна только системному коду (операционной системе).

http://ru.wikipedia.org/wiki/%D0%9F%D1%80%....BD.D0.B8.D0.B5


--------------------
user posted image
PM Jabber   Вверх
tzirechnoy
Дата 11.9.2012, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 2
Всего: 16



Цитата
Спешу разочаровать тебя, это эмуляция. К аппаратным ресурсам имеет доступ только ОС. И она сама решает, что разить.


Какая ещё эмуляцыя? Самое что ни на есть классическое ix86 прерывание (программное). И аппаратные ресурсы тут ни при чём, действительно.

Цитата
 В отличие от реального режима, в защищённом режиме x86-процессоров обычные программы не могут обслуживать прерывания, эта функция доступна только системному коду (операционной системе).


Так их userspace и не обслужывает, они их вызывает (некоторые, разрешённые).
PM MAIL   Вверх
banderlog17
Дата 12.9.2012, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 7.9.2012

Репутация: нет
Всего: нет



Цитата(tzirechnoy @ 11.9.2012,  14:35)
Цитата
Спешу разочаровать тебя, это эмуляция. К аппаратным ресурсам имеет доступ только ОС. И она сама решает, что разить.


Какая ещё эмуляцыя? Самое что ни на есть классическое ix86 прерывание (программное). И аппаратные ресурсы тут ни при чём, действительно.

А есть ли какой-то внутренний счетчик у CPU, который отслеживал бы количество таких-вот программных
прерываний, вызванных процессом из "user mode"? По-идее, должен быть, так как иначе какой-то зловредный 
процесс может просто повесить CPU постоянным вызовом прерываний. Вобщем нужно мне доки читать по процам, а то я здесь кучу вопросов задаю smile
PM MAIL   Вверх
tzirechnoy
Дата 15.9.2012, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 2
Всего: 16



Цитата
А есть ли какой-то внутренний счетчик у CPU, который отслеживал бы количество таких-вот программных прерываний, вызванных процессом из "user mode"?


Вряд ли.

Цитата
 может просто повесить CPU постоянным вызовом прерываний.


С чего бы? Код обработчика отработал, если было событие таймера -- так оно по-моему прямо в процэссе можэт начать отрабатывать. Если время истекло и нужэн перехват управления -- так оно сразу куда надо вернётся.

PM MAIL   Вверх
banderlog17
Дата 16.10.2012, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 7.9.2012

Репутация: нет
Всего: нет



Цитата(tzirechnoy @ 15.9.2012,  09:01)
Цитата
 
С чего бы? Код обработчика отработал, если было событие таймера -- так оно по-моему прямо в процэссе можэт начать отрабатывать. Если время истекло и нужэн перехват управления -- так оно сразу куда надо вернётся.


Спасибо. А каким образом происходит "отнимание" CPU у пользовательского процесса и "передача" ОСи? Я имею в виду - каким образом ОС проверяет не забрал ли процесс больше отведенного ему времеми? И каким образом код ОС начинает исполнятся вместо кода процесса для выполнения данной проверки? Тоесть есть же какой-то механизм, который просто периодически отдает управление ОС чтоб она проверила приоритеты, временные затраты процесса, итд? Вот вопрос в том как реализован этот механизм?
PM MAIL   Вверх
tzirechnoy
Дата 18.10.2012, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 2
Всего: 16



По прерыванию таймера и происходит. В прерывании таймера увеличиваются счётчики (реального времени, времени работы процэсса), изменяется по-хитрому временный приоритет, и если временный приоритет достаточно понизился -- меняется указатель на текущую задачу, сохраняется текущий и восстанавливается нужный стэк возврата и из прерывания процэссор возвращается ужэ совсем в другое место.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.