自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 [从零构建操作系统]09 程序段(SECTION)及elf文件介绍

.rodata中放置的是常量值,例如字符串的内容“abcdef”,而作为字符串的变量则放在data数据段,所以.data中的字符串变量的值实际保存了指向字符串首个字符的地址,因此就能索引到字符串的内容,这应该也是为什么c代码中,数组变量可以表示数组首地址的原因一些未初始化的变量则放在.bss段,它们默认的值是0。其中,各程序段的起始地址,是可以通过链接器的链接脚本进行指定的。链接脚本就是.lds结尾的文件。

2025-12-15 16:59:35 316

原创 [从零构建操作系统]08 函数调用时栈的底层行为解析

黄色:调用者自己存的私房钱(局部变量)。橙色:调用者打包给被调用者的礼物(参数)。蓝色:回家的路标(返回地址)。绿色:被调用者用来定位的基准桩(旧 ebp)。被调用者(test)站在绿色的位置,往回伸手(ebp + 偏移),就能拿到别人传给它的参数。

2025-12-13 21:27:02 666

原创 [从零构建x86操作系统]07 内联汇编、内联函数、inb,outb简介

(1)inboutb这俩就是x86 里专门用来和“端口(I/O port)打交道”的指令inb:从某个 I/O 端口读 1 个字节到 CPU 里outb:把 CPU 里的1 个字节写到某个 I/O 端口这些端口一般是网卡、硬盘控制器、串口、VGA 等外设暴露出来的“寄存器地址”。内存映射 I/O(MMIO)像普通内存一样访问,用mov指令,地址是某段物理地址映射的。端口映射 I/O(Port-mapped I/O)给设备分配一个端口号(0~65535),用专门的inout指令访问。inboutb。

2025-12-10 21:51:53 212

原创 [从零构建x86操作系统] 06 x86保护模式下编程(4)----任务切换

背后的逻辑是隔离用户态和内核态有各自的空间。一个任务中正常进入的时候是用户态,但是如果碰到任务中有系统调用的那种代码,就会把当前状态保存到dpl0的栈空间,然后切换运行在内核态,运行过程中的变量等用的也是dpl0的栈空间,当系统调用等高特权代码执行完毕,又会从dpl0的栈空间将之前的用户态的各个状态寄存器恢复。

2025-11-19 15:44:38 353

原创 [从零构建x86操作系统] 04 x86保护模式下编程(2)---进入保护模式

在前面的文章中,已经通过BIOS中断(INT13)实现磁盘读写,将磁盘第二扇区的内核代码加载到内存中去。接下来就是完成实模式到保护模式的切换。流程如下(1)先关闭中断,防止其它中断(如定时器等)突然打乱寄存器配置cli(2)让GDTR寄存器找到gdt表的位置,使用lgdt命令其中,gdt_desc是描述gdt表的。GDTR寄存器48位,高32位指定GDT表的基地址,地16位指定表的大小(3)让CR0寄存器的最低位PE置1,标识进入保护模式(4)跳转刷新cs寄存器,固定需要这一步骤。

2025-11-18 09:35:38 194

原创 [从零构建x86操作系统] 05 x86保护模式下编程(3)--分页机制介绍

如何将4GB的应用程序,运行在4MB的内存上?真实的物理地址空间受限,无法识别高地址,因此引入虚拟内存技术。将4MB的真实物理内存虚化出来一片很大的虚拟内存空间。程序所能看到的只是虚拟内存,而真实的物理内存其实还是4MB.

2025-11-17 21:42:03 887

原创 [常见问题-解决贴] 02 vscode在.S汇编文件中无法打断点

在设置里面,搜索breakpoint,需要勾选“允许在任何文件中设置断点”

2025-11-17 17:31:55 115

原创 [从零构建x86操作系统] 03 x86保护模式下编程(1)---系统启动简介

前面的文章提到,使用QEMU模拟器来模拟x86系统环境,在VScode中配置文件.json中会配置启动的一些选项。系统启动的核心过程就是QEMU 模拟硬件 + BIOS 初始化 + MBR 引导 + 内核自加载,一步步从 “硬件启动” 过渡到 “你的内核运行”。Launch.json代码如下: 至于说到的QEMU模拟+BIOS启动,其实都是有QEMU模拟器来完成的。x86下CPU 启动后会进入 16 位实模式,BIOS 完成硬件初始化后,会从磁盘的「MBR 扇区」(第 0 扇区,512

2025-11-14 17:29:34 995

原创 [常见问题-解决贴] 01 主机与VMware虚拟机共享文件夹:解决虚拟机找不到共享文件夹问题

查看 (注意:挂载后必须要再次进入/mnt/hgfs才能查看到共享的文件夹),就能看到windows下设置的共享文件夹了。跟着网上教程的一般步骤设置好共享文件夹的位置,但是在虚拟机里总是找不到共享文件夹。-o allow_other 表示普通用户也能访问共享目录。/mnt/hgfs/ 是挂载点,我们也可以修改为其它挂载点。

2025-11-12 14:36:40 156

原创 [从零构建x86操作系统]02 cpu的实模式和保护模式介绍

20 世纪 70 年代末至 80 年代,最经典的芯片8086(Intel发布)于1978年问世,当时内存成本极高,1MB 内存已是大型系统的配置(这是),而8086 的 20 根地址线对应的寻址空间是:2²⁰ = 1048576 字节 = 1MB。对应的就是20根地址线的最大寻址空间。所以可以说8086为了追求极致的内存空间,已经拉满了当时时代下的最大配置。但是这就会面临一个问题。

2025-11-11 10:33:37 556

原创 [从零构建x86操作系统]01 环境构建

安装c、c++扩展插件。

2025-11-10 21:58:17 273

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除