自己動手寫作業系統(五)
這裡開始就進入了core的啟動流程(類似於linux的kernel)。core的入口函式是start_core,如何定義如何函式呢?我們這裡通過編譯指令就可以了。參看下面的配置檔案:
ENTRY (start_core) SECTIONS { . = 0x100000; .text :{ *(.text) } .rodata ALIGN (0x1000) : { *(.rodata) } .data ALIGN (0x1000) : { *(.data) } .bss ALIGN (0x1000) : { sbss = .; *(COMMON) *(.bss) ebss = .; } }
ENTRY就是入口函式的定義方法。我們自己編寫的程序都是以main作為入口函式的。可能用這個也可以修改為其他函式哈~~。
start_core裡面做的處理基本就是gdt,中斷,記憶體,時鐘等的初始化。我們這裡主要先關注一下記憶體的初始化。
記憶體目前來說分配器有3個:coalition,fragment,vm。coalition用於核心kmalloc分配連續的實體記憶體。fragment用於分配4K的頁給核心vmallc和使用者態的mallc。
vm用來管理每個程序的虛擬地址。相關介紹如下圖:
接下來我們會逐一介紹每個記憶體分配器的實現和遇到的問題點。哈哈,簡直就是天坑~~~。大家有興趣的話可以看一下我的github針對mm的修改。改的天翻地覆~~~。
謝謝。
相關推薦
自己動手寫作業系統(五)
這裡開始就進入了core的啟動流程(類似於linux的kernel)。core的入口函式是start_core,如何定義如何函式呢?我們這裡通過編譯指令就可以了。參看下面的配置檔案: ENTRY (start_core) SECTIONS { . = 0x10
自己動手寫作業系統(二)
系統啟動流程簡單來說就是下面的順序: =============================== 1.BIOS:開機主動執行的韌體,會認識到第一個可開機的裝置 2.MBR:第一個可開機裝置的第一個扇區內的主引導分割槽塊,內包含引導載入程式
自己動手寫作業系統(一)
從去年就想好好的讀一下這本書,跟著書上做一下,但是給耽擱了,現在就好好的開始探索這麼書吧! 雖然我很想在這裡吹一段這本書有多麼的厲害,但是!我第一章都沒有看完,吹不了!!!等我讀的個七七八八再回來吹吧。 我是在搜尋嵌入式的學習路線中發現的這本書,當時他們說這本書很有趣,操作
自己動手寫作業系統二(編寫核心Hello World 教程)
By EvilBinary 小E 本文用到的boot.s 和setup.s 兩個檔案見本blog MyOs 分類相關文章。 我們編寫start.s 來啟動初始化資訊,然後進入main.c核心程式碼,然後顯示Evilbinary os字樣 //star
自己動手寫SSO(單點登錄)
getattr apach tpc style inter -m commons getwriter servle SSO在我們的應用中非常常見,例如我們在OA系統登錄了,我們就可以直接進入采購系統,不需要再登錄了,這樣使我們非常方便。
深入學習Tomcat----自己動手寫伺服器(附伺服器原始碼)
相信大多Web開發者對Tomcat是非常熟悉的,眾所周知Tomcat是一款非常好用的開源Servlet容器,您一定對這個最流行的Servlet容器充滿好奇,雖然它並不像一個黑盒子那樣讓人無法觸控但是Tomcat的原始碼的確讓人看起來頭疼。筆者就在這裡和大家共同分析一個簡單的W
理解Java 動態代理和AOP(可以自己動手寫AOP框架!)
說到AOP,很容易就想到 spring AOP。因為它是AOP裡最優秀的實現框架。但本文不打算討論 spring AOP,只想把如何通過動態代理方式實現AOP思想說通。當然,整明白了這個道理,理解 spring AOP 也就簡單了! 首先我覺得需特別強調一下什麼是面向介面程
我是如何學習寫一個作業系統(五):故事的高潮之程序和執行緒1
前言 為什麼取這個標題呢?一是程序和執行緒是作為作業系統裡最重要最核心的一部分。二是確實吃冰棍拉冰棍,沒話,強行湊標題和之前的標題差不多字數。 前一章寫了系統呼叫的過程,算是一個小插曲,這個部分不管在哪裡應該都是可以的。 現在的這個系列已經和之前的標題漸行漸遠了,原本是想以之前寫的一個玩具型作業系統Fragi
全面剖析《自己動手寫作業系統》的pmtest1.asm
##段機制輕鬆體驗 段機制輕鬆體驗 記憶體定址: 真實模式下的記憶體定址: 讓我們首先來回顧真實模式下的定址方式 段首地址×16+偏移量 = 實體地址 為什麼要×16?因為在8086CPU中,地址線是20位,但暫存器是16位的,最高定址64KB,它無法定址到1M記憶體。於是,Int
《自己動手寫作業系統》第2版:簡介
今年剛畢業,從事電商java開發崗位,一直對著需求編碼的話感覺技術長進不會太大,碰巧對作業系統這塊有些許興趣,就想著學習這塊的知識,如果學得好的話看將來能不能轉型成作業系統,系統安全或者c/c++相關的開發人員。 於是在網上找了很多資料,其實大部分都是理論書
讀 自己動手寫作業系統
用一個月左右的時間讀了《自己動手寫作業系統》,這是一本讓人讀著很過癮,卻也特別累的一本書。 對作業系統的興趣由來已久,只是一直未能找到入門之徑。作業系統教材是個令人生畏的東西,它可以告訴人有什麼,卻不能告訴人為什麼,從那裡瞭解的作業系統有如盲人摸到的象,得到各個部分,卻不
Linux.NET實戰手記—自己動手改泥鰍(下)
在上回合中,我們不痛不癢的把小泥鰍的資料庫從只能供在Windows下執行的Access資料庫改為支援跨平臺的MYSQL資料庫,毫無營養的修改,本回閤中,我們將把我們修改後得來的專案往Linux中部署、除錯,讓它適應Linux.NET的執行環境。 在本回閤中,我們將討論研究: 1、由一個謊言引出另一個謊
Linux.NET實戰手記—自己動手改泥鰍(上)
各位讀者大家好,不知各位讀者有否閱讀在下的前一個系列《Linux.NET 學習手記》,在前一個系列中,我們從Linux中Mono的編譯安裝開始,到Jexus伺服器的介紹,以及如何在Linux中簡單的部署自己的WebForm程式和ASP.NET MVC應用程式。如果各位讀者有閱讀該系列的文章並且成功的實現上面的
自己動手寫作業系統學習筆記(一)
早就想抽時間系統的學習一下於淵寫的《自己動手寫作業系統》,但始終沒空,現在忙活一年,年底終於有點空閒,今天終於把書裡的第一個例子在windows下搞成功.這裡把實驗步驟記錄一下. 實驗全部在win7環境下進行,用到軟體版本和下載地址為: Win64位Bochs 下載地址:
跟我一起寫 Makefile(五)
六、多目標 Makefile的規則中的目標可以不止一個,其支援多目標,有可能我們的多個目標同時依賴於一個檔案,並且其生成的命令大體類似。於是我們就能把其合併起來。當然,多個目標的生成規則的執行命令是同一個,這可能會可我們帶來麻煩,不過好在我們的可以使用一個自動化變數“[email protecte
自己動手設計ESB(1)
1、概述 在我開始構思這幾篇關於“自己動手設計ESB中介軟體”的文章時,曾有好幾次動過放棄的念頭。原因倒不是因為對冗長的文章產生了惰性,而是ESB中所涉及到的技術知識和需要突破的設計難點實在是比較多,再冗長的幾篇博文甚至無法對它們全部進行概述,另外如果在思路上稍微有一點差池就會誤導讀者。一個可以穩定使用的E
全面剖析《自己動手寫作業系統》第四章---載入Loader.bin
上一節我們已經詳細介紹了FAT12檔案系統的資料結構,下面我們需要思考的是兩個問題:1、引導扇區通過怎樣的步驟才能找到檔案;2、如何能夠把檔案內容全都讀出來並載入進入記憶體。 下面我們先解決第一個問題: 1、 如何讀取軟盤? (1) 我們需要使用BIOS中斷int 13h來讀取軟盤。它的用法如下表所
《自己動手寫作業系統》第三章 pmtest1——從真實模式到保護模式
摘要:本節,我們將學習如何從真實模式進入保護模式,剖析pmtest1.asm原始碼。詳細講解如何從保護模式進入真實模式。 1.標頭檔案編寫: 這一部分,你需要把一些關鍵物理器件和資料結構的佈局記在腦子裡 GDT描述符:32b段基地址(B2、B3、B4、B7)+20b段限長
全面剖析《自己動手寫作業系統》第六章---程序
在一開始學習程序的時候,我們大概每個人都會遇到過這樣的問題,下面就讓我們帶著這些問題來認識認識程序。 1、程序是什麼? 2、什麼是多程序? 3、執行一個程序需要什麼? 4、多程序之間是如何排程的? 5、程序的上下文環境是什麼? 6、如何建立一個新的程序? 一、程序是什麼?
作業系統(五)儲存模型
1.地址重定位(非常重要)也叫地址轉換、對映、翻譯 之前知道:程式裝載到記憶體才可以執行,通常,程式可執行檔案格式儲存在磁碟上;多道程式設計模型,允許多個程式同時激怒記憶體;每個程序有自己的地址空間,