多核操作系统实践 实验一Word格式文档下载.docx
- 文档编号:19027467
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:14
- 大小:22.79KB
多核操作系统实践 实验一Word格式文档下载.docx
《多核操作系统实践 实验一Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《多核操作系统实践 实验一Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
sudoapt-getinstallpkg-config
7.installgtk2.0
sudoapt-getinstalllibgtk2.0-dev
8.
Downloadthebochsfromourteacher'
swebsite.Thenextractittoyourfavouritefolder.
9.
Compilethebochs
Gotothefolderthatyouplacethebochsthen
Typecommand:
./configure--prefix=/usr--enable-disasm--enable-debugger
Iwillinstallbochsinusr.ifinstallinotherfolder,youmayhavetosettheenviromnent.
make
wait.......
sudomakeinstall
10.
CompiletheJOS
Downloadthelab1.tar.gzfromourteacher'
swebsite
Extractthem.
Ifyouwanttousegmaketypecommand:
ln-s/usr/bin/make/usr/bin/gmake
Ifyouusemakethenyouhavenoneedtodothestepabove
Gotothefolderlab1
typecommand:
make
ortype:
gmake
11.
Editthebochsconfigfile.bochsrc
Thisfileisinthefolderlab1,butitishidden.Youmustcheckedthe"
ShowHiddenfiles"
(文件是隐藏的,要显示隐藏文件才能看到)
---------------------------------------------------------------------
Openitandfindthestring:
ata0-master:
type=disk,mode=flat,path="
./obj/kern/bochs.img"
cylinders=100,heads=10,spt=10
Repalceitwith:
*******/obj/kern/bochs.img"
*******isthepathoftheobjfolder'
path.
Example:
/home/zdc/labs/lab1/lab1/obj/kern/bochs.img
Findthestring:
romimage:
file=$BXSHARE/BIOS-bochs-latest,address=0xf0000
Replaceitwith:
file=$BXSHARE/BIOS-bochs-latest
12
Runbochs
Thentype2tosetthepathofthe.bochsrc
Ifsuccesstype6
ThenweruntheJOSsuccessfully.
GoodLuck!
!
SecondwefinishtheExercise
Exercise1
Learnthex86assemberLanguage
LearntheAT&
TassemberLanguage
Exercise2
Familiarwithbochsandbochsdebugger.
Themostusefulcommandsares,c,u/naddress,q,baddress
Exercise3
Understandwhatisthebiosdoing.
Biossetstheidtfirst,initializesthekeydevicesandthenjumpto0000:
7c00
启动的过程:
CPU加电后从地址0xfffffff0开始运行,这个地址指向BIOS的ROM部分。
BIOS先设置中断表,然后检测和初始化关键设备,然后把硬盘的第一个块加载到0x00007c00运行(这里就是我们JOS的boot)。
^^^^^^^^^^^^^^^^^^^^^^^^^PART2^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
第二部分主要是要我们熟悉bochs的调试工作。
Exercise4
Setthebreakpointin0000:
7c00andtraceit.
Wecanusesperformthecommandstepandstep.
Orwecanuseu/naddresstoseeninstructionsstartfromtheaddress
Thedebuggercommandsimples:
b0x0000:
0x7c00
s
u/100x00:
Tracebootmain()linenumber:
100inboot.S
Throughreadtheboot.asm,Wecanknowthatfunctionbootmainwillbecalledin0x0000:
0x7c45(0008:
00007c45).Sowesetthebreakpointin0x0000:
0x7c40,thentypes.Orsetthebreakpointin0x0000:
0x7c45directly.
Tracereadseg()反汇编boot/main.ocommandobjdump-Smain.o-Mintel>
main.asm
Throughtracingtheinstructionsperforminbootmain(),wefindthefunctionreadseg()iscalledat0x0000:
0x7d33(0008:
00007d33).
Startat7ce3:
55push%ebp
endat0x7d21
readsect()
Thisfunctioniscalledat[0x00007d0f]0008:
00007d0f,theinstructionis:
call7c81<
readsect>
Startat"
7c81:
55push%ebp"
Thisfunctionendat[0x00007ce2]0008:
00007ce2(unk.ctxt):
ret
Afterthisfunction,theesppointto0x7d14
Thenperformserveralinstructionsuntil"
7d16:
39fbcmp%edi,%ebx"
Thisinstructionjudgethecondictiontodecidewhethercontinuetojumpto0x7d06,therearesomeinstructionstosettheparametersforreadsectfrom7d06to7d0f
Atexactlywhatpointdoestheprocessortransitionfromexecuting16-bitcodetoexecuting32-bitcode?
movl%cr0,%eax
orl$CR0_PE_ON,%eax
movl%eax,%cr0
[0x00007c2a]0000:
7c2a(unk.ctxt):
movcr0,eax
thisinstructionstarttheprotectmodule
Whatisthelastinstructionofthebootloaderexecuted,andwhatisthefirstinstructionofthekernelitjustloaded?
Thebootloader'
slastinstructionis:
[0x00007d84]0008:
00007d84(unk.ctxt):
calleax
Andthefirstinstructionofkernelis:
[0x0010000c]0008:
0010000c(unk.ctxt):
movwordptrds:
0x472,0x1234
Howdoesthebootloaderdecidehowmanysectorsitmustreadinordertofetchtheentirekernelfromdisk?
Wheredoesitfindthisinformation?
Thefunctionreadseg(ph->
p_va,ph->
p_memsz,ph->
p_offset);
'
ssecondparametertellthebootloaderhowmanysectorsshuoldbeload.
TheSECTSIZEis512defineinthemacro.
Exercise5
FamiliarwithClanguage
Youcandisplayafulllistofthenames,sizes,andlinkaddressesofallthesectionsinthekernelexecutablebytyping:
objdump-h********/lab1/obj/kernel/kernel
notthecommand:
i386-jos-elf-objdump-hobj/kern/kernel
Youcanseetheentrypointbytypethecommand:
objdump-f********/lab1/obj/kernel/kernel
i386-jos-elf-objdump-fobj/kern/kernel
Wecanseethestartadressis0xf010000c,not0x0010000c,Why?
Exercise6
ThebootloaderloadtheElfto0x10000(fourzero),itinitializethestructsofElf.h.
Whyaretheydifferent?
Becausethebootloadermovethedatato0c00100000(fivezero,ThestructsofElf.hincludethisvalue)usingthecodeinmain.c:
ph=(structProghdr*)((uint8_t*)ELFHDR+ELFHDR->
e_phoff);
eph=ph+ELFHDR->
e_phnum;
for(;
ph<
eph;
ph++)
readseg(ph->
Thereis
0x00100000<
bogus+0>
:
0x1badb0020x000000030xe4524ffb0x7205c766
0x00100010<
bogus+16>
0x340000040x15010f120x0010f0180x000010b8
atthesecondbreakpoint.
Theyareexecutableinstructionsforkernel.
Butwhy0xf0000000==0x00000000
JusttypehelpinourJOS,wewillknowtheture.
_startf010000c(virt)0010000c(phys)(Theloadaddressandthelinkaddress)Whydon'
tyoutellmefirst!
Exercise7
Ifichangethe"
0x7c00"
to"
0x8c00"
inboot/makefrag,thebochswillrunthebiosprogrammetoinitializetheidtandthedevices.
Butwhenfinishedinitialization,thenjumpto0x7c00continuetoruntheinstructions,thebochswillrestartthesimulator.
Why?
Becausethebootloaderisloadat0x8c00.Thereisnoinstructionsat0x7c00.
^^^^^^^^^^^^^^^^^^^^^^^^^PART3^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Exercise8
Restartbochs,Weshouldsetthebreakpointin0x0010000c(b0x0010000c),andthentypec.
NowwetypestoseetheJOS'
kernelrunstepbystep.
Iamsoluckthatiseetheinstrctionlgdtin[0x00100015]0008:
00100015.
SowecananswertheproblemofExercise8.
After[0x00100015]0008:
00100015thenewmappingtakeseffect.(segmentation,page?
weshouldseethecrregistorstojudgeit).
Openthefileentry.Sthatinthefolderkern.
Wecommentout(注释)theinstruction"
lgdtRELOC(mygdtdesc)"
using#.
Andthensaveit.
Andthengotothefolderlab1typethecomment:
make
Thenwerunthebochsandsetthebreakpointat0x00100000c
andtypec,thentypes,s,s,.....
Wecanseethat
(0)[0x00100020]0008:
00100020(unk.ctxt):
jmpfar0008:
f0100027;
ea270010f00800
<
bochs:
8>
s
Nextatt=274078546
bx_dbg_read_linear:
physicalmemoryreaderror(phy=0xf0100027,lin=0xf0100027)
9>
Becuasethenewgdtisn'
tloadedtothegdtr.
当进入保护模式之后,段寄存器的值都变成索引值通过gdt转换的。
Andthenthe0x0008indexthesegmentdescriptorisn'
tthethesegmentdescriptorwereallyneed.
Sothevirtualaddresstophysicaladdresschangeiserror(itchangetotheoldaddress),Sotheresultaboveappear.
Nowwerestoretheentry.S.
AndmaketheJOSagain.
ToseethesourceofJOS'
kernel,weneedtoinstallsomesoftwarelikesourceInsight,butinlinuxweusevim+cscopeinsteadofit.
1NowweneedtobuildtheindexinctagslikeSourceInsight.(Theteachersaysthatsourceinsightsimulatethectags,butnowiusectagstosimulatethesourceInsight,haha!
hehe!
:
-))
Gothetherootcatalogueoflab1,andthentypethecommand:
ctags-R
Thentheindexisestablished.Butwewilluseitlater.
Exercise9
Therelationshipamonginprintfmt.c,printf.candconsole.cis:
printfmt->
vprintfmt->
putch->
cputchar->
cons-putc->
lpt-putc,cga-putc(setthecharcolor)
(printfmt.c..........)(printf.c)(console.c................................)
Thefillinthefunction"
vprintfmt"
is:
case'
o'
//Replacethiswithyourcode.
//putch('
X'
putdat);
num=getuint(&
ap,lflag);
base=8;
gotonumber;
//break;
Thespecificationofconsole.c
question1:
lpt_putc()usinginI/Oprarallelportpragraming
cag_putc()setthecharandchar'
colourthatdisplayonthescreen.15-8bitsaretheattributeofthechar,8-0bitsarethechar'
sasciicode.
cons_putc()printthecharonthescreenusethefuntionabove.
cputchar()callthefunctioncons_putc()
cprintf->
vcprintf->
lpt-putc,cga-putc(setthecharcolor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多核操作系统实践 实验一 多核 操作系统 实践 实验