1. 程式人生 > >用一個創業故事串起作業系統原理(一)

用一個創業故事串起作業系統原理(一)

第一回:小馬創業選園區,開放標準是第一

小馬最終還是決定走出大公司,自己去創業了。

 

他之所以這樣決定,有兩個原因,一方面,大企業多年的工作經驗讓他練就了從前端到後端,從Web到App,從產品設計到測試交付的全棧能力。他很自信,靠著這些能力,闖蕩江湖應該沒什麼問題;另外一方面,他聽說,姓“馬“的,創業成功的概率好像比較大。

 

創業首先要註冊公司。註冊公司就需要有一個辦公地點。所以,小馬需要選擇一個適合創業的環境。他找了很多地方,發現有的地方政策傾斜大型企業,有的地方傾斜本地企業,有的地方鼓勵金融創新。小馬感覺這些地方都不太適合他這個IT男。

 

直到有一天,小馬來到了位於杭州濱江的x86創業園區。他被深深地吸引住了,當然首要吸引他的就是園區工作人員的熱情。

 

 

園區的工作人員向小馬介紹了以下資訊。

 

“首先,咱們這個x86園區,主要有三大特點,一是標準,二是開放,三是相容。像您這種創業者還是非常多的。初次創業不一定有經驗,園區提供標準的企業執行流程輔導。“

 

“另外,我們園區秉承完全開放的態度,對待各種各樣的企業。不封閉,不保守。只要您符合國家的法律法規,我們都接納。而且,整個園區是一種開放合作的生態,也有利於不同企業之間的協作。“

 

“再就是相容。我們園區的流程和規則的設計都會相容歷史上的既有政策,既不會朝令夕改,也不會因為變化而影響您公司的運轉。總而言之,來了咱們園區,您就埋頭幹業務就可以啦!“

 

小馬顯然對於x86園區的開放性十分滿意,於是追問道:“您剛才說的企業執行流程輔導,能詳細介紹一下嗎?將來我這個企業在這個園區,應該怎麼個運轉法兒?“

 

工作人員接著說:“咱們這個園區毗鄰全國知名高校,每年都有大量的優秀畢業生來園區找工作,這是企業非常重要的人才來源。葛優說了,二十一世紀了,人才是核心嘛。每年我們園區都會招聘大量的畢業生,先進行一個月的培訓,合格畢業的可以推薦給您這種企業。這些人才啊,就是咱們企業的CPU。“

 

 

“經過我們園區培訓過的‘CPU人才‘,具備了三種老闆們喜歡的核心競爭力:

 

第一,實幹能力強,幹活快,我們稱為運算才能——也即指令執行能力;

 

第二,記憶力好,記得又快又準,我們稱為資料才能——也即資料寄存能力;

 

第三,聽話,自控能力強,可以多工併發執行,我們稱為控制才能——也即指令寄存能力。

 

到時候,你可以根據需求,看僱傭多少個‘CPU人才‘。

 

另外,人才得有個辦公的地方,這一片呢,就是我們的辦公區域,稱為也就是記憶體區域。您可以包幾個工位,或者包一片區域,或者幾個會議室,讓您公司的人才在裡面做專案就可以了。這裡面有的是地方,同時執行多少各專案都行。“

 

 

跟著工作人員的介紹,小馬走在x86園區中,看著這一片片的記憶體辦公區,腦子裡已經浮現出將來熱火朝天的辦公場景了。

 

 

“也許不到半年的時間,我肯定能夠接兩三個大專案,招聘十個八個CPU員工。那專案A的員工就坐在這片記憶體辦公區,專案B的員工就坐在那片記憶體辦公區。我根據積累的人脈,將接到的專案寫成一個一個的專案執行計劃書,裡面是一行行專案執行的指令,這些指令操作資料產生一些結果,我們就可以叫程式啦。”小馬這麼想著。

 

“然後呢,我把不同的專案執行計劃書,交給不同的專案組去執行。那專案組就叫程序吧!兩個專案組,程序A和B,會有獨立的記憶體辦公空間,互相隔離,程式會分別載入到程序A和程序B的記憶體辦公空間裡面,形成各自的程式碼段。要操作的資料和產生的結果,就放在資料段裡面。“

 

