自己动手写操作系统学习笔记1

序言

      首先,在自己动手写操作系统这本书中,很多图和章节都可以在IA的架构说明书中找到相应的原型,而且几乎是一模一样,有兴趣的可以去看看IA32架构的说明书手册,共有三册。不过,在这里,这本书作者把操作系统的相关东西组织得不错,说这些,只是让读这本书的人有一种平和的心态去学习操作系统。因为他没有我们想象的那么可怕,因为书中的大部分内容在网上都已查阅 得到。当然要系统掌握好这些东西这要有良好的计算机系统知识,汇编语言是必不可少的。上面说了点自己的见解,下面转入正题,希望初学的人少走弯路。

1. boot sector 
      在我们接通电源打开计算机时,系统会加电自检,自检什么呢?系统加电时cpu会自动进行复位,把相关的寄存器设置成默认值,在IA32架构下,eip被设置为如下值:0000FFF0H,CS的值看起来是这个样子的:Selector=F000H,Base=FFFF0000H,Limit=FFFFH,Attribute=Present,R/W,Accessed,cr0可能会被设置成如下值:0x60000010。从cr0的值可以知道,系统加电后CPU工作在实模式下(PE位为0)。从eip和cs的值我们知道,加电后CPU执行的第一条指令是:F000H:FFF0H,这条指令一般存在boot rom中,此条指令一般是一条跳转指令,主要完成CPU外围设备的初始化,一旦完成后,系统接着会搜索可用的设备(根据BIOS的设置)寻找开始512字节,如果发现其是以0xAA55结束的话,则把其读入内存位置:0x0000:0x7C00处,然后开始执行。这就是为什么书上的事例代码要从0x7C00处开始的缘故。好了,到这里,计算机已经开始转入我们自己写的操作系统了,另外,书中的代码如果要在DOS下运行,需要把org 07C00h改为org 0100h,这样做的目的是因为在DOS下,装载程序会事先创建一个称为程序段前缀(PSP)256字节的数据区,用来和被装载的程序通信,具体的细节请查验相关资料。而0100h刚好是256个字节的处,这也是代码段开始执行处。 
       说完程序的加载运行,让我们看看BIOS的10号中断处理子程序的显示功能。这里10号中断有很多子程序,书中用到了13子程序,此子程序就是显示字符串的,其中的参数如下:ES:BP=串地址;CX=串长度;DH=起始行;DL=起始列;BH=页号;BL=属性;AH=子程序编号,这里为13;这里BL是这样子定义的:闪烁 背景红 背景绿 背景蓝 高亮 前景红 前景绿 前景蓝(顺序为高字节到低字节)。这样BL=0Ch,二进制为:1100,由其定义可知为黑底高亮红字。 
2.开发环境的搭建 
         下载一个virtual pc 2007装上,具体的安装这里不用多说了,然后准备好Readhat9,按书上的操作新建一个虚拟的PC,然后按书上的操作安装Redhat9就行了,不过有一点,在创建完虚拟PC后,依次点击Edit->Setting->Networking,在右边的面板里选择两个(做多四个)network adapter,第一个用 NAT,第二个用你自己的本地网卡。安装完后如果共享不了windows的共享文件夹,可能是windows的139或445端口没开,也可能是linux本身的网络有问题,如果是eth0检测失败,可以在登录linux后,vi /etc/sysconfig/network-scripts/ifcfg_eth0,在文件的最后加入check_link_down (){return 1;}然后按书上的方法mount Windows的共享文件夹到linux的一个本地目录下。如果想每次开机都自动mount,那么可以vi /etc/rc.d/rc.local,然后在文件的末尾加入mount命令即可。 
        下面是PCDOS的安装,从网上下载一个msdos7.1,一般是软盘镜像的,从软盘启动,按提示安装好。然后安装dos-additions,首先关机,把dos-additions连接到软盘或CD连接,注意请选择启动时connect cd或connect floppy选框。然后启动装好的DOS,系统会提示安装dos-additions。按其提示装好。到这里可以按照书上的方法共享windows的共享文件夹了。但是如果这时我们直接执行.com程序(书上的例子),则会发生错误。那是因为系统装了EMM的缘故,这是一个用来扩展DOS功能,他可以让DOS访问更大的内存地址空间。这里关掉它就行了。方法如下,启动完系统后,在命令提示符下输入edit config.sys,把有EMM的那一行用#注释掉即可。在我的机子上就是这么做的。 
       好了,开篇就写到这里,下次准备进入保护模式了............

你可能感兴趣的:(操作系统,操作系统,sharpui,界面,dui,gdi)