• 操作系统开发系列—9.Loader


    一个操作系统从开机到开始运行,大致经历“引导—>加载内核入内存—>跳入保护模式—>开始执行内核”这样一个过程。也就是说,在内核开始执行之前不但要加载内核,而且还有准备保护模式等一系列工作,如果全都交给引导扇区来做,512字节很可能是不够用的,所以不妨把这个过程交给另外的模块来完成,我们把这个模块叫做Loader。引导扇区负责把Loader加载入内存并且把控制权交给它,其他工作放心地交给Loader来做,因为它没有512字节的限制,将会灵活得多。

    为了操作方便,把软盘做成FAT12格式。这样对Loader以及今后的Kernel(内核)的操作将会非常简单易行。

    引导扇区是整个软盘的第0个扇区,FAT12格式如下:

    loader源码:

    org	0100h
    
    	mov	ax, 0B800h
    	mov	gs, ax
    	mov	ah, 0Fh				; 0000: 黑底    1111: 白字
    	mov	al, 'L'
    	mov	[gs:((80 * 0 + 39) * 2)], ax	; 屏幕第 0 行, 第 39 列
    
    	jmp	$				; 到此停住
    

    然后执行命令

    nasm boot.asm -o boot.bin

    nasm loader.asm -o loader.bin

    先用bximage生成一个软盘映像,然后在linx下这样做,因为我的linux里只有/mnt/hgfs/

    dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

    sudo mount -o loop a.img /mnt/hgfs/

    sudo cp loader.bin /mnt/hgfs/ -v

    sudo umount /mnt/hgfs/

    运行结果如下:

    看到了字符“L”。

    如果把前面学习的时钟中断程序按照上面的方法来运行也可以,如下

    可以在虚拟机上运行,说明已经突破了512字节限制。

    那么现在我们假设已经有了一个内核,Loader肯定要加载它入内存,而且内核开始执行的时候肯定已经在保护模式下了,所以,Loader要做的事情至少有两件:

    1.加载内核入内存

    2.跳入保护模式

    一个码农的日常 

    源码

  • 相关阅读:
    webpack之模块(七)
    webpack之配置(六)
    webpack之插件(五)
    webpack之loader(四)
    webpack之模式(三)
    webpack之输出(二)
    webpack之入口起点(一)
    Dynamics CRM Tips
    Step by Step 开发dynamics CRM
    Loading Ring 使用文档
  • 原文地址:https://www.cnblogs.com/joey-hua/p/5392376.html
Copyright © 2020-2023  润新知