“除此之外,我應該找一個或者多個CPU員工來執行專案執行計劃書,我只要告訴他下一條指令在記憶體辦公區中的地址,經過訓練的CPU員工就會很自覺地、不停地將程式碼段的指令拿進來進行處理。“

 

“指令一般是分兩部分,一部分表示做什麼操作,例如是加法還是位移;另一部分是操作哪些資料。資料的部分,CPU員工會從資料段裡面讀取出來,記在腦子裡,然後進行處理,處理完畢的結果,在寫回資料段。當專案執行計劃書裡面的所有指令都執行完畢之後,專案也就完成了,那就可以等著收錢啦。”

 

小馬沉浸在思緒中久久不能自拔,直到工作人員打斷了他的思緒:“您覺得園區如何?要不要入住呀?先租幾個工位,招聘幾個人呢?“

 

小馬想了想,說道:“園區我很滿意,以後就在您這裡創業了,創業開始,我先不招人,自己先幹吧。“

 

第二回:啟動公司有手冊,獲取核心當寶典

 

工作人員說:“感謝您入駐咱們創業園區,由於您是初次創業,這裡有一本《創業指導手冊》,在這一本叫作BIOS的小冊子上,有您啟動一家公司的通用流程,你只要按照裡面做就可以了。“

 

 

小馬接過BIOS小冊子,開始按照裡面的指令啟動公司了。

 

創業初期,小馬的辦公室肯定很小,只有有1M的記憶體辦公空間。在1M空間最上面的0xF0000到0xFFFFF這64K對映給ROM,通過讀這部分地址,可以訪問這個BIOS小冊子裡面的指令。

 

創業指導手冊第一條,BIOS要檢查一些系統的硬體是不是都好著呢。創業指導手冊第二條,要有個辦事大廳,只不過小馬自己就是辦事員。因為一旦開張營業,就會有人來找到這家公司,因而基本的中斷向量表和中斷服務程式還是需要的,至少要能夠使用鍵盤和滑鼠。

 

BIOS這個手冊空間有限,只能幫小馬把公司建立起來,公司如何運轉和經營,就需要另外一個東西——《企業經營寶典》,因而BIOS還要做的一件事情,就是幫助小馬找到這個寶典,然後讓小馬以後根據這個寶典裡面的方法來經營公司,這個《企業經營寶典》就是這家公司的核心。

 

 

 運營一個企業非常的複雜,因而這本《企業經營寶典》也很厚,BIOS手冊無法直接加載出來,而需要從門衛開始問起,不斷打聽這本核心的位置,然後才能載入他。

 

門衛只有巴掌大的一塊地方,在啟動盤的第一個扇區,512K的大小,我們通常稱為MBR(Master Boot Record,主引導記錄/扇區)。這裡儲存了boot.img,BIOS手冊會將他載入到記憶體中的0x7c00來執行。

 

boot.img做不了太多的事情。他能做的最重要的一個事情,就是載入grub2的另一個映象core.img。

 

引導扇區就是小馬找到的門衛,雖然他看著檔案庫的大門,但是知道的事情很少。他不知道寶典在哪裡,但是,他知道應該問誰。門衛說,檔案庫入口處有個管理處,然後把小馬領到門口。

 

core.img就是管理處,他們知道的和能做的事情就多了一些。core.img由lzma_decompress.img、diskboot.img、kernel.img和一系列的模組組成,功能比較豐富,能做很多事情。

 

boot.img將控制權交給diskboot.img後,diskboot.img的任務就是將core.img的其他部分載入進來,先是解壓縮程式lzma_decompress.img,再往下是kernel.img,最後是各個模組module對應的映像。

 

管理處聽說小馬要找寶典,知道他將來是要做老闆的人。管理處就告訴小馬,既然是老闆,早晚都要僱人幹活的。這不是個體戶小打小鬧,所以,你需要切換到老闆角色,進入保護模式,把哪些是你的許可權,哪些是你可以授權給別人的,都分得清清楚楚。

 

 

這些,小馬都銘記在心,此時此刻,雖然公司還是隻有他一個人,但是小馬的眼界放寬了,能夠管理的記憶體空間大多了,也開始區分哪些是使用者態,哪些是核心態了。

 

接下來,kernel.img裡面的grub_main會給小馬展示一個《企業經營寶典》的列表,也即作業系統的列表,讓小馬進行選擇。經營企業的方式也有很多種,到底是人性化的,還是強紀律的,這個時候你要做一個選擇。

 

 

在這裡,小馬毫不猶豫地選擇了《狼性文化》作業系統,至此grub才開始啟動《狼性文化》作業系統核心。

 

拿到了寶典的小馬,開始越來越像一個老闆了。他要開始以老闆的思維,來建立這家公司。

 

第三回:初創公司有章法,請來兄弟做臂膀

 

這注定是一個不眠夜,辦公室裡面一片漆黑中,唯一亮著的檯燈下,小馬獨自捧著《企業經營寶典》仔細研讀,讀著讀著,小馬若有所思,開始書寫公司核心的初始化計劃。

 

 

 

 公司首先應該有個專案管理部門,咱們將來肯定要接各種各樣的專案,因此,專案管理體系和專案管理流程首先要建立起來。雖然現在還沒有專案,但是小馬還是弄了一個專案模板init_task。這是公司的第一個專案(程序),是專案管理系統裡面的專案列表中的第一個,我們能稱為0號程序。這個專案是虛擬的,不對應一個真實的專案(也就是程序)。

 

專案需要專案管理進行排程,還需要制定一些排程策略。

 

另外,為了快速響應客戶需求,為了各個專案組能夠方便地使用公司的公共資源,還應該有一個辦事大廳。這裡面可以設定了很多中斷門(Interrupt Gate),用於處理各種中斷,以便快速響應突發事件;還可以提供系統呼叫,為專案組服務。

 

如果專案接得多了,為了提高研發效率,對專案內容進行保密,就需要封閉開發,所以將來會有很多的會議室,因而還需要一個會議室管理系統。

 

專案的執行肯定會留下很多文件,這些是公司的積累,將來的核心競爭力,一定要好好管理,因而應該建立一個專案檔案庫,也即檔案系統。

 

隨著思緒的展開,小馬奮筆疾書,已經寫了滿滿的幾頁紙,小馬頓感經營一個公司還是挺複雜的,一旦專案接多了肯定忙不過來。俗話說得好,“一個好漢三個幫“,小馬準備找兩個兄弟來一起創業。

 

 小馬想到的第一個人,是自己的大學室友,外號“周瑜“。大學一畢業,周瑜就轉專案管理了,在一家大公司管理著大型專案。將來外部接了專案,可以讓他來管。小馬想到的第二個人,是自己上一家公司的同事,外號“張昭“,是他們總經理的好幫手,公司的流程、人事、財務打理得都輕輕楚楚,將來公司內部要執行的井井有條,也需要這樣一個人。

 

 

第二天,小馬請周瑜和張昭吃飯,邀請他們加入他的創業公司。小馬說,公司要正規運轉起來,應該分清內外,外部專案需要有人幫忙管理好——也就是使用者態,內部公司的核心資源也需要管理好——也就是核心態。現在我一個人忙不過來,需要兩位兄弟的加入,周瑜主外,張昭主內,正所謂,內事不決問張昭,外事不決問周郎嘛。

 

三個人相談甚歡,談及往日友誼、未來前景、上市敲鐘……

 

 

第三天,周瑜早早就來到公司,開始了他的事業。小馬拜託周瑜做的第一件事情是呼叫kernel_init執行1號專案(程序)。這個1號專案會在使用者態執行init專案(程序)。這是第一個以外部專案的名義執行的,之所以叫init,就是做初始化的工作,周瑜根據自己多年的專案管理經驗,將這個init專案立為標杆,以後所有外部專案的執行都要按照他來,是外部專案的祖先專案。

 

下午,張昭也來到了公司,小馬拜託張昭做的第一件事情是呼叫kthreadd執行2號專案(程序)。這個2號專案是核心專案的祖先。將來所有的專案都有父專案、祖先專案,會形成一棵專案樹。公司大了之後,周瑜和張昭做的公司VP級別的任務,就可以坐在塔尖上了。

 

 

好了,這一節小馬終於將公司的架子搭起來了,兄弟三人如當年桃園三結義一樣,開始自己的創業生涯,小馬的這家公司能不能順利接到專案呢?欲知後事,且聽下回分解。

 

 

歡迎關注個人公眾號《劉超的通俗雲端計算》

 

&n