现在的位置: 首页 >> 操作系统 >> FreeBSD >> FreeBSD 核心 (1)
添加时间:2005-8-21 来源:网教中国 作者:
FreeBSD 核心 (1)

概述
FreeBSD可以在PC/AT兼容机器上运行。CPU是i386,i486,Pentium,
Pentium Pro以及其兼容芯片等。
1.1.1(略)
1,理论地址: 2个13 bit 长+32 bit 长
2,线形地址:32 bit 长的空间
3,物理地址:32 bit 长的空间
1.1.2进程的虚拟空间
1,text部分
这部分是执行文件的的text领域,也就是机器语言部分,对于这个
部分的空间在机器上的物理内存页是共有的,还有,这部分最后的变量
地址是etext。
2,data和bss部分
执行文件的data部分,也就是初始化的数据段和执行文件指定的内
存变量。内存变量在开始的时候以0填充。这一段空间可以读写。它的
边界也是以edata和end的地址做结尾。进程的malloc()等内存分配的
操作的时候,地址的增加方向向bss空间进行。
3,stack部分
也就是进程执行的时候的stack空间,这部分空间(从地址的最高位
开始可以伸缩),其对于物理内存,伸缩程度由核心自动执行。
1.2 kernel的configure
freebsd的kernel构成文件在/usr/src/sys的目录下面。下面的子目录做一个
介绍。
compile 编译核心的目录。
conf configure的目录。
ddb 核心调试的sounre code的目录。
dev 一部分的drivers的source code的目录。
gnu 浮点运算的仿真以及ex2fs文件系统的source code目录。
i386 依赖于pc/at机器的目录,以下介绍它的字目录。
apm suspend一些节电程序。
boot 不是kernel本身的东西,只是一些怎么从开机到读入kernel
的boot program的source code。
conf config的一些依赖data。
isa isa bus的驱动程序类的source code。
eisa eisa bus的驱动程序类的source code。
include 对pc/at的一些include files
i386 对pc/at的一些核心code
ibcs2,linux 使各类的os的执行文件在freebsd上执行的code
isofs/cd9660
cd-rom在unix文件系统上操作的的有关code
kern 核心code
libkern 核心库的source code
miscfs 实现unix文件系统的code
msdosfs 在unix上操作ms-dos文件系统的有关code
net 实现network功能的基本部分code
netatalk
实现appletalk network功能code
netinet 实现internet network功能的code
netipx 实现ipx功能的code
netns 实现ns network的code
netkey 实现网络加密部分的功能的code
nfs 实现nfs服务
pc98 对于pc98的支持
pccard 对pcmcia的支持
pci 对pci bus的驱动程序的source code
scsi 对cd-rom,hard disk,tape 等的scsi驱动程序的source code
sys 独立于机器体系结构的一部分code
ufs unix file system 的支持code
vm 虚拟内存管理的部分
1.2.1配置的操作----config command
在root权限下,config,make实行后,可以得到简单的kernel。
*configure file
移动到/usr/src/sys/i386/config看看。
GENERIC 从cd-rom等安装freebsd的时候对应于defaule kernel
的配置file
LINT kernel组合功能的网罗的的配置file
下面4个是对配置很有必要的的依赖data file
Makefile.386 config生成的Makefile file的template.
devices.i386 对于unix filesystem可能的block型的device
名字和major号的对照表
files.i386 记录kernel功能组合的基础上,依赖于pc/at
机器的功能名称和各种功能实现的source code
file的名字表。
options.i386 记录配置项目的表。
还有,majors.i386是记录对应驱动器的I/O表和major号的一个文件。
于核心配置没关系。
对于新的i/o设备,如果要做device driver,对pc/at,要在files.i386(没
有的话在/usr/src/sys/conf/files)追加相应的行,不然就不能把它加入
到核心里面。
追加的格式为
相对path名 optional device-name device-driver

对于配置文件,首先,要设置cpu,bus,i/o设备,多少用户等。例如对于GENERIC
machine "i386"
cpu "I386_CPU"
cpu "I486_CPU"
cpu "I586_CPU"
cpu "I686_COU"
ident GENERIC
maxusers 10
当作为server时候,应该把最大user设置大一点,以提高系统性能。
下一步,指定options,对于GENERIC
options MATH_EMULATE #support for x87 emulation
options INET #interNETworing
options FFS #Berkeley Fast Filesystem
options NFS #Network Filesystem
......
options指定的名字xxx等,如果在/usr/src/sys/conf/options或者在
/usr/src/sys/i386/conf/options.i386中记载的时候,应在对应的opt_XXX.h中写入
。没有的话,作为cc命令行的参数定义"-D"在Makefile里面追加。对于XXX的格式应该

相对path名 optional xxx
下一步,对于config
config kernel root on wd0
(略)
配置文件剩下的部分应该是bus,i/o等一些硬件配置,一般有controller,device,
disk,tape四类。例如
controller isa0
controller eisa0
controller pci0
等。
第二层的device和controller,记录了一些bus设备的连接。ISA的情况是
device device_name at isa? 参数
controller controller_name at isa? 参数
EISA和PCI就相对简单一点:
device device_name
controller controller_name
device_name里指定的设备名是,串口,并口,网络等装置。
第三层的disk和tape为
disk disk_name at 控制设备名 drive 号
tape tape_name at 控制设备名 drive 号
SCSI接口卡作为第二层的控制装置记录的同时
controller scbus0
作为通用的scsi控制设备。因此,对于它的hard disk,tape,cd-rom,mo设备,有
device sd0
device st0
device cd0
device od0
等,它可以自动识别和分配号码。
对于其他的scsi设备,有
device pt0 at scbus?
这些东西(bus,scsi,i/o),在生成的ioconf.c以及相应的include中有反映。
configure的最后,不是一些物理设备,而是kernel内部的一些软设置
pseudo-device 理论设备名
首先,要考虑以下两个设备:
pseudo-device pty 16 #ttys - can go as high as 256
pseudo-device log #syslog interface (/dev/klog)
network使用的场合,应该有下面两个
pseudo-device loop
pseudo-device ether
这种情况下,最好有
pseudo-device bpfilter 4 #berkeley packet filter
pseudo-device tun 1 #Tunnel driver ( PPP)
想做floppy的时候,要
pseudo-device vn #Vnode driver ( turns a file into a device)
(代续)



FreeBSD核心探讨(翻译)2

1.3 FreeBSD boot之前的工作
1.3.1pc/at机器的boot顺序
hard disk的最前面的一个block(512byte),叫做master boot recorder(MBR).这
里有启动限定的program和分区的信息。分区信息是指对于一个区是16byte长,最多
只能有4个区。16byte的内容是,分区哪里开始,哪里结束。哪种os,能否启动等。对
于freebsd,安装的时候向MBR写入了boot easy.
磁盘的结构如下图表示:
block Number
#0 #1 #2 ... #14 #15 #16 #17
-----------------------------------------------------

[1] [2] [3] [4]  下一页


上一篇:文件特殊权限的解释 下一篇:FreeBSD 核心 (2)
大部分文章摘自网上,如有侵犯您的权益请与我们联系,我们会第一时间进行处理,谢谢! [ 打印文章 ] [ 关闭窗口 ]
推荐文章
·FreeBSD handbook中文版 9 配制F
·FreeBSD 升级系统
·Ports & Package
·FreeBSD kernel 编译大法(二)ker
·FreeBSD 上使用Kerberos 5认证
·FreeBSD 5.x 中 gbfs 的修正,及
·FreeBSD 安装Linuxigd
·FreeBSD 使用cvsd创建安全的cvs
·FreeBSD trafcount命令介绍
·FreeBSD入门安装及汉化
相关文章
·FreeBSD4.8 IPFW How to!
·FreeBSD下的内存文件系统
·FreeBSD 核心 (2)
·FreeBSD内核定制参考
·freebsd系统日志与备份
·关于FreeBSD4.4网络源代码接口层
·FreeBSD 5.2.1 boot0(启动扇区代
·FreeBSD中的设备命名规则
·FreeBSD 5内核源代码分析之copyi
·FreeBSD 5内核源代码分析之系统
最新文章
·FreeBSD连载(94):基于NAT的负载
·FreeBSD连载(93):反向代理负载
·FreeBSD连载(92):基于DNS的负载
·FreeBSD连载(91):提升静态网页
·FreeBSD连载(90):单服务器性能
·FreeBSD连载(89):CGI和SSI的安
·FreeBSD连载(88):安全连接方式S
·FreeBSD连载(87):基于用户的访
·FreeBSD连载(86):对IP地址和域
·FreeBSD连载(85):配置Apache服(
Google