电脑技术学习

FreeBSD 4.0 Kernel Hacking Guide--i386/i386/m

dn001
getmemsize(),;1419行.;找出并计算所有可用之记忆体,;并保留;msgbuf
(保留在;avail_end;後面,;MSGBUF_SIZE;大小).


init386(),;1802行.;参数;first;为未使用的;free;mem;addr;(physfree).

1824-1825行,;preload_bootstrap_relocate(),;kern/subr_module.c,;234行,;
relocate;预先载入(preload)的;kernel;module.;执行;loader;的动作,
修改;module;的;address;depend;资料.

1839-1860行,;设定;gdt;(global;descriptor;table).;由於;gdt;的格式较为
杂,;因此有所谓的;soft_segment_descriptor;(ssd),
i386/include/segments.h,;165行,;gdt_segs;就是
ssd;;list,;让;gdt;较容易操作.;因此在;1853-1860行,;必需进行
转换动作,;由;ssdtosd(),;i386/i386/support.s,;157行,;从;ssd;转换
成;CPU;所能接受的;segment;descriptor;格式.

1862-1864行,;load;gdt,;使刚设好的;gdt;发生作用.;lgdt(),;i386/i386/support.s,
1521行.

1885-1894行,;设定;ldt.

1897-1923行,;设定;idt.
所有的;idt;entry;都指向;vector;routines,;i386/i386/exception.s,
122行.;每一个;trap;or;fault;都会有对应的;entry;point,;作为实
际;isr;和;cpu;之间介面.;关於上述介面,;另见专文.

1928行,;cninit(),;console;初始化.

1932行,;isa_defaultirq(),;i386/isa/intr_machdep.c,;219行.;设定;isa;device
所使用的;irq;(设定;icu;8259),;并设定对应的;isr.

1948-1955行,;设定并安装;tss.

1971行,;getmemsize(),;i386/i386/machdep.c,;1419行,;找出并计算所有可用之
memory,;并保留;msgbuf.;getmemsize;会设立几个;global;变数.
physmem 实际可用的;page;数目.
Maxmem physcial;memory;address;的最大值.
phys_avail list;of;可用的;mem;block.
avail_start 由;pmap_bootstrap().
avail_end 最大可用之;physcial;memory;address.
所有的分配都必需小於这个位址.

1976-1979行,;msgbuf;initialization.

1982-1995行,;install;a;call;gate;for;system;call.

1999-2008行,;setup;process;0.

标签: