原创 一文帶你快速瞭解編譯原理

什麼是程序的執行? 輸入程序輸出 程序可以看做一個函數,接受輸入和返回輸出? 什麼是編譯器? 源程序編譯器目標程序 將源程序編譯成 目標程序。 代表: c/c++ go rust 什麼是解釋器? 源程序解釋器輸入輸出 代表:

原创 KMP 算法 筆記

KMP 包含一個PMT表。 我們把 待匹配的文字稱爲 模式字符串. 前綴 : “aba” 前綴爲 除去 最後一個 字符 “a” 所 形成 的集合。 {“a”,“ab”} 後綴 : “aba” 後綴 爲 除去 最前的一個字符串 “

原创 Trie樹魔改 實現千萬數據 秒級排序

Trie 樹的優點 是 查找 摘要O(len)的 複雜度 ,本質上也是一顆樹的結構。 花了 一天時間,在自己上一篇文章的原基礎上實現了一個Trie 能排序的算法, 進過調整 算法實現了插入排序,和通過公共前綴索引功能。 使用了重複

原创 布隆過濾器 原理 應用場景推導及Go實現

Bloom Filter(布隆過濾器) 布隆過濾器是一種多哈希函數映射的快速查找算法,通常應用在一些需要快速判斷某個元素是否屬於集合,但並不嚴格要求100%正確的場合。 Bloom算法類似一個hash set,用來判斷某個元素

原创 王爽第三版彙編 實驗題 實驗(四 五)

P121頁 實驗四 (1)編程,向內存 0:200 ~ 0:23F依次傳送數據0~63(3fh) assume cs:code code segment mov ax,0h mov ds,ax mov cx,3fh mov bx,

原创 常用排序算法 Go實現

冒泡排序: 分解思想: 1.每次取到最大的數和第i位交換 //取數組最大的數 遍歷一遍數組 找到最大的 func GetMax(arr[] int){ for j:=1;j<len(arr);j++{ //找到數組中最小的

原创 數據結構之樹從入門到如土(二)----帶你從頭碾壓 一顆AVL樹(多圖)

AVL樹 解決了二叉樹的什麼問題? AVL 和 二叉樹的 最大區別是能自平衡,簡單的說就是多了一步插入的時候會按照插入的值做 自平衡 防止 插入 向 1 ,3 ,4, 6, 8, 9 這樣 左邊的值 比右邊小 就會變成 鏈表了。

原创 bochs環境在Mac下 安裝

$ brew install bochs 安裝完後 vim ~/.bash_profile 將下面2行加入mac環境 export BXSHARE="$HOME/opt/bochs/share/bochs" export

原创 數據結構之樹從入門到如土(一)----大話二叉樹 及GO實現

什麼是樹     相信大家沒見過雖然可能沒見過就散機裏的樹,但是一定見過現實世界的🌲吧. 如果問你幾個樹的主要特徵,你能答上來幾個?我猜喫貨首先會想到的能喫不能喫,這樣的屬性,其實樹有很多特點 (好吧我也答不上來了),但其中比較明

原创 從零開始寫一個操作系統內核 筆記(三) 上

BootLoader引導啓動程序 組成2部分: 1.Boot引導程序:主要負責啓動和加載Loader程序。 2.Loader引導加載程序:用於完成配置硬件工作環境、引導加載內核等任務。 Boot引導程序 計算機上電啓動 → BI

原创 從零開始寫一個操作系統內核 筆記(四) 番外篇 8086CPU 之保護模式

操作系統內核加載過程 上圖是 linux 0.1.2 應到程序加載操作系統的步驟。 在實模式下的1M 空間下,BIOS啓動後經過一系列自檢(CPU、內存、硬盤等)後,將控制權 交給主引導記錄MBR(Main Boot Rec

原创 王爽彙編 (十)實驗

檢測點 10.1 assume cs:code stack segment db 16 dup (0) stack ends code segment start: mov ax,stack mov ss,ax mov s

原创 從零開始寫一個操作系統內核 筆記(四) CPU 實模式到 保護模式

什麼是保護模式? 原先的CPU 是不需要要保護模式就能訪問的,但這樣 程序 之間 隨便訪問,沒有任何安全可言,要是一個程序崩潰了或者因爲某些BUG跳轉到了其他程序的底盤,直接就調用別的程序 的功能多牛逼 哈哈 某些Hack 也是利

原创 從零開始寫一個操作系統內核 筆記(三) 番外篇 FAT12 魔改 FAT32 文件系統 硬盤文件讀取方式

FAT 文件系統 佈局 創建 硬盤 第一步 : bximage -> 選1 -> [hd] 回車 -> [flat]回車 -> 大小自定義 我選的36 -> [c.img]自己命名 -> 完成 第二步 : 格式化 成FAT3

原创 從零開始寫一個操作系統內核 筆記(四) 番外篇 8086CPU 之分頁機制

一. 邏輯地址和線性地址 下面是一條普通的 eax賦值指令 > mov 0x80495b0, %eax 首先 這條指令 真正會被執行成 mov ds:0x80495b0, %eax 在保護模式下,ds 是個段選擇子,通