簡體   English   中英

引導加載程序上的線程

[英]Threading on bootloader

在哪里可以找到有關如何在x86體系結構引導加載程序上實現線程的資源/教程...可以說我想在顯示進度欄的同時在后台加載資源。

這是一個非常不尋常的問題...所以請允許我對此發表意見...

  • 引導加載程序實際上是一堆有限的匯編代碼,准確的是464個字節,分區信息為64個字節,魔術標記的最后兩個字節表示引導加載程序的末尾,總共512字節。
  • 引導加載程序(例如Grub)可以通過實現兩階段引導加載程序來解決此限制,第一階段是如上所述的512字節,然后加載第二階段,在其中執行其他選項等。
  • 通常,引導加載程序代碼是16位匯編的,因為原始的BIOS代碼是16位代碼,這就是處理器386向上升級到當今現代處理器的實模式啟動。
  • 使用兩階段引導加載程序,前512字節為16位,然后第二階段將處理器切換為32位模式,為准備工作設置寄存器和門選擇器,然后依次跳轉到實際程序的入口代碼以進行引導up-考慮到必須從磁盤上的特定位置讀取或讀取包含啟動代碼存儲位置數據的配置文件。
  • 由於必須在Assembly中創建某種調度程序(因為您提到了在x86體系結構引導加載程序上實現線程),因此以32位模式來啟動線程是一件很棘手的事情。

您可以通過使用C實現引導加載程序的第二階段部分來解決此問題(但棘手的一點是,由於尚未設置運行時環境,因此將不使用任何標准庫!)

使用Grub可能會更好,甚至可以在此處查看此開源BIOS引導加載程序,如今,BIOS可刷新,因此您可能可以獲得純32位BIOS的EFI( 此處為可擴展固件接口)-這將取決於您的BIOS處理器。 還有這里的另一個網站可能提供進一步的信息在這里

不幸的是,啟動時的進度條是用C / C ++編寫的(已經,在32位環境中,環境設置,任務調度程序設置,線程包括,虛擬內存管理器已加載等)-這是內核級別,在啟動過程完成之后),這是一個已創建線程的過程,該過程在后台運行,說明使用進度條作為一種告訴用戶“等待,系統正在加載”的方式來進行硬件檢測/進一步的環境設置等

這本書可能會對您有所幫助-它描述了Linux內核的各個方面-包括初始化。 您可能想看看GRUB跨UNIX風格的相當標准。

我提到的書應該是您選擇的資源,內核直到初始化周期的后期才考慮其金屬線程功能,這意味着建立用於線程的數據結構是有據可查的。

盡管我似乎沒有想到在引導加載程序中允許使用線程結構的任何真正好處-首先,使用單線程過程代碼更容易設置基本硬件,其次,您期望代碼是防彈的,因此線程作為不需要防御機制。

因此,我希望您正在考慮模擬進度條:D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM