
从0编写一个操作系统
润星晓晔
没有困难创造困难也要向前冲!
展开
-
从0创建一个OS(十三) C源程序的编译和链接
本节讲学习如何编译和链接C源程序,以及查看最终文件与汇编代码的异同.关键字:C语言; 目标代码;链接器;反汇编目标:学习使用C语言编写与汇编语言功能相同的代码在上一节中我们创建了平台无关的编译器,本节我们将使用该编译器的一些功能来编译、链接C源程序.本节没有什么理论知识,主要是熟悉编译器的一些功能.编译首先我们写一个C语言函数,function.c,指示返回int型的0xBABA....翻译 2020-11-19 10:32:34 · 438 阅读 · 0 评论 -
从0创建一个OS (十二) 创建gcc交叉编译器
本节将学习如何为特定目标平台创建专属编译器关键字: 交叉编译器目标: 创建一个可以用来建立我们的kernel的开发环境理论基础鉴于以后我们将使用C语言编辑我们的操作系统核,因此需要对开发环境进行新的布置,也就是创建一个交叉编译器.为什么要搞一个交叉编译器?事实上类Unix系统的编译环境已经足够完善,但其缺点是太完善了,我们在编译时不知道到底使用了什么样的库文件,因此我们需要创建一个...翻译 2020-11-19 10:32:24 · 514 阅读 · 1 评论 -
从0创建一个OS (十一) 进入32-bit模式
终于要进入32-bit模式了,本节将完整的学习从boot sector进入32bit模式的流程关键字: 中断; 流程目标:进入32-bit保护模式并且测试前两节中学习到的(GDT设置,VGA打印功能)保护模式知识.理论基础进入32-bit保护模式需要进行以下几个步骤:关闭所有中断(不响应所有中断)导入设计好的GDT将CPU控制寄存器CR0的bit0设置为1通过一个设计好的jm...翻译 2020-11-19 10:32:14 · 307 阅读 · 0 评论 -
从0创建一个OS (十) 32-bit模式下的GDT
本节将学习如何使用汇编完成一个32bit模式下的全局描述符表(GDT)关键字: GDT目标:用汇编实现GDT结构理论基础之前的实模式下,我们用的寻址方法就是段地址 << 4 + 偏移地址,但是随着计算机理论的发展,人们发现,如果不在各种地址段之间加上访问权限的限制,计算机数据的安全性难以保障,恶意软件可以通过访问大量地址获得存储在计算机上的,并不属于本软件的信息.因此人们...翻译 2020-11-19 10:32:06 · 339 阅读 · 0 评论 -
从0创建一个OS (九) 32-bit模式的打印字符串函数
学习如何在32-bit模式下不借助BIOS的0x10号中断打印字符串关键字:32-bit保护模式; VGA; 视频存储区域目标: 学会在32-bit保护模式下打印字符串理论基础32-bit保护模式32-bit保护模式设计的内容非常多,十篇博客也写不完,因此这里只对32-bit保护模式的要点做简单介绍: 1. 32-bit保护模式下可以使用32bit的寄存器和寻址模式2. 32-b...翻译 2020-11-18 17:02:30 · 277 阅读 · 0 评论 -
从0创建一个OS (八) 读取硬盘中的数据
本节将学习如何从硬盘中读取数据关键字: 硬盘; 柱面(cylinder);磁头(head);扇区(sector); 进位(carry bit)目标:利用boot sector从硬盘中读取数据(这一步的目地是为从硬盘中启动操作系统kernel做准备)理论基础本节的内容是自本系列博客开始以来最复杂的一节,希望读者在学习时尽量保持耐心,译者读这一节的原文和代码也花了一整天时间,希望大家Kee...翻译 2020-11-18 17:02:19 · 407 阅读 · 0 评论 -
从0创建一个OS (六) 汇编函数和控制结构
本节将学习汇编函数和循环结构,其中穿插着字符串打印、数字转字符知识.关键字: 控制结构; 函数调用; 字符串目标: 学习使用汇编语言编写循环结构、函数对于本节的循环结构和函数,读者应该在本系列博客的第一篇原文介绍+环境搭建中,提到的《汇编语言(第三版)》一书中学习到过,因此本节的目地也是复习相关知识,为我们能写出一个功能完备的boot sector做准备.理论基础字符串在汇编中定义...翻译 2020-11-18 17:01:53 · 368 阅读 · 5 评论 -
从0创建一个OS (五) boot sector中的栈
本节将学习16bit模式下,汇编语言中的栈的基本操作关键字:stack目标:学习如何使用栈理论基础在我们学习其它高级语言,如C++,Java时,肯定会接触到栈这个概念,在汇编中栈的基础操作只有2种,入栈和出栈.在16bit模式下栈底由16bit寄存器BP负责记录栈顶由16bit寄存器SP负责记录栈中的一个单元占2个字节栈底的2字节空间不参与存储任务入栈操作: 先使SP =...翻译 2020-11-18 17:01:28 · 286 阅读 · 0 评论 -
从0创建一个OS (四) 电脑存储的组织形式
本节将学习boot sector以及其所在内存的相关知识关键字:memory offsets; pointers目标:学习电脑存储的组织形式在进行学习之前,先看一下这幅图这幅图为16bit实模式下电脑启动后的内存存储结构,读者请尤其注意粉色椭圆勾选的区域.实验一我们想要通过boot_sector的代码将大写字母"X"打印在屏幕上,为此设计了一组实验,实验设计见源码.源码; =...翻译 2020-11-18 17:01:10 · 315 阅读 · 0 评论 -
从0创建一个OS (三) 在boot sector中打印信息
本节将学习如何向boot sector中添加打印信息功能关键字: interrupts, CPU registers目标:向我们在上一节中创建的"裸骨架"添加功能——打印信息上一节的源码部分有一个死循环,用以控制程序始终运行在boot sector中,本节将向上一节的源码中添加打印信息到屏幕功能.理论基础我们将打印的信息为一个字符串,“HELLO”,可是打印功能如何实现呢?我们使用0...翻译 2020-11-18 17:00:27 · 312 阅读 · 0 评论 -
从0创建一个OS (二) boot_sector的“裸骨架“
本节将学习如何使用创建一个能够boot的文件关键字: assembler; BIOS目标: 创建一个文件,使BIOS能够将其当作能够boot的硬盘理论基础当PC启动时,BIOS并不知道如何启动操作系统,所以BIOS将启动操作系统的任务委派给boot sector,因此boot sector必须放置到一个大家都知道的地方,人们约定,这个地方,应该在硬盘的第一个存储空间中(cylinder...翻译 2020-11-18 17:00:01 · 463 阅读 · 0 评论 -
从0创建一个OS (一) 原文介绍 + 环境搭建
OS教程——从Scratch创建一个OS本文为os-tutorial—How to create an OS from scratch!的中文翻译版,旨在为国内OS社区初学者提供入门OS编写教程,文中提供了每一步的解释说明,使读者能够顺着清晰的思路完成一个OS,学习OS编写过程中的各项知识。本文的读者需要具备以下知识: 汇编语言基础 操作系统基础概念针对以上两条推荐两本书,不具备以上...翻译 2020-11-18 16:59:30 · 1044 阅读 · 0 评论