手把手教你制作一个操作系统

article/2025/9/24 1:27:43

目录

  • 写在前面
  • 参考资料
  • 开始动手
    • 写一个最小的操作系统
    • 调试.COM
    • 环境配置(Linux)
      • 用VisualBox虚拟器运行Ubuntu系统
      • 安装Linux系统
      • Dell笔记本的BIOS配置
  • 保护模式
    • 理解实模式和保护模式
    • 增加一个用LDT描述的任务
    • 特权集

写在前面

笔者目前大二,学过C++,汇编,操作系统,正在学习编译原理和计算机网络,打算做一个小的操作系统来巩固知识,加深对计算机的理解。

参考资料

目前正在学习《自己动手写操作系统》,资源参考一下博客:
自己动手写操作系统(高清图书+源代码)分享

开始动手

写一个最小的操作系统

一开始就遇到困难了,书中说10分钟完成一个操作系统,我花了一个小时了环境都没弄好,好在学计算机的不怕折腾,先附张结果图:
在这里插入图片描述
下面详述步骤:
参考文档:

  • 《自己动手写操作系统》—— 工作环境搭建
  • 30天自制操作系统第一天–VirtualBox实现软盘启动

步骤:
1.首先去官网下载安装NASM,配置环境变量,网址
2.下载虚拟机VirtualBox,网址(需要科学上网)
3.编写源代码,利用NASM编译成.bin文件,使用FloppyWriter.exe将文件写到TINIX.IMG文件里,经调试直接将后缀bin改成IMG好像也可以
4.新建一个虚拟机,网址,已经讲得很详细了,需要注意的是添加软盘选择IMG文件,我运行的时候试了几次才出现红色的“Hello,OS World!”,也不知道是什么原因。

这真的是太棒了,虽然你知道它有多么简陋,但是,毕竟你已经制作了一个可以引导的软盘了,而且所有工作都是你亲手独立完成的!

调试.COM

经历了一个寒假,汇编都忘得一干二净了,不得不从以前的教学文档里找回一些零星的记忆。
还好DOSBox还在,如果没有DOSBox,建议去官网下载一个,我找到了我安装Masm的地方,在旁边又把Nasm再安装了一遍(这样就不用在DOSBox\DOSBox-0.74\DOSBox 0.74 Options.bat里再配置一遍虚拟C盘了)
在这里插入图片描述
将boot.asm中的第一句改成org 07c00h,输入nasm boot.asm -o boot.com,打开DOSBox,找到boot.com运行就能看到左上角的"Hello,OS World"了在这里插入图片描述
(由于jmp $这条语句,目前应当是卡死了的)
也可以使用debug工具直接调试的在这里插入图片描述

汇编课上学到的东西,终于派上用场啦!

环境配置(Linux)

用VisualBox虚拟器运行Ubuntu系统

按照书上所说,可以用虚拟器运行Linux系统,但是书上只给出了Visual PC版的安装方法,如果使用VisualBox的话就要用别的方法了
参考文档:Linux下载安装过程 官网
这两篇教程应该足够了,只是耗费的时间比较长,如果顺利的话,Tinix应该可以运行了
在这里插入图片描述

安装Linux系统

VisualBox虚拟器上的Linux系统虽然容易安装,但运行起来实在是太慢了,随便一个命令都要等上好几秒甚至几十秒,像打开filefox这种直接就卡死机了,特别耽误时间而且影响心态(不知道是不是我电脑的问题),总之,磨了一天多终于把Linux系统给装上了,反正迟早要装的。
参考链接:
1.新手安装 Ubuntu 操作系统步骤教程
2.Ubuntu18.04安装教程

Dell笔记本的BIOS配置

在这里插入图片描述
如果都能按教程的来不出错的话,安装过程将会容易得多,不知道是不是版本问题,我的BIOS和教程总有一些出入,每次教程看得一半就做不下去了,下面的博客整理了一些问题,希望大家安装顺利!
关于dell设置U盘启动与安装Ubuntu的几个问题
在这里插入图片描述
安装Ubuntu后需要一些配置,写给工程师的 Ubuntu 20.04 最佳配置指南

保护模式

理解实模式和保护模式

