LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1342|回复: 9

linux-0.0.1版中IDT表项设置分析。

[复制链接]
发表于 2003-5-25 02:15:16 | 显示全部楼层 |阅读模式
_set_gate()宏在文件include/asm/system.h中:
    #define _set_gate(gate_addr,type,dpl,addr) \
__asm__ ("movw %%dx,%%ax\n\t" \
    "movw %0,%%dx\n\t" \
    "movl %%eax,%1\n\t" \
    "movl %%edx,%2" \
    : \
    : "i" ((short) (0x8000+(dpl<<13)+(type<<8))), \
    "o" (*((char *) (gate_addr))), \
    "o" (*(4+(char *) (gate_addr))), \
    "d" ((char *) (addr)),"a" (0x00080000))
这里共输入5个数据(这里没有输出部),%1与gate_addr结合,%2与
(gate_addr+4)结合,它们都是内存单元;先将%%dx的低16位移入%%ax的低16位
(注意%%dx与%%edx的区别)。这样,在%eax中就形成了所需要的中断门的第一个
长整数,其高16位为_KERNEL_CS,而低16位为addr的低16位。接着把第一个输入
立即数(0x8000+(dpl<<13)+(type<<8)装入%%edx的低16位。这样,%%edx中高16
位为addr的高16位,而低16位的P位为1(因为是0x8000),DPL位段为DPL(因为
dpl<<3),而D位加上类型位段则为type(因为type<<8),其余各位皆为0。这就形
成了中断门中的第2个长整数。然后,将%eax 写入*gate_addr,而%%edx写入
*(gate_addr+4)。呵呵,效率高,但难得读懂。但对于像设置IDT表项一类并不
是平凡发生的操作,这样做是否值得牺牲可读性。。。(我想也没有多少人愿意
读这样很底层的东东,更谈不上维护了)
发表于 2003-5-25 09:00:19 | 显示全部楼层
有谁linux-0.0.1

编译成功的

成功了,也不能用......
发表于 2003-5-25 09:33:57 | 显示全部楼层
http://download.gro.clinux.org/lingix/Lingix-2003-3-3.zip

lingix

这个可以用grub来启动的....
 楼主| 发表于 2003-5-25 14:30:09 | 显示全部楼层
晕,仔细看看它的RELNOTES-0.01
发表于 2003-5-25 14:54:22 | 显示全部楼层
bochs中有人成功了

可我还是不行 .....
发表于 2003-5-25 17:59:15 | 显示全部楼层
1991 Linux-0.1 released... ( about 93K for linux-0.01.tar.gz ) RELNOTES-0.01
        Linux-0.01 was compiled with gcc-1.40 and released by Linus Torvalds
        Linux boots from floppy drive.

        - It was binary compatible with single threaded file system of mimix,
        - no message passing and linux used multithreaded filesystem instead,
        - true multi-tasking was available with a 'better" scheduler
        than that on mimix.
        -  Device drivers used interrupts which was not hidden.
        - There was no distinction in the kernel/fs/mm, and was all linked to the
        same heap and in its own subdirectory source tree and running
        in the same data/code space.

        - Simple memory management algorithm took advantage of page and segment faults
        features of the intel386 CPU.
        - linux partitions could be mounted from mimix but linux cound not mount mimix ( no mount command )
        - Linux' kernel goes into supervisor mode to solve the multirace conditions
        and deadlocks to access the multithreaded file system.

        - GNU provided the shell (bash), compilers and libraries.
发表于 2003-5-25 18:52:20 | 显示全部楼层
minix如何安装呢
不用floppy,




和虚拟器的

说说吧
 楼主| 发表于 2003-5-26 00:15:49 | 显示全部楼层
你可以到以下网站看看
http://asmcos.51.net/
我自己认为就因为0.0.1还没有自己的文件系统吧。所以不能在EXT2
下引导,必须要MINIX的文件系统支持。我只出于学习目的,分析代
码,所以没有去编译它。
发表于 2003-5-26 09:17:55 | 显示全部楼层
bochs我搞定了

下载两个文件

bochs和要模拟系统的文件(img)

动一下配置就可以了


................
发表于 2003-5-27 07:17:24 | 显示全部楼层
最初由 qing 发表
bochs我搞定了

下载两个文件

bochs和要模拟系统的文件(img)

动一下配置就可以了


................


我在vm可以启动1.0,可我需要0.0.1
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表