Съвременни процесори Intel IA-32 в компютър
5.3. Нива на привилегии
Привилегиите са свойство (обикновено зададено по време на проектирането на системата), което определя кои компютърни операции са разрешени по всяко време и кои достъпи до паметта са законни. Привилегиите се използват за осигуряване на сигурност в компютърна система.
Сигурността на ниво сегмент е представена от четири нива на привилегии. Ниво на привилегии - едно от четирите нива на микропроцесорни привилегии. Правата се изпълняват чрез присвояване на стойност между 0 и 3 на ключови обекти, които се разпознават от процесора. 0 е най-привилегированата, докато 3 е най-малката.

Четирите нива на привилегия могат да се тълкуват като защитни пръстени. Център - ниво 0 - е за сегментите, съдържащи най-критичните програми (обикновено ядрото на операционната система). Външните пръстени са за сегменти с по-малко критични програми или данни. Не е необходимо да се използват и четирите нива на привилегия. Съществуващите системи, проектирани с по-малко нива, могат просто да игнорират други приемливи нива. Например UNIX и Windows използват само две нива на привилегии - 0 (за системното ядро) и 3 (за всичко останало), докато OS/2 използва нива 0 (за системното ядро), 2 (за I/O процедури) и 3 (за приложни програми).
Механизмът за управление на нивото на привилегиите на микропроцесора работи със следните стойности:
CPL - Текущо ниво на привилегии: нивото на привилегиите, на което задачата се изпълнява в момента. Стойността на CPL се съхранява в полето RPL на селектора на кодов сегмент, което се поставя в регистъра CS. Обикновено тази стойност съответства на нивото на привилегията на дескриптора на изпълним кодов сегмент. Нивото на привилегиите се променя, когато контролът се прехвърля към кодов сегмент с различна DPL стойност (с изключение на подчинените кодови сегменти).
DPL - Ниво на привилегия на дескриптора: Най-малко привилегированото ниво, на което задача може да осъществи достъп до сегмента или шлюза, свързани с тази манипулация. DPL се дефинира от битове 46 и 45 от дескриптора.
RPL - Заявено ниво на привилегия използва се за временно понижаване на нивото на привилегиите при достъп до паметта. RPL се задава в най-малко значимите битове на селектора.
Механизмът за контрол на нивото на привилегиите обикновено сравнява нивото на привилегиите на дескриптора (DPL) с максимума от двете числа, CPL и RPL. Разглежда се най-малко привилегированото от текущото и поисканото ниво на привилегии ефективно ниво на привилегии: EPL = макс. (CPL, RPL).
Контролиране на привилегии за достъп до данни
Правата се контролират, когато селекторът се зарежда в сегментния регистър DS, ES, FS, GS (или при достъп до паметта, ако селекторът се съдържа в кода на инструкциите). Програмата може да осъществи достъп до сегмент от данни, който е на същото или по-ниско ниво на привилегии (като се вземе предвид RPL), т.е. достъп до данни е разрешен, ако макс. (CPL, RPL)
в противен случай се генерира общо нарушение на защитата.
Контрол на привилегиите за достъп на стека
Контролът на привилегиите се извършва, когато селекторът се зареди в SS регистъра. Програмата трябва да използва сегмент от стека, който е на същото ниво на привилегии, т.е. CPL = RPL = DPL.
Контрол на привилегиите при прехвърляне на контрол
Прехвърлянето на контрол към друг сегмент от код може да се случи:
- при извършване на интерсегментен скок (FAR JMP);
- при извършване на междусегментно обаждане (FAR CALL) и връщане от него (RET);
- при извикване на прекъсване (INT n), обработка на изключение и връщане от него (IRET) (тези проблеми са обсъдени в глава "Прекъсвания и изключения");
- при изпълнение на специални инструкции SYSENTER и SYSEXIT, предназначени за бързо извикване на системни процедури (тези команди са налични в процесори Pentium II и по-нови версии, не се разглеждат тук).