#include
int main()
{
char boot_buf[512];
int floppy_desc, file_desc;
file_desc = open(“./bsect”, O_RDONLY);
read(file_desc, boot_buf, 510);
close(file_desc);
boot_buf[510] = 0x55;
boot_buf[511] = 0xaa;
floppy_desc = open(“/dev/fd0”, O_RDWR);
lseek(floppy_desc, 0, SEEK_SET);
write(floppy_desc, boot_buf, 512);
file_desc = open(“./sect2”, O_RDONLY);
read(file_desc, boot_buf, 512);
close(file_desc);
lseek(floppy_desc, 512, SEEK_SET);
write(floppy_desc, boot_buf, 512);
close(floppy_desc);
}
在上一期中,我曾经介绍过如何操作能启动的软盘 。现在这一个过程稍微有点不同,首先把由bsect.s编译出来的可执行文件bsect拷贝至软盘的启动扇区 。然后再把由sect2.s产生的可执行文件sect2拷贝至软盘的第二个扇区 。把上述文件置于同一目录之下,然后分别对其进行编译,方法如下所示:as86 bsect.s -o bsect.o
ld86 -d bsect.o -o bsect
对sect2.s文件重复以上的操作,得出可执行文件sect2 。编译write.c,插入软盘后执行write文件,命令如下所示:cc write.c -o write
./write
下一步我们要做的事情
从软盘启动以后,可以看到显示出来的字符串 。这是使用了BIOS中断来完成的 。下一期要做的事情是在这个操作系统中实现实模式向保护模式的转换 。
现在,这个操作系统已经越来越接近当年Linus Torvalds的那个具有“历史意义”的Linux内核了 。因此,要马上把这个系统切换到保护模式之下 。什么是保护模式自从1969年推出第一个微处理器以来,Intel处理器就在不断地更新换代,从8086、8088、80286,到80386、80486、奔腾、奔腾Ⅱ、奔腾4等,其体系结构也在不断变化 。80386以后,提供了一些新的功能,弥补了8086的一些缺陷 。这其中包括内存保护、多任务及使用640KB以上的内存等,并仍然保持和8086家族的兼容性 。也就是说80386仍然具备了8086和80286的所有功能,但是在功能上有了很大的增强 。早期的处理器是工作在实模式之下的,80286以后引入了保护模式,而在80386以后保护模式又进行了很大的改进 。在80386中,保护模式为程序员提供了更好的保护,提供了更多的内存 。事实上,保护模式的目的不是为了保护程序,而是要保护程序以外的所有程序(包括操作系统) 。简言之,保护模式是处理器的一种最自然的模式 。在这种模式下,处理器的所有指令及体系结构的所有特色都是可用的,并且能够达到最高的性能 。保护模式和实模式从表面上看,保护模式和实模式并没有太大的区别,二者都使用了内存段、中断和设备驱动来处理硬件,但二者有很多不同之处 。我们知道,在实模式中内存被划分成段,每个段的大小为64KB,而这样的段地址可以用16位来表示 。内存段的处理是通过和段寄存器相关联的内部机制来处理的,这些段寄存器(CS、DS、SS和ES)的内容形成了物理地址的一部分 。具体来说,最终的物理地址是由16位的段地址和16位的段内偏移地址组成的 。用公式表示为:物理地址=左移4位的段地址 偏移地址 。在保护模式下,段是通过一系列被称之为“描述符表”的表所定义的 。段寄存器存储的是指向这些表的指针 。用于定义内存段的表有两种:全局描述符表(GDT)和局部描述符表(LDT) 。GDT是一个段描述符数组,其中包含所有应用程序都可以使用的基本描述符 。在实模式中,段长是固定的(为64KB),而在保护模式中,段长是可变的,其最大可达4GB 。LDT也是段描述符的一个数组 。与GDT不同,LDT是一个段,其中存放的是局部的、不需要全局共享的段描述符 。每一个操作系统都必须定义一个GDT,而每一个正在运行的任务都会有一个相应的LDT 。每一个描述符的长度是8个字节,格式如图3所示 。当段寄存器被加载的时候,段基地址就会从相应的表入口获得 。描述符的内容会被存储在一个程序员不可见的影像寄存器(shadow register)之中,以便下一次同一个段可以使用该信息而不用每次都到表中提取 。物理地址由16位或者32位的偏移加上影像寄存器中的基址组成 。实模式和保护模式的不同可以从图1和图2中很清楚地看出来 。
推荐阅读
- 多久算拖欠工资
- Win10中出现事件查看器自动跳出具体处理步骤
- 国内首款自动对焦200万像素手机K750c上市
- 索爱推出专为中国移动定制的全能音乐娱乐手机K758c
- win7系统中将打印机驱动卸载具体操作流程
- iphone中更换自己喜欢铃声具体操作步骤
- 360杀毒中禁止软件自动开启具体方法介绍
- 鳄鱼是什么动物 鳄鱼是什么
- 临时工就可以不签订劳动合同吗
- 苹果手机只有震动没有铃声怎么回事
