王朝网络
分享
 
 
 

FreeBSD核心完全探讨与解析

王朝system·作者佚名  2008-05-19
宽屏版  字体: |||超大  

1.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的配置fileLINT

kernel组合功能的网罗的的配置file

下面4个是对配置很有必要的的依赖data fileMakefile.386

config生成的Makefile file的template.

devices.i386

对于unix filesystem可能的block型的device名字和major号的对照表

files.i386

记录kernel功能组合的基础上,依赖于pc/at机器的功能名称和各种功能实现的source codefile的名字表。

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核心探讨

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

-------------------------------------------------------------

disk

no used

label

-------------------------------------------------------------

<-boot-|<---------boot2--------------|

|<--unix file system--

FreeBSD用的block#0--#14的15个block里面,含有读入freebsd的程序,bootease只在block#0里面,在15个block中并没有。它的作用

。读入mbr,找freebsd的分区

。读入最初的15个block,到物理内存中0x0001000

。跳转到相当于block#2的内存位置

然后,屏幕表示为:

。。。

。。。

boot:

(参数说明略)

它的source是/usr/src/sys/i386/boot/biosboot,make之后,生成两个文件:

boot1,boot2分别写入block#1,block#2--#14中。一般,一个物理的unix分区理论上可以有8个,比如swap,unix system等。

boot2部分是boot program,它读入kernel的文件名和option。然后

。找boot label指定的分区。

。构造unix filesystem,找指定的kernel

。从开始执行文件,text,data的顺序向物理内存读入。对bss清零。

。以option的选择,向开始位置跳转。

1.3.2

kernel的初始化动作

boot program执行之后,转向kernel的text段开始进行初始化,即先执行locore.s的text段。因此是虚拟内存还没有发生作用,locore.s的开始部分必须对offset进行补正。locore.s的作用是

。保存从boot program过来的option

。设定虚拟的stacker

。检测cpu的module

。对自己的bss空间进行0初始化

。为使虚拟内存工作,要保证最少的管理信息。然后是虚拟空间动作。也就是,调用cpu有强的依赖关

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有