Средства вызова подпрограмм и задач

Слайд 2

Первый способ состоит в непосредственном указании в поле команды JMP или CALL

Первый способ состоит в непосредственном указании в поле команды JMP или CALL
селектора сегмента, содержащего код вызываемой подпрограммы, а также смещение в этом сегменте адреса начала подпрограммы

Непосредственный вызов подпрограммы

Слайд 3

Разрешение вызова происходит в зависимости от значения поля C в дескрипторе сегмента

Разрешение вызова происходит в зависимости от значения поля C в дескрипторе сегмента
вызываемого кода. При C=0 вызываемый сегмент не считается подчиненным, и вызов разрешается, только если уровень прав вызывающего кода не меньше уровня прав вызываемого сегмента. При C=1 вызываемый сегмент считается подчиненным и допускает вызов из кода с любым уровнем прав доступа, но при выполнении подпрограмма наделяется уровнем прав вызвавшего кода.

Формат дескриптора шлюза вызова подпрограммы

Слайд 4

Вызов подпрограммы через шлюз вызова

Вызов подпрограммы через шлюз вызова

Слайд 5

Если вызывается подпрограмма, имеющая другой уровень привилегий, то из текущего стека в

Если вызывается подпрограмма, имеющая другой уровень привилегий, то из текущего стека в
стек уровня доступа вызываемого сегмента копируется столько 32-разрядных слов, сколько указано в поле счетчика слов дескриптора шлюза.
Очевидно, что первый способ непригоден для вызова функций операционной системы, имеющей обычно нулевой уровень прав, из пользовательской программы, работающей, как правило, на третьем уровне. Поэтому процессор i386 предоставляет способ вызова подпрограмм, основанный на том, что заранее определяется набор точек входа в привилегированные кодовые сегменты, и эти точки входа описываются с помощью специальных дескрипторов - дескрипторов шлюзов вызова подпрограмм. Этот дескриптор принадлежит к системным дескрипторам, и его структура отличается от структуры дескрипторов сегментов кода и данных . При вызове кодов, обладающих различны-ми уровнями привилегий, возникает проблема передачи параметров между различными стеками, так как для надежной защиты задачи различного уровня привилегий имеют различные сегменты стеков. Селекторы этих сегментов хранятся в контексте задачи - сегменте TSS (Task State Segment).

Слайд 6

Как и в случае вызова подпрограмм, имеется две возможности вызова задачи -

Как и в случае вызова подпрограмм, имеется две возможности вызова задачи -
непосредственный вызов через указание селектора сегмента TSS нужной задачи в поле команды CALL и косвенный вызов через шлюз вызова задачи. Как и при вызове подпрограмм, непосредственный вызов возможен только в случае, если вызывающий код обладает уровнем привилегий, не меньшим, чем вызываемая задача. При вызове через шлюз (который может располагаться и в таблице LDT) достаточно иметь права доступа к шлюзу.
Имя файла: Средства-вызова-подпрограмм-и-задач-.pptx
Количество просмотров: 101
Количество скачиваний: 0