電腦如何知道如何在螢幕上顯示文字和 GUI?

電腦如何知道如何在螢幕上顯示文字和 GUI?

這可能是一個愚蠢而奇怪的問題,但在找到答案之前我真的無法入睡。電腦如何知道如何在螢幕上顯示文字和 GUI?如果沒記錯的話,x86 計算機的啟動過程如下:

  • BIOS 啟動 CPU 和其餘硬體並檢查一切是否正常運作
  • CPU執行第512段的程式碼?引導分區的位元組並且螢幕顯示引導程式選單
  • 執行所選內核
  • ETC。

我的問題是:如果核心啟動之前沒有作業系統,電腦如何知道如何在螢幕上顯示文字? BIOS 和開機載入程式可以顯示一些文字和基本的 GUI。他們如何做到這一點? BIOS/開機載入程式是否告訴CPU(GPU?)它必須在位置(0,0)上顯示藍色像素,然後在(1,0)等上顯示白色像素?

我的第二個理論是 BIOS 有一個基本的顯示器驅動程序,該驅動程式具有某種可以在螢幕上列印的 API。顯示器驅動程式是否提供某種 print() 函數?

據我所知,列印文字的彙編函數特定於每個作業系統,因此它不能直接透過 CPU 指令集使用。

我的問題的第二部分是,KDE 或 GNOME 等桌面環境如何運作?假設我想為 Linux 建立一個全新的桌面環境。我從哪裡說起呢? C/C++ 或任何其他高階語言中沒有函數可以顯示n 顏色位置 (x,y) 上的像素。顯示桌面的程式是用什麼語言寫的?它會逐像素創建桌面嗎? GTK 或 Qt 等函式庫如何運作?我知道我可以顯示一個只有幾個功能的窗口,但是這些功能是如何運作的呢?

抱歉,如果我的問題不清楚。英語不是我的母語。

答案1

基本上,主機板上有一個 ROM(唯讀記憶體)晶片,告訴它如何顯示它需要的任何 GUI。您認為它沒有軟體,但它確實是,它是由製造商預先安裝的。實際上,您更有可能將其稱為“韌體”,因為它是硬連接到晶片的軟體。

至於圖形桌面環境,它們確實沒有什麼特別的。它們以與其他程式相同的方式繪製到螢幕上。要在螢幕上繪圖,您真正需要做的就是知道負責處理圖形的晶片(通常是 GPU 或 IGPU/APU)的位址。當普通程式執行此操作時,我相信它們會從作業系統請求此訊息,因此,如果您要編寫自己的圖形桌面環境,則必須弄清楚將資料傳送到哪個位址。您需要的地址應該由您擁有的任何 G/IG/APU 的驅動程式提供。

答案2

分為兩個主要部分:

  1. 載入 MBR 後,其程式碼會載入第二階段的開機程式碼,稱為 Windows 開機管理員或 Linux 上的 GRUB。此引導管理器/載入程式具有以程式碼實現的文字和圖形功能,或使用直接 BIOS 存取進行文字輸出。

  2. 使用任何程式語言(如 C、C++、Java、Basic)載入作業系統(Windows、Linux 等)後,您可以存取核心和/或程式庫中實現的功能,這些功能允許在螢幕上書寫或繪圖。如今,每種程式語言都有一些 IDE(整合開發環境),這大大簡化了使用者程式碼的編寫。

相關內容