由于各种原因,保护模式这章我卡了特别久,现在来整理一下。
参考文档:
实模式与保护模式解惑之(一)——二者的起源与区别
实模式和保护模式区别及寻址方式
为了更方便的理解汇编代码,首先要清楚两种模式在寻址方式上的区别,了解开设A20线的意义(第一篇文章有提到),才能理解为什么进入保护模式前要先打开地址线A20。
在这里插入图片描述
(个人理解)保护模式其中“保护”的含义就是要保护系统程序,让用户程序不能随便动系统程序空间的代码,这个其实在我们操作系统课里学过,就是分段操作,不过实模式下虽然有segment的概念,由于采用 hysicaladdress=segment * 16 + offset 的模式,对保护系统程序并没有什么作用;而保护模式中通过段选择符指向段描述符,再由段描述符指向段段基址加上段内偏移地址得出线性地址(详见第二篇文章),其中段描述符的S位和TYPE字段又将相应段分为了数据段、代码段和系统段,不同段有不同的权限,从而真正体现了保护的作用。

增加一个用LDT描述的任务

不来点实战真的不知道自己在看的什么。。。
正好看到书上62面有一个“读者有兴趣可以完成小任务”,做着试试看吧。
在这里插入图片描述
为了不搞复杂了,就熟悉熟悉LDT的用法,我们新建一个描述符表MYLDT,考虑到汇编不好调试的问题,为了少磨点心态,我们就把显示的“L”替换成“S”,证明我们改过来了,开干!

  1. 增加一个32位的代码段CodeB
; CodeB (MYLDT, 32 位代码段)             自己加的LDT代码段,打印一个S
[SECTION .la]
ALIGN	32
[BITS	32]
LABEL_CODE_B:mov	ax, SelectorVideomov	gs, ax			; 视频段选择子(目的)mov	edi, (80 * 12 + 0) * 2	; 屏幕第 10 行, 第 0 列。mov	ah, 0Ch			; 0000: 黑底    1100: 红字mov	al, 'S'mov	[gs:edi], ax; 准备经由16位代码段跳回实模式jmp	SelectorCode16:0
CodeBLen	equ	$ - LABEL_CODE_B
; END of [SECTION .la]
  1. 增加描述符表
;MYLDT                      ;自己加的MYLDT段,内容是一个LDT描述符表,其中只有一个代码段描述符
[SECTION .ldt]
ALIGN     32
LABEL_MYLDT:
;
LABEL_MYLDT_DESC_CODEB: Descriptor 0,CodeBLen-1,DA_C+DA_32;Code,32位MYLDTLen equ $-LABEL_MYLDT
;MYLDT选择子
SelectorMYLDTCodeB equ LABEL_MYLDT_DESC_CODEB - LABEL_MYLDT+SA_TIL
; END of [SECTION .ldt]
  • 在GDT中加入MYLDT段描述符与段选择子
LABEL_DESC_MYLDT:		Descriptor	       0,        MYLDTLen - 1, DA_LDT	;MYLDT      自己加的,用来描述MYLDT
SelectorMYLDT                        equ          LABEL_DESC_MYLDT	- LABEL_GDT    ;自己加的,用来作MYLDT段选择子
  • 初始化
; 初始化 MYLDT 在 GDT 中的描述符                                                                                      ;自己加的,初始化MYLDTxor	eax, eaxmov	ax, dsshl	eax, 4add	eax, LABEL_MYLDTmov	word [LABEL_DESC_MYLDT + 2], axshr	eax, 16mov	byte [LABEL_DESC_MYLDT + 4], almov	byte [LABEL_DESC_MYLDT + 7], ah; 初始化 MYLDT 中的描述符xor	eax, eaxmov	ax, dsshl	eax, 4add	eax, LABEL_CODE_Bmov	word [LABEL_MYLDT_DESC_CODEB + 2], axshr	eax, 16mov	byte [LABEL_MYLDT_DESC_CODEB + 4], almov	byte [LABEL_MYLDT_DESC_CODEB + 7], ah
  • 加载MYLDT
; Load MYLDT                                                                                         这里改为MYLDTmov	ax, SelectorMYLDTlldt	ax;jmp	SelectorLDTCodeA:0	; 跳入局部任务jmp	SelectorMYLDTCodeB:0	; 跳入局部任务
  • 编译
    首先还是提醒一下最好别打错字了,段选择子和段描述符标签最好复制粘贴,不细心的话编译的时候可能就要像我这样一个个改了
    在这里插入图片描述
    告诉大家一个技巧,记事本行头虽然没有行号标名,右下角的状态栏还是有的,根据错误行数的提示可以快速定位到相应行数,加快debug速度。
  • 运行
    在这里插入图片描述
    可以看到红色的L变为S了,nice!

特权集

个人认为特权集是保护模式最本质待部分了,书上也讲得十分复杂,我们来理顺一下。

  • CPL(Current Privilege Level) 当前执行的程序或任务的特权级 存储在CS和SS的第0位和第1位上
  • DPL(Descriptor Privilege level) 表示段或者门的特权级 存储在段描述符或者门描述符的DPL中
  • RPL(Requested Privilege Level) 避免低特权级应用程序访问高特权级段内的数据 通过段选择子的第0位和第1位表现

再对不同段整理一下

  • 访问数据段或者调用门或者TSS:CPL,RPL<=被访问DPL
  • 访问非一致代码段(不使用调用门):RPL<CPL=被访问DPL
  • 访问非一致代码段(使用调用门):CPL>被访问DPL,RPL不检查
  • 访问一致代码段:CPL>被访问DPL,RPL不检查

http://chatgpt.dhexx.cn/article/6bsyaVbk.shtml

相关文章

Linux操作系统教程

目 录 1 Linux概述1.1 操作系统1.2 Linux前身-Unix1.3 Linux介绍1.4 Linux组成1.5 常见版本及介绍1.6 Linux目录结构&#xff08;了解&#xff09; 2 软件安装与使用2.1 安装 VMware虚拟机软件2.1.1 运行2.1.2 安装向导2.1.3 同意许可2.1.4 选择安装目录2.1.5 用户体验设置2.1.…

Linux教程——操作系统是什么,操作系统概述

Linux 也是众多操作系统之一&#xff0c;要想知道 Linux 是什么&#xff0c;首先得说一说什么是操作系统。 计算机是一台机器&#xff0c;它按照用户的要求接收信息、存储数据、处理数据&#xff0c;然后再将处理结果输出&#xff08;文字、图片、音频、视频等&#xff09;。计…

操作系统 计算机操作系统教程笔记

进程是操作系统对一个正在运行的程序的一种抽象。在一个系统上可以同时运行多个进程&#xff0c;而每个进程都好像在独占地使用硬件。而并发运行&#xff0c;则是说一个进程的指令和另一个进程的指令是交错执行的。 在大多数系统中&#xff0c;需要运行的进程数是多于可以运行它…

操作系统的极简教程

文章主要结构图如下 操作系统 现代计算机系统由一个或多个处理器、主存、打印机、键盘、鼠标、显示器、网络接口以及各种输入/输出设备构成。 然而&#xff0c;程序员不会直接和这些硬件打交道&#xff0c;而且每位程序员不可能会掌握所有计算机系统的细节&#xff0c;这样我们…

操作系统教程概念

文章内容不包含Linux部份&#xff01; 目录 第 1 章 操作系统概论1.1 操作系统概观1.2 操作系统形成与发展1.3 操作系统基本服务和用户接口1.4 操作系统结构和运行模型 第 2 章 处理器管理2.1 处理器状态2.2 中断技术2.3 进程及其实现2.6 处理…

Linux操作系统入门

Linux操作系统入门 一、入门概述 我们为什么要学习Linux linux诞生了这么多年&#xff0c;以前还喊着如何能取代windows系统&#xff0c;现在这个口号已经小多了&#xff0c;任何事物发展都有其局限性都有其天花板。就如同在国内再搞一个社交软件取代腾讯一样&#xff0c;想想…

操作系统 | Linux基础教程

目录 1Linux 简介1.1Linux的发行版1.2Linux应用领域1.3Linux vs Windows1.4Linux 安装 2Linux 系统启动过程2.1内核引导2.2运行init2.3系统初始化2.4建立终端2.5用户登录系统2.6Linux 关机2.7Linux 远程登录2.8Linux 忘记密码解决方法2.9Linux常用快捷键 3Linux 系统目录结构3.…

如何学习操作系统这门课程?

大家好&#xff0c;我是轩辕。 今天跟大家深度聊一下&#xff0c;操作系统这门课&#xff0c;怎么学&#xff0c;才能更牛逼&#xff1f; 一、做好前置功课 千万不要一上来就啃书&#xff0c;学任何课程之前&#xff0c;都需要做好功课&#xff1a; 这是一门什么课程&#x…

操作系统 入门篇

