2009-07-15 63 views
2

如何以編程方式導致操作系統關閉,離開並停止做任何事情,以便程序可以完全控制PC系統?暫時掛起PC操作系統

我很想從MS Windows和Linux環境中做到這一點。考慮任何語言或API。

我希望操作系統停止搶佔我的程序,停止其虛擬內存管理,停止其設備驅動程序和中斷運行的服務例程,基本上就會消失。然後,當我的程序在裸機上有了邪惡的方式時,我希望操作系統在不重啓的情況下再次回來。

這甚至可能嗎?

+0

你爲什麼要這樣做?我能想到的唯一原因就是混淆你不應該混淆的東西(Flash BIOS等)。 – Powerlord 2009-07-15 16:24:25

+0

我接受用例很小。我的興趣主要是表現。這種東西在過去的8和16位時代曾經是例行公事,我認爲它作爲一種智力活動具有價值。我想也許操作系統供應商已經對芯片供應商施加了足夠的壓力,增加操作系統支持硬件,這將使這種不可能,但人類的聰明才智會找到一些偷偷摸摸的方法繞過禁令。這裏有些有趣的答案。 – 2009-07-15 16:35:30

+0

你必須非常小心,不要在操作系統回來時導致任何問題。任何原因你不能重新啓動到一個自定義的操作系統,並重新啓動到原來的?對於你幾乎從未做過的事情,性能似乎是一個奇怪的原因。 – 2009-07-15 17:09:35

回答

0

不是這樣的,沒有。

你想要的基本上是一個成爲OS的應用程序;一個嚴重剝離的Linux內核以及一些高度定製和最小化的工具可能會成爲實現這一目標的途徑。

+0

不是不可能的;它已完成,作爲冬眠的一個變種。看我的帖子。 :) – bdonlan 2009-07-15 15:58:19

14

使用Linux,您可以使用kexec jump將控件完全轉移到另一個內核(即您的程序)。當然,強大的處理能力帶來了巨大的責任 - 完全取決於您維護中斷,避免破壞舊內核的內存。你最終不得不編寫自己的操作系統內核來做到這一點。此外,控制轉移需要相當長的一段時間,因爲內核必須對所有硬件取消初始化,然後在恢復時重新初始化。由於kexec跳轉最初是爲休眠支持而設計的,因此在原始環境中這不是問題,但根據您在做什麼,這可能是一個問題。

您可能需要考慮在OS提供給您的框架內工作 - 只需爲您正在做的任何事情編寫一個正常的驅動程序。

最後,還有一個選項是使用linux Real-Time patchset。這使您可以將靜態優先級分配給所有內容,甚至中斷處理程序;通過運行一個比任何其他優先級都高的進程,你可以暫停/接近/一切 - 系統仍然會爲中斷服務一個小存根,以及某些不能延遲的中斷,比如定時中斷,但是對於最部分重型工作將推遲到您放棄對CPU的控制。

請注意,RT補丁集不會停止虛擬內存等 - mlockall將防止有效頁面上的頁面錯誤,但如果這對您已足夠。

另外,請記住,無論您做什麼,系統BIOS仍可能導致SMM traps,除了主板型號特定的方法外,系統BIOS無法禁用。

1

不是。操作系統是一個基礎,你的程序在其上運行。當您的應用程序發出請求時,操作系統會處理內存訪問,磁盤寫入操作,通信等,並要求操作系統移出該路,這意味着您的程序將不得不執行操作系統的工作。

-2

對,你可以完全做到這一點,你也可以寫一個程序,告訴我的銀行給你我所有的錢,並給你一個熱門的俄羅斯。

2

有很多非常醜陋的方法來做到這一點。您可以通過將一些蹦牀代碼寫入/ dev/kmem來修改正在運行的內核,從而將控制權交給您的應用程序。但我不會推薦嘗試這樣的事情!

基本上,您需要讓您的應用程序充當自己的操作系統。如果你想從一個文件中讀取數據,你必須找出數據在磁盤上的位置,並生成自己的SCSI請求與磁盤驅動器進行通信。數據準備就緒後,您必須實現自己的中斷處理程序才能收到通知。同樣,你將不得不處理缺頁,內存分配等多數用戶覺得這是不值得...

你爲什麼要這麼做?

是否有東西,你的應用程序需要做的是,OS不會讓它做什麼?你關心操作系統對性能的影響嗎?還有別的嗎?

0

如果你是狡猾的,並希望避免操作系統看家很多你可能會鉤住自己變成一個驅動程序例程。大聲思考,接近黑客行爲。谷歌如何編寫根套件。

2

如果你不介意炮擊了一些現金,你可以使用IntervalZero's RTX爲Windows系統做到這一點。這是一個硬實時子系統,它被安裝在Windows機器上,作爲對HAL的攻擊並接管機器,讓Windows有剩餘的CPU週期。

它有自己的調度程序和設備驅動程序,但如果你在頂部RTX優先級運行您的程序,不用安裝任何RTX設備驅動程序(或禁止中斷的時間),然後什麼將中斷它。

它還支持與Windows端程序的少量交互。

我們把它作爲一個很好的方式來獲得對運行Windows的硬實時框。

2

coLinux加載CoLinuxDriver進入NT內核或colinux.ko進入Linux內核。它正是你所要求的–它「調度」主機操作系統,並運行它自己的代碼,以及它自己的內存管理,中斷等等。然後,當它完成時,它「重新安排」主機操作系統,允許它從它離開的地方。 coLinux使用它來運行與主機OS平行的修改過的Linux內核。

不同於更常見的虛擬化的技術,有coLinux的和裸金屬硬件在所有之間沒有障礙。但是,如果coLinux客戶端在返回主機操作系統之前未進行任何恢復操作,則硬件和主機操作系統往往會感到困惑。