![]() |
|
Модераторы: powerfox, ZeeLax |
![]()
|
|
| banderlog17 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 7.9.2012 Репутация: нет Всего: нет |
Здравствуйте.
Насколько я знаю, переключение процессора в режим "ring 0" происходит при получении прерывания. Далее процессор переключается в упомянутый режим и запускает установленный операционной системой обработчик полученного прерывания. А как происходит переключение в этот режим для проверки "не слишком ли долго работает текущий процесс"? Ведь такую проверку можно произвести только из "ring 0" так как "ring 3" не может иметь доступ к информации о приоритетах процессов, верно? Вопрос такой. В процессорах аппаратно зашита функция переключения в "ring 0" после определенного времени, количества операций, или как? Спасибо. |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 4 Всего: 14 |
Какого еще прерывания????
-------------------- |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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 практически не встречается. |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 2 Всего: 32 |
Всё, что тебе нужно написано в /proc/[pid]/stat (man proc). Не нужно выдумывать велосипедов. Прерывания тебе никто не даст райзить из пользовательского режима.
-------------------- ![]() |
|||
|
||||
| banderlog17 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 7.9.2012 Репутация: нет Всего: нет |
Большое спасибо. Почитаю и про другие варианты. Мне это не то чтобы нужно в каком-то реальном проекте - просто я начал изучать архитектуру ОС и задался этим вопросом. Добавлено через 59 секунд
Спасибо. Но я пока и райзить ничего не собирался вроде-как |
||||
|
|||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
Лол, один из самых старых методов вызова сисколла -- int 0x80. |
|||
|
||||
| Cheloveck |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 2 Всего: 32 |
Спешу разочаровать тебя, это эмуляция. К аппаратным ресурсам имеет доступ только ОС. И она сама решает, что разить.
http://ru.wikipedia.org/wiki/%D0%9F%D1%80%....BD.D0.B8.D0.B5 -------------------- ![]() |
||||
|
|||||
| tzirechnoy |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
Какая ещё эмуляцыя? Самое что ни на есть классическое ix86 прерывание (программное). И аппаратные ресурсы тут ни при чём, действительно.
Так их userspace и не обслужывает, они их вызывает (некоторые, разрешённые). |
||||
|
|||||
| banderlog17 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 7.9.2012 Репутация: нет Всего: нет |
А есть ли какой-то внутренний счетчик у CPU, который отслеживал бы количество таких-вот программных прерываний, вызванных процессом из "user mode"? По-идее, должен быть, так как иначе какой-то зловредный процесс может просто повесить CPU постоянным вызовом прерываний. Вобщем нужно мне доки читать по процам, а то я здесь кучу вопросов задаю |
||||
|
|||||
| tzirechnoy |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
Вряд ли.
С чего бы? Код обработчика отработал, если было событие таймера -- так оно по-моему прямо в процэссе можэт начать отрабатывать. Если время истекло и нужэн перехват управления -- так оно сразу куда надо вернётся. |
||||
|
|||||
| banderlog17 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 7.9.2012 Репутация: нет Всего: нет |
Спасибо. А каким образом происходит "отнимание" CPU у пользовательского процесса и "передача" ОСи? Я имею в виду - каким образом ОС проверяет не забрал ли процесс больше отведенного ему времеми? И каким образом код ОС начинает исполнятся вместо кода процесса для выполнения данной проверки? Тоесть есть же какой-то механизм, который просто периодически отдает управление ОС чтоб она проверила приоритеты, временные затраты процесса, итд? Вот вопрос в том как реализован этот механизм? |
||||
|
|||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
По прерыванию таймера и происходит. В прерывании таймера увеличиваются счётчики (реального времени, времени работы процэсса), изменяется по-хитрому временный приоритет, и если временный приоритет достаточно понизился -- меняется указатель на текущую задачу, сохраняется текущий и восстанавливается нужный стэк возврата и из прерывания процэссор возвращается ужэ совсем в другое место.
|
|||
|
||||
![]()
|
| Правила форума "Linux/UNIX: Oбщие вопросы" | |
|
|
В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу). В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим. Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |