BlogHide Resteemsgeyu (54)in code • 6 years ago从头写一个操作系统 12你可能需要google: kernel, ELF format, makefile 目标: 写一个简单的kernel,让bootsect启动它 The kernel 我们用C语言写的内核只能做一点点事,就是在屏幕左上角打印一个'X',打开这个 kernel.c 。 你会发现第一个函数中什么都没写,这个函数创建了指向 main 函数的内核入口。…geyu (54)in esteem • 6 years ago从头写一个操作系统 11 (create an OS from scratch 11)你应该先google:C,ojbect code, linker, disassemble 目标:用C语言做底层汇编语言做的那些事 Compile 我们得研究研究C编译器如何编译代码,并且比较它与汇编器生成的机器码两者是否有所差别。 写一个只有一个简单函数的程序 function.c 。打开 function.c 看一眼。 int my_function() {geyu (54)in esteem • 6 years ago从头写一个操作系统 10 (cross-compiler i386-elf-gcc)lesson 11 你需要google:cross-compiler 目标:配置可编译32位内核的开发环境 如果你用Mac,你应该立即着手做,如果使用别的系统可以再等几节课。不过,当用c语言开发时,你一定得有交叉编译环境。 为什么? 我会稍微修改以下这个 指南 . Required packages 第一步,你需要 安装…geyu (54)in esteem • 6 years ago从头写一个操作系统 09 (create an OS from scratch 09)lesson 10 这一课,就不简单的翻译课文,因为作者只写了一点点,不过一切都在代码里。 让我们把代码拆开,看看16位实模式是如何跳转到32位保护模式的。 分析代码前,先想想,为什么会有16位实模式呢?…geyu (54)in esteem • 6 years ago从头写一个操作系统 08 我们一直用qemu来装载.bin文件,模拟计算机启动的过程,qemu很好,后面我们会讲到如何用gdb调试qemu,只能用强大来形容。 喜欢折腾的人,永远都不会闲下来,就像用vmware将二进制文件作为启动盘,用qemu模拟树莓派的启动一样,对于学习来说是有意义的。 今天介绍另一个很好用的虚拟机:bochs。…geyu (54)in code • 6 years ago从头写一个操作系统 07 (create an OS from scratch 07)lesson 9 你需要自己去查: GDT 本节目标: 编写 GDT 还记得lesson 6的segmentation吗?段地址左移一位,只有16位的寻址总线却达到了20位的寻址能力。…geyu (54)in code • 6 years ago从头写一个操作系统 07 (create an OS from scratch 07)lesson 9 你需要自己去查: GDT 本节目标: 编写 GDT 还记得lesson 6的segmentation吗?段地址左移一位,只有16位的寻址总线却达到了20位的寻址能力。…geyu (54)in cn • 6 years ago从头写一个操作系统 06目标: 在32位保护模式下,打印文字到屏幕上 32位保护模式允许我们使用32位寄存器、32位寻址能力、内存保护、虚拟内存以及其他先进的功能,但是我们失去了BIOS提供的中断(之前用的0x10,就是其中的一个中断),并且还需要编写GDT(后面会介绍)。…geyu (54)in cn • 6 years ago从头写一个操作系统 05lesson 6 你可能需要google这个概念:segmentation 目标: 学习16位实模式下的内存寻址 如果非常了解segmentation,可以跳过这节课。 lesson3中我们用 [org] 定义了segmentation,其实它就是所有数据的偏移量。 CPU提供了几个特殊的寄存器: cs 、 ds 、 ss 、 es…geyu (54)in esteem • 6 years ago从头写一个操作系统 04你可能需要google这几个知识点: control structures, function calling, strings 目标: 使用汇编编写基本的逻辑(循环、函数) 越来越接近目标中的启动引导区了。 在 7中,我们会从硬盘中读取引导数据,而后便进入启动内核的步骤。不过目前我们还需要做些必要的准备:练习写一些控制结构、函数调用,读取字符串的代码。…geyu (54)in esteem • 6 years ago从头写一个操作系统 03写一个操作系统,需要学很多知识,但如果纯研究理论,一万个小时也不可能面面俱到的完全掌握这些理论。 当然不是说这些理论有多复杂,恰恰是这些写进了书本的理论为了求大求全,把简单的知识讲的复杂了,让学的人不明所以,不知所图。比如龙书(编译原理)读起来艰深晦涩,但如果从程序运行的角度去看,编译器就是一个翻译软件,将文本翻译成可以执行的机器码或者中间代码,既然是翻译软件,那将'a b c' 翻译成'A…geyu (54)in esteem • 6 years ago从头写一个操作系统 02在开始前,你可能需要google一下: memory offsets, pointers 目标: 学习计算机的内存空间是如何分配,如何管理的。 请打开 这本书 1的14页 ,看看图中的内存布局。 这节课的目标就是了解引导区的内容被加载到内存的什么位置。 直接告诉你吧,BIOS将它放在 0X7C00…geyu (54)in code • 6 years ago从头写一个操作系统 01开始前,如果不熟悉右边的知识点,建议先google: assembler, BIOS 本节的目标:创建一个可以被BIOS识别的,可作为启动介质的文件 我们马上就要亲自完成一个引导扇区,你一定会很有成就感! 理论: 计算机启动时,首先启动的是BIOS,但BIOS并不知道如何启动操作系统,它会把启动的 工作交给引导扇区中的指令。因此,引导扇区需要放在一个约定俗成的标准…geyu (54)in code • 6 years ago采坑记录:Steem 文档- 中国内地访问作为一个有理想的程序员,哪能不会用API。可是国内网络访问steem的文档,你点目录也不会有反应的,至于为什么,让我来解开谜团。 国内点开 这个网址后,会有一个极长时间的等待,此时浏览器一片白,可是也不像被墙的网站直接报错,这个过程大概几十秒到几分钟不等,而进去之后,点什么都是不会跳转的,之前偶尔点一下想看,但很少有能正常看的时候,我就很奇怪,所以今天我必须要弄明白是怎么回事。…geyu (54)in cn • 6 years ago我热爱的编程-该从何讲起呢-2书接上文,通过对加法器结构的构思,使得我对逻辑的理解更深一步,当严格的“是”与“否”可以用来表达数字的累加,便使得计算机做四则运算成为了可能,减法就是加上一个负数,乘法是加法的重复,而除法是减法的重复,例如7除2,由7减去2重复3次,当余数不足2,则除法计算结束,重复的3次作为根,1作为余数。 其中又引出了三个问题: 1.如何表示负数。 2.如何重复。 3.如何判断两数的大小。…geyu (54)in code • 6 years ago我热爱的编程-该从何讲起呢要感谢去年混迹在steemit的日子,当时的我只是一个干了多年市场类工作,单纯想从区块链中捞一桶金的人,即便在上一家公司时,身边全都是程序员,我也从未敢想过有一天我会走上编程这条路。从未想到我会对程序有超越其他所有事情的兴趣,也没想到什么东西能重燃我学习的热情,但今天看来,这些从未敢想的却都成为了现实。…geyu (54)in cn • 7 years ago美元的暴跌背后有个写了几十年的故事事先声明我写的只是一个故事,只能当作故事看,我绝不保证逻辑自洽和条理清晰。 我们看到的貌似是毫无逻辑的两件事,美元进入加息周期--->美元贬值--->股市暴跌 按理说美元有加息预期,追求高安全性的资金会大量买入美元抛售其他货币,理应使美元走强,但现在美元汇率暴跌,更是连累了股市,事出反常必有妖。…geyu (54)in cn • 7 years ago投资区块链,什么时候取出本金比较好这个看起来很简单的问题涉及到了很多方面的能力与经验。…geyu (54)in cn • 7 years ago纸币有没有可能完全消失?(转自本人 币问 回答 @半步江南)这个道理很容易讲明白,如果仍然有国家这个概念,纸币或者电子纸币(纸币在银行显示的数字)这个概念便不会消失。 纸币不过是一张纸张质量很好的纸,它的价值的赋予来源于国家,…geyu (54)in cn • 7 years ago春秋 一章八回 动员迪布鲁虽然勇猛,但作为先锋主将,他并没有冲动地随前排士兵杀入敌阵。此时这一只骑兵如尖刀插入敌人腹地,战略上已经取得了成功,只要再以此为立足点,不断的制造混乱,就能缓解中间步兵部队的压力。有个别的魔族骑兵于敌阵中落地而陷入敌阵,但却丝毫不惧,捡起兵器就发狂般地攻击,仿佛上古恶般不死不休,直让周围的人类士兵胆寒。而其他没有被击落的魔族骑兵,竟然将赵稚的部队杀了一个对穿,几万人类士兵任由敌人屠戮一番后,