RINGS
Os níveis
de prioridade
em que os
programas rodam


Priority Master II, programa que controla os níveis de prioridade


por Daniel Jorge Caetano, Team OS/2



> Acho que nada mata o Netscape porque acredito eu ele roda em Ring 1...
> >)-: Aí fica dificil... Mas o mais interessante é notar que o Internet
> >Exploder, no Windows, roda em RING 0!!! Meu, prá botar o browser rodando
> >mais rápido que tudo eles detonam a segurança do sistema... Aliás, já
> >pensou um NT com o Internet Exploder em Ring 0? Bye Bye C2... (-:

> Caro Daniel o que vem a ser Ring 0, Ring 1 e C2?

Desculpem o vocabulário pouco amigável...

(Aos entendidos: não dêem muita atenção ao que vou escrever, porque tô simplificando prá caramba para o pessoal entender mais ou menos como funciona. Aos não entendidos, a coisa não é bem assim, mas assim é bem mais fácil para entender).

O sistema operacional tem vários "rings" que são os níveis de prioridade dos programas. No caso do OS/2 e do Windows NT estes são 4:


Ring0, Ring1, Ring2 e Ring3, cada um deles com 32 níveis de prioridade, menos o 0, que tem 33 (no caso do OS/2. No caso do Win NT são só 32).

No Ring 3, rodam os programas normais, que o sistema operacional pode fechar a vontade. Estes programas podem sofrer Swap. No Ring 2, rodam alguns DLLs de programas e DLLs que podem sofrer Swap. No Ring 2 o sistema ainda pode fechar um programa se der defeito. No Ring1, são executados DLLs que não podem sofrer swap e alguns aplicativos do sistema (se não me engano a WPS roda em Ring1, assim como o Netscape), e estes, além de não poderem sofrer Swap em seus níveis elementares (DLLs), também não podem ser fechados por providencia do Sistema. De alguma forma o sistema tem de dar um comando e o aplicativo tem de se fechar. Existe uma saída, porém, que se chama Brutal Kill, que tem no WatchCat registrado, que permite fechar aplicativos Ring1. No Ring0 rodam SOMENTE drivers e o kernel. No caso do Win NT, o kernel roda em prioridade 32, ou seja, prioridade máxima no nível 0, juntamente com alguns drivers. No OS/2, o kernel roda em prioridade 33 no ring0, e nenhum programa (DRV) pode ter tal prioridade, somente o sistema. Neste nível nada pode ser fechado. São as coisas que não aparecem em lugar nenhum, e que você não tem nem idéia de que estão rodando.

Por esse motivo, o NT seria muito menos estável que o OS/2, mas por que ele não é? Por causa das múltiplas filas de execução... Mas isso dá pano para a manga, e não vou ficar me aprofundando.

Nível C2 é um nível de segurança que o Win NT "supostamente" tem, que o OS/2 não tem, onde uma das características é a isolabilidade do kernel dequalquer outra aplicação. Ora, se um programa como o Internet Exploder rodar em Ring0, ele pode fazer o que quiser, mesmo com o kernel do sistema (aplicativos só podem "lidar" com outros do mesmo ring)... Ou seja, um programa cheio de bugs, como o IE, rodando junto com o kernel do Windows NT... Boa coisa não pode dar.

Agora... Que o IE roda em Ring0 é boato...
--
> Como faço para que um programa DOS rode em um Ring menor no OS/2?

Não dá! Na realidade expliquei muito "por cima". Programas só rodam em Ring3, o que roda em Rings menores são Dl e coisas do tipo. O que você pode é colocar prioridade total de programas para um programa DOS, selecionando em Session Priority (nas definições do DOS) o numero 32 - aliás, isso é altamente desaconselhável, uma vez que é o nível onde o
PMSHELL.EXE roda... Seu PMShell poderá sofrer com algum "avanço" de memória do DOS (apesar de o kernel estar sempre ligado em coisas deste tipo, às vezes escapa...).