操作系统的基本功能&#xff0c;进程管理&#xff0c;虚拟内存&#xff0c;Linux和Windows区别 。 目录 基本功能 1. 进程管理 2. 内存管理 3. 文件管理 4. 设备管理 常见概念 1. 并发 2. 共享 3. 虚拟 虚拟内存到底是啥&#xff1f; 宏内核和微内核 # 1. 宏内核 …

操作系统入门

文章目录 页面置换算法1.最佳置换算法&#xff08;OPT&#xff0c;OPTimal replacement&#xff09;2.先进先出置换算法&#xff08;FIFO&#xff0c;First-In First-out replacement&#xff09;3.最近最少使用置换算法&#xff08;LRU&#xff0c;Least Recently Used replac…

操作系统教程总结

操作系统教程总结 一、基础知识点 1. 操作系统的资源管理技术 资源管理解决物理资源数量不足和合理分配资源这两个问题。 操作系统虚拟机为用户提供了一种简单、清晰、易用、高效的计算机模型。虚拟机的每种资源都是物力资源通过复用、虚拟和抽象而得到的产物。 虚拟机提供…

操作系统基础教程

目录 第二章&#xff1a;处理器管理 概览 进程调度的层次 进程的调度方式&#xff1a; 调度的评价标准&#xff1a; 典型的调度算法&#xff1a; 第三章&#xff1a;同步、通信和死锁 什么是进程同步&#xff1f; 什么是进程互斥&#xff1f; 进程同步的实现方式 进程…

linux fedora安装教程,u盘安装fedora图文教程

u盘安装fedora系统大家不知道尝试过没有&#xff0c;fedora作为一款被誉为可以超越windows的系统&#xff0c;它具有稳定、快速、开源的优秀品质。相信有很多朋友想要使用fedora系统却不知道如何u盘安装fedora&#xff0c;这是时候就需要小编使出吃奶的力气给大家带来u盘安装fe…

Fedora-i3折腾笔记

Fedora-i3折腾笔记 介绍安装 * 下载fedora-i3 * 制作安装盘 * 开始安装配置 * 添加软件源 * 高分辨率屏幕 * 触摸板 * neovim * 常用软件 * 输入法 * ohmyzsh&#xff08;终端美化&#xff09; * v2rayA * refind我的配置文件的使用 介绍 这里推荐下我个人的GitHub主页&#xf…

安装Fedora系统和一些系统配置

1&#xff0c;在VMware上安装Fedora工作站系统 新建Fedora虚拟机系统&#xff0c;配置好内存、处理器、硬盘、CD、网络配置等参数。 配置内容配置2GB处理器2硬盘20GB网络模式桥接模式&#xff08;自动&#xff09;系统版本Fedora-Workstation-Live-x86_64-30-1.2 &#xff08…

安装Fedora 36 Server

How to Install Fedora 36 Server with Screenshots Fedora 36针对桌面、服务器和云环境以及物联网发布&#xff0c;在本教程中&#xff0c;我们将通过屏幕截图了解如何安装Fedora 36服务器的各个步骤。 服务器版有一些重要的改进&#xff0c;在我们继续安装步骤之前&#xf…

fedora下载中的kde、xfce、workstation区别

简介 在fedora的官网下载中有workstation&#xff08;工作站版&#xff09;、server&#xff08;服务器版&#xff09;、IOT&#xff08;物联网版本&#xff09; 个人开发着首选工作站版&#xff0c;然后到清华找镜像&#xff0c;发现了还有两&#xff1f;&#xff1f;啥玩意 …

Fedora-14源配置

By: Ailson Jack Date: 2022.11.26 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/149.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

Fedora添加国内源

1. 下载配置文件 // 阿里源 root# curl -o /etc/yum.repos.d/fedora.repo http://mirrors.aliyun.com/repo/fedora.repo/repo/fedora.repo root# curl -o /etc/yum.repos.d/fedora-updates.repo http://mirrors.aliyun.com/repo/fedora-updates.repo // 清华源 root# curl -o …

VMware安装Fedora 35 Workstation及使用体验

一、Fedora Fedora为硬件、云和容器创建了一个创新的、免费的和开源的平台&#xff0c;使软件开发人员和社区成员能够为他们的用户构建定制的解决方案。 Fedora Linux&#xff08;第七版以前为Fedora Core&#xff09;是由Fedora项目社区开发、红帽公司赞助&#xff0c;目标是…