1. 程式人生 > >自己動手寫作業系統(五)

自己動手寫作業系統(五)

  這裡開始就進入了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

自己動手設計ESB1

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.地址重定位(非常重要)也叫地址轉換、對映、翻譯 之前知道:程式裝載到記憶體才可以執行,通常,程式可執行檔案格式儲存在磁碟上;多道程式設計模型,允許多個程式同時激怒記憶體;每個程序有自己的地址空間,