头歌操作系统 课堂练习3.1:进程的描述与状态 答案
·
第1关:任务寄存器(TR)的分析
编程要求
根据相关知识,回答问题:(将答案填写在/data/workspace/myshixun/第一关.txt中)
1 号进程的任务状态段(TSS)的地址是多少?1 号进程的核心栈栈底的位置是多少?
1 号进程运行时,任务寄存器(TR)的值是多少?它指向的任务状态段描述符的值是多少?该描述符里记录的任务状态段起始地址是多少?
先配置版本内核1
cp /data/workspace/myshixun/exp1/1.tgz ~/os/
cd ~/os/linux-0.11-lab/
tar -zxvf ../1.tgz
rm -rf cur
ln -s 1 cur
cd 1/linux
make
cd ../..
启动虚拟机
./rungdb
./mygdb
在gdb调试器:
b task1
c
p *current
p/x current->tss
p ¤t->tss
quit
启动dbg调试器:
./rundbg
在dbg调试器中输入:
b 0x7985
c
sreg
x/14wx 0x5cc0
第2关:1 号进程的状态变化
编程要求
根据相关知识,回答问题:(将答案填写在/data/workspace/myshixun/第二关.txt中)1 号进程第一次由睡眠态变为就绪态时:
系统处于几号进程的上下文(或者说,当前进程是几号进程)?
内核的函数调用栈中的底层函数是什么?内核处于哪种控制流(选择:系统调用、中断、异常)?
后续回到用户态时,恢复点的位置是什么?以前的断点位置是什么?
该版本内核使用与第一关相同的版本1内核,详细环境配置操作请移步本文章第一关~
在gdb调试器中:
b sys_pause if current->pid==1
b sched.c:120 if p->pid ==1
c
display current->state
n
c
p p->pid
p p->state
bt
disable
finish
list
finish
x/3i $eip
si
si
x/28i $eip
b *0x77dd
c
si
disassemble
info registers
quit
更多推荐
已为社区贡献8条内容
所有评论(0)