2011-09-17 18 views
9

Come fa un computer a disegnare qualcosa sullo schermo al livello più basso (niente su librerie esterne come X11)? Ci sono presunti comandi di assemblaggio che fanno questo? In che modo esattamente la CPU controlla ciò che appare sullo schermo?Come fa un computer a disegnare lo schermo?

+0

La cpu non fa la gpu. –

+1

@Ash: presuppone che ci sia una GPU dedicata. – delnan

+0

http://fgiesen.wordpress.com/category/graphics-pipeline/page/2/ potrebbe essere di interesse. – user786653

risposta

5

In genere è presente un'area di memoria denominata frame buffer nella scheda video. Scrivere un valore significa stabilire il valore del colore di un pixel.

È possibile considerare un frame buffer come un array 2D, in cui ogni bit rappresenta un pixel sullo schermo. Per rappresentare i colori vengono utilizzati diversi livelli di buffer. Oggi un frame buffer comune ha 24 livelli (8 per ciascun componente di colore RGB) e consente la defenizione di 2^24 colori possibili.

Oggigiorno generalmente l'accesso al frame buffer avviene tramite la GPU per problemi di perforazione: anche se è possibile per la CPU eseguire questa operazione, è piuttosto costoso.

8

Fondamentalmente nello stesso modo in cui legge l'hard disk o riproduce un effetto sonoro.

Scrittura di determinati dati su specifici indirizzi di memoria che sono mappati dal controller di memoria sull'hardware esterno in questione (harddrive, GPU o scheda audio in questi casi). Quando l'hardware riceve tali scritture, interpreta i dati scritti come istruzioni su cosa fare.

La CPU è davvero isolata dal resto del sistema. Tutto ciò che sa veramente è il bus di memoria. Può leggere e scrivere dati su quel bus, e questo è fondamentalmente. Alcune di queste letture/scritture vengono salvate in memoria e altre possono essere associate ai registri di controllo di vari componenti hardware o alla memoria del dispositivo, se esiste, consentendo alla CPU di comunicare con altri dispositivi.

Una moderna GPU ha una RAM dedicata, in cui può caricare dati. Quindi la CPU invia istruzioni alla GPU, specificando dove nella memoria principale può trovare i dati usati per generare il contenuto dello schermo e cosa fare con esso. Quindi la GPU carica i dati dalla memoria principale nella propria RAM, dove esegue le trasformazioni e i calcoli necessari, prima di scriverli nel suo frame buffer, da cui il montitor legge costantemente.

+1

+1: provo vergogna per la mia risposta superficiale. – Heisenbug

+0

Perché? È una bella risposta :) – jalf

3

C'è una memoria da qualche parte dedicata allo schermo video. Ogni pixel sullo schermo ha una certa quantità di memoria. Evitando soluzioni storiche come palette e bianco e nero, c'è in genere un certo numero di bit per il rosso, alcuni bit per il blu e altri per il verde. Quando vengono aggiunti quei colori puoi ottenere tutto compreso il bianco (so che non sono i colori primari usati con la vernice per esempio, non ti preoccupare che funzioni). In genere si trova colore a 24 bit perché è facile gestire 8 bit, un byte, rosso, un byte di verde e un byte di blu e memoria di cavi, ecc.

L'hardware video legge costantemente questo memoria e utilizzo di qualsiasi tecnologia per inviare segnali al monitor che essenzialmente indicano la quantità di rosso, verde e blu da illuminare per un particolare pixel, effettuando costantemente la scansione dello schermo con informazioni aggiornate.

Un paio di tecniche comuni per l'utilizzo di questa memoria sono per l'uso di qualcosa chiamato dual ported, in cui due entità sono in grado di leggere/scrivere la memoria. O per avere due ricordi e scambiarli. In entrambi i casi c'è un'altra entità, un processore, o la CPU stessa, o in questi giorni molti piccoli processori grafici nella scheda video/chip. In entrambi i casi, alcuni software vengono eseguiti e questi calcolano la posizione e il colore di tutti i pixel e li scrivono nella memoria video, in base al meccanismo utilizzato dal lato video/monitor della memoria che prende le modifiche quando ha senso.non vuoi avere solo alcuni dei pixel delle lettere che stai digitando per comparire su un passaggio sullo schermo, poi mostrare il resto sul passaggio successivo, potrebbe ottenere uno sfarfallio che l'utente nota.

La memoria video viene in genere mappata come memoria di sistema, il processore probabilmente utilizzerà le stesse istruzioni utilizzate per accedere a non video, sistema, memoria. Sicuramente il gpus potrebbe, ma una cpu normalmente non ha istruzioni specifiche per la periferica, uart, gpio, video, usb, storage, ecc. Le periferiche sono solitamente mappate come certi indirizzi nello spazio di memoria della cpu e vengono utilizzate le normali istruzioni di lettura/scrittura della memoria .

A causa dei tipi specializzati di algoritmi e, più importante, del numero di calcoli necessari per i videogiochi, le schede video utilizzano molti, molti, semplici processori grafici, che potrebbero, ieri, oggi o domani, avere istruzioni specifiche per memoria video per prestazioni o dimensioni o potenza o altri motivi. Ciò che probabilmente non cambierà è il modello di avere memoria framebuffer, una memoria che contiene uno schermo del valore di pixel che l'hardware video utilizza per creare i segnali da inviare al monitor in modo che possa disegnare lo schermo.

+0

Vero per i sistemi attuali che conosco, ma alcuni più vecchi non avevano i buffer del frame di supporto. :-) –

+1

Questo è il motivo per cui ho detto "evitando soluzioni storiche", ho cercato di rimanere sul punto e non entrare nella miriade di modi che non hanno una sorta di frame buffer o anche casi senza frame buffer. Penso che la domanda chiave fosse che ci fossero istruzioni di assemblaggio (raramente), se non poi cosa (la memoria mappava come la maggior parte delle cose). Potrebbe essere una divertente domanda tipo community, quali soluzioni diverse dai frame buffer sono state utilizzate per implementare video/grafica per computer. –

+0

In realtà ho appena eseguito un sistema corrente (in produzione) che non utilizza un buffer di backing frame. La "Hydra" basata sull'elica! –