
Я прочитал операционную систему Multics. В слове дескриптора сегмента (книга) есть одна часть для числа шлюзов для сегмента. Что означает шлюз? Я знаю, что процесс может войти в кольцо с более высокими привилегиями, если шлюзы позволяют (используйте один из допустимых шлюзов сегмента в качестве точки входа), но я не знаю правильно, что означает шлюз?
Спасибо.
решение1
Шлюз — это просто специально объявленная точка входа (в современном языке точка входа называется подпрограммой, функцией или процедурой). Компилятор или ассемблер сгенерирует дополнительную информацию для точек входа, которые являются шлюзами. Точка входа шлюза может быть вызвана кодом, который работает в менее привилегированном кольце, чем шлюз. Точки входа, не являющиеся шлюзом, не могут быть вызваны из кода, работающего в кольцах с более высокими номерами (менее привилегированными).
Подробнее см. раздел 8 руководства AL-39 и описание инструкции call6. Вот фрагмент:
Шлюзы — это процедуры, находящиеся в заданном кольце и предназначенные для предоставления контролируемого доступа к кольцу. Программа, находящаяся в кольце R, может войти во внутреннее кольцо r, только вызвав одну из процедур шлюза, связанных с этим внутренним кольцом r. Шлюзы должны быть тщательно закодированы и не должны доверять никаким данным, которые были изготовлены или изменены вызывающим в менее привилегированном кольце. В частности, шлюзы должны проверять все аргументы, переданные им вызывающим, чтобы не поставить под угрозу защиту любого сегмента, находящегося во внутреннем кольце.
решение2
К вашему сведению, очень похожий механизм шлюза вызовов для перехода по кольцу, который использовался в Multics, также доступен во всех системах Intel x86, поддерживающих «защищенный режим», начиная с 80286.