MacOS环境-手写操作系统-03-突破512字节的限制

简介: MacOS环境-手写操作系统-03-突破512字节的限制

突破512字节的限制

文章写于两年前的 MacBookAir(2015)

目前笔者为 MacBookPro M1 (抽查了部分 都运行正常)

Github项目地址: https://github.com/wdkang123/MyOperatingSystem

MacOS X86架构(x新版的arm架构的我没有 所以大家自行测试)

VirtualBox

C/C++环境 (Xcode必装)


1.简介

当前我们的系统内核 必须在虚拟软盘的第一扇区 由于第一个扇区只有512个字节


因此 系统内核不能超过512个字节


但是添加功能之后 512字节远远不够 要想超过512


具体做法就是 做一个内核加载器 放入到第一扇区


加载器加载内存后 再将软盘加载到系统中去 然后 跳转到内核的加载地址


2.boot.asm

假定我们把编译好的内核代码写入软盘的第1柱面 第2扇区


那么具体代码如下

org  0x7c00;

LOAD_ADDR  EQU  0X8000

entry:
    mov  ax, 0
    mov  ss, ax
    mov  ds, ax
    mov  es, ax
    mov  si, ax

readFloppy:
    mov          CH, 1        ;CH 用来存储柱面号
    mov          DH, 0        ;DH 用来存储磁头号
    mov          CL, 2        ;CL 用来存储扇区号

    mov          BX, LOAD_ADDR       ; ES:BX 数据存储缓冲区

    mov          AH, 0x02      ;  AH = 02 表示要做的是读盘操作
    mov          AL,  1        ; AL 表示要练习读取几个扇区
    mov          DL, 0         ;驱动器编号,一般我们只有一个软盘驱动器,所以写死   
                               ;为0
    INT          0x13          ;调用BIOS中断实现磁盘读取功能

    JC           fin

    jmp          LOAD_ADDR



fin:
    HLT
    jmp  fin

readFloppy 这段代码从软盘的1柱面,2扇区,将内核读取到系统内存的0x8000处,读取成功后,通过一个jmp 跳转到内核的加载地址,将机器的控制权转交给内核。我们看看内核代码,kernel.asm:

org   0x8000

entry:
    mov  ax, 0
    mov  ss, ax
    mov  ds, ax
    mov  es, ax
    mov  si, msg


 putloop:
    mov  al, [si]
    add  si, 1
    cmp  al, 0
    je   fin
    mov  ah, 0x0e
    mov  bx, 15
    int  0x10
    jmp  putloop

fin:
    HLT
    jmp  fin

  msg:
     DB   "This is Hello World from kernel"

3.编译

我们的内核很简单 只不过打印一句:“This is Hello World from kernel”


我们对其进行编译

nasm kernel.asm -o kernerl.bat
nasm boot.asm -o boot.bat

打开java工程 对其进行处理:

 public void makeFllopy()   {
        writeFileToFloppy("kernel.bat", false, 1, 2);
        floppyDisk.makeFloppy("system.img");
 }

运行之后 生成 system.img


装载运行 即可看到


如果内核大小超过512字节,我只要在加载器中多读取几个扇区,就可以将内核加载进系统内存了,由此,通过内核加载器这个二传手,我们能够有效的突破512字节的大小限制,今后我们在内核中添加各种操作系统功能时,系统内核肯定是远远不止512字节的。

相关文章
|
1天前
|
存储 C语言 iOS开发
MacOS环境-手写操作系统-48-让内核从错误中恢复
MacOS环境-手写操作系统-48-让内核从错误中恢复
9 0
|
1天前
|
存储 API C语言
MacOS环境-手写操作系统-46,47-C语言开发应用程序
MacOS环境-手写操作系统-46,47-C语言开发应用程序
8 0
|
1天前
|
编译器 API C语言
MacOS环境-手写操作系统-45-C语言开发应用程序
MacOS环境-手写操作系统-45-C语言开发应用程序
10 0
|
1天前
|
小程序 iOS开发 MacOS
MacOS环境-手写操作系统-44-运行简单的程序
MacOS环境-手写操作系统-44-运行简单的程序
7 0
|
1天前
|
存储 Java iOS开发
MacOS环境-手写操作系统-43-dir命令的实现 和 文件写入
MacOS环境-手写操作系统-43-dir命令的实现 和 文件写入
9 0
|
2月前
|
关系型数据库 MySQL 数据库
【Mac os系统】安装MySQL数据库
本文详细介绍了在Mac OS系统上安装MySQL数据库的步骤,包括下载、安装、配置环境变量、启动服务、授权设置以及解决常见问题,并提供了一些常用的MySQL命令。
104 0
【Mac os系统】安装MySQL数据库
|
3月前
|
Linux 虚拟化 iOS开发
部署06--MacOS安装VMware Fusion安装
部署06--MacOS安装VMware Fusion安装
|
2月前
|
测试技术 Linux 虚拟化
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
详细的VMware虚拟机安装macOS Big Sur的保姆级教程,包括下载VMware和macOS镜像、图解安装步骤和遇到问题时的解决方案,旨在帮助读者顺利搭建macOS虚拟机环境。
68 3
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
|
2月前
|
虚拟化 数据安全/隐私保护 iOS开发
VMware——安装MacOS 系统教程(仅供学习交流)
VMware——安装MacOS 系统教程(仅供学习交流)
55 4
|
4月前
|
Java Shell 开发工具
03. 【Java教程】在 MacOS 上安装 Java
03. 【Java教程】在 MacOS 上安装 Java
44 1