Como as chamadas ruins do OpenGL podem causar falhas no sistema?

0

Estou desenvolvendo o jogo OpenGL e copiei parte do código com código de função semelhante que foi parcialmente modificado para sua nova função, mas ainda havia alguns bugs. Este código estava chamando funções de renderização OpenGL com dados errados, parâmetros.

Depois de chamar funções OpenGL com dados / argumentos errados, o sistema inteiro congela e eu nem consigo mudar para o console Ctrl Alt F1 .

Isso me decepciona, porque o Linux deve ser um software / SO estável. Então, por que o sistema OpenGL pode travar todo o sistema?

    
por kravemir 27.10.2012 / 10:49

2 respostas

2

Dado o nautre "monolítico" do kernel Linux, um erro no código que é executado no nível de privilégio mais alto da CPU, geralmente intitulado "modo de kernel", pode travar todo o sistema.

Existem três motivos para isso:

  • Esse código pode acessar diretamente o espaço de memória de qualquer outro código. Portanto, é possível que tal código corrompa o próprio kernel, executando drivers, etc.
  • Esse código pode acessar diretamente os dispositivos de E / S. É bem possível configurar incorretamente ou configurar os bits errados em momentos incorretos nos dispositivos de E / S, de modo que o sistema inteiro fique bloqueado. Os drivers de dispositivo sem bugs não permitem que o código do usuário faça qualquer coisa no hardware que possa causar um sistema instável, mas os drivers com bugs, beta ou mal escritos (ou errados) também podem.
  • O código que encontra um problema ou uma exceção que ele não pode manipular não tem um nível mais alto para "lançar". Então, uma exceção de kernel irá travar o sistema.

Então eu não sei até que ponto o OpenGL funciona no kernel ou com o driver gráfico, mas espero que isso ajude.

    
por 27.10.2012 / 16:27
0

Ambientes modernos de interface do usuário (Windows, OSX, Linux, celular, etc.) dependem muito do pipeline gráfico para desempenho.

Os sistemas têm um pipeline de gráficos **. Todos os programas gráficos (desktop, navegador, jogos, etc) são segmentos separados que devem compartilhar este contexto gráfico único.

Isso cria as condições necessárias para problemas de multithread. Os tópicos podem ter deadlock, livelocked, corridos, etc.

É provável que seu encadeamento não esteja "tocando bem" com o encadeamento de gráficos da área de trabalho e esteja bloqueando. Provavelmente aguardando um recurso que não está mais disponível (você está liberando todos os recursos corretamente?)

O OpenGL é desenvolvido de forma muito agressiva e leva o hardware ao limite. Você pode achar que o bug não ocorre em outro hardware.

Se, no entanto, todo o seu sistema for desligado, é provável que o chipset real do pipeline esteja superaquecido e / ou sobrecarregado. A maioria dos equipamentos possui sensores que cortam a energia caso ocorram picos de carga prejudiciais. Os fabricantes testam o hardware e definem os cortes de acordo.

** Pipelines de gráficos individuais estão sendo substituídas por vários pipelines (que podem 'possuir' regiões menores separadas da tela). Isto é o que é o Vulkan do OpenGL, e requer chipsets de GPU especiais.

    
por 28.07.2017 / 23:52