Чем режим ARM-системы отличается от режима Arm Supervisor?
Для сравнения режимов процессора ARM с режимами работы x86 (от ring0 до ring 3) пользовательский режим выглядит так же, как ring3, в котором выполняются программы пространства пользователя. Однако я не могу связать ring0 ни с режимом системы, ни с режимом супервизора. В зависимости от источника информации кажется, что оба режима могут очень хорошо выполнять работу ядра в привилегированном режиме. Единственные различия между двумя режимами, которые я смог выяснить, заключаются в следующем:
- регистры 13 и 14 объединены в режиме супервизора, тогда как для системного режима все 15 регистров одинаковы.
- Системный режим не может быть введен непосредственно для исключения, в то время как режим супервизора может.
- Системный режим как-то предотвращает повреждение регистров связи.
Можете ли вы объяснить мне различия между режимами, которые может понять человек из x86 фона?
Кроме того, как тонкие архитектурные различия между режимами, такие как количество регистров в банке, делают один лучше другого?
1 ответ
Я думаю, что ARM ARM делает это довольно ясно (см. Ниже), не думайте, что X86 просто думает о том, что режимы этого процессора позволяют вам делать или не делать. А что вам нужно в операционной системе и какие режимы полезны или нет.
У вас есть пользователь и система, а затем режимы исключения. Их ограничения задокументированы AFAIK. Более новые ARM имеют еще больше функций / ограничений / защит и т.д.
От ARM ARM
Большинство прикладных программ выполняется в режиме пользователя. Когда процессор находится в режиме пользователя, выполняемая программа не может получить доступ к некоторым защищенным системным ресурсам или изменить режим, кроме как из-за возникновения исключения (см. "Исключения" на стр. A2-16). Это позволяет надлежащим образом написанной операционной системе контролировать использование системных ресурсов. Режимы, отличные от режима пользователя, называются привилегированными режимами. Они имеют полный доступ к системным ресурсам и могут свободно менять режим. Пять из них известны как режимы исключения:
-FIQ
-IRQ
-Руководитель
-Abort
-Undefined.
Они вводятся, когда возникают конкретные исключения. Каждый из них имеет несколько дополнительных регистров, чтобы избежать повреждения состояния пользовательского режима при возникновении исключения (подробности см. В разделе "Реестры" на стр. A2-4).
Оставшийся режим - системный режим, в который не входит ни одно исключение, и в нем точно такие же регистры, что и в режиме пользователя. Однако это привилегированный режим и, следовательно, он не подпадает под ограничения режима пользователя. Он предназначен для использования задачами операционной системы, которым необходим доступ к системным ресурсам, но которые хотят избежать использования дополнительных регистров, связанных с режимами исключений. Избегание такого использования гарантирует, что состояние задачи не будет повреждено при возникновении какого-либо исключения.
Режим супервизора - это то, что вы нажимаете, когда делаете вызов svc или sys (та же инструкция, я думаю, они изменили имя с svc). По аналогии с int 21h в дни дней, это, как вы, из пользовательского режима без каких-либо разрешений, попросить операционную систему сделать что-то. Это переключает управление в режим супервизора, затем один раз в режиме супервизора вы можете обрабатывать его там или переключать режимы и т. Д.... Как только вы переключаетесь на пользователя, хотя вы не можете переключиться. Например, если вы хотите настроить пользовательский стек, вы не можете легко сделать это в пользовательском режиме, а затем вернуться к задачам операционной системы. поэтому вам нужен привилегированный режим, который, если ничто другое не имеет доступа к реестру пользователей.