BUAA OS 实验 lab2笔记 1 minute read

#

思考题

Thinking 2.1

在C程序中,指针变量存储的地址是虚拟地址。MIPS汇编程序中lw和sw使用的是虚拟地址。

Thinking 2.2

1.

用宏实现链表的好处:可重用度高,避免了重复编写,使得源程序更加简洁、易读,便于重复利用。

2.

插入:

单向列表在链表中插入只需要修改两个指针。在链表头和链表尾插入,只需要修改一个指针

循环列表需要修改无论何处插入,都需要修改两个指针。

双向链表,在链表中插入需要修改四个指针,在头尾插入需要修改2两个指针。

Thinking 2.3

C为正确的

Thinking 2.4

1.

引用自网络上对ASID的解释:ASID唯一标识每个进程,并用于为该进程提供地址空间保护,当TLB尝试解析虚拟页码时,它确保当前正在运行的进程的ASID与与虚拟页面关联的ASID匹配。 如果ASID不匹配,则将该尝试视为TLB未命中 。

对于不同的进程,其相同的虚拟地址可能对应不同的空间,因此对于不同程序,TLB需要进行区分。因此引入ASIAD,在查找TLB,需要传入虚地址和对应的ASID,这样才能正确查找到对应的物理地址。因此ASID是必不可缺的。

2.

ASID 为11-6位,共6位,故能容纳不同地址空间的最大数量为64。

Thinking 2.5

1.

tlb_invalidate调用了tlb_out

2.

根据当前进程的状态,以虚拟地址和进程的ASID值为参数调用tlb_out完成对TLB对应内容的清除

3.

LEAF(tlb_out).set noreorder mfc0 t0, CP0_ENTRYHI //$t0 = $$EntryHi mtc0 a0, CP0_ENTRYHI //$EntryHi = $a0 nop /* Step 1: Use 'tlbp' to probe TLB entry */ /* Exercise 2.8: Your code here. (1/2) */ tlbp //利用EntryHi寄存器中值查找对应表项入口,并存入index寄存器 nop /* Step 2: Fetch the probe result from CP0.Index */ mfc0 t1, CP0_INDEX //$t1 = $index.set reorder bltz t1, NO_SUCH_ENTRY// if $t1 < 0, 代表前一步操作未找到相应页,跳转NO_SUCH_ENTRY.set noreorder mtc0 zero, CP0_ENTRYHI//$EntryHi = 0 mtc0 zero, CP0_ENTRYLO0//$EntryLo = 0 nop /* Step 3:... read more
			
BUAA OS 实验 lab1笔记 1 minute read

Lab1 实验报告

一、思考问题

Thinking 1.1

Thinking 1.1 请阅读附录中的编译链接详解,尝试分别使用实验环境中的原生 x86 工具 链(gcc、ld、readelf、objdump 等)和 MIPS 交叉编译工具链(带有 mips-linux-gnu前缀),重复其中的编译和解析过程,观察相应的结果,并解释其中向 objdump 传入的参 数的含义。

readelf读取目标文件相关信息。

image-20230309162327025

x86下解析结果(main函数)

hello1.o: 文件格式 elf64-x86-64Disassembly of section .text:0000000000000000 <main>: 0: f3 0f 1e fa endbr64 4: 55 push %rbp 5: 48 89 e5 mov %rsp,%rbp 8: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # f <main+0xf> f: 48 89 c7 mov %rax,%rdi 12: e8 00 00 00 00 call 17 <main+0x17> 17: b8 00 00 00 00 mov $0x0,%eax 1c: 5d pop %rbp 1d: c3 ret

mips环境下解析结果

hello2.o: 文件格式 elf32-tradbigmipsDisassembly of section .text:00000000 <main>:... read more
			
BUAA OS 实验 lab0笔记 less than 1 minute read

Lab0 实验报告

Thinking 0.1

Untracked.txt

image-20230227153352558

Staged.txt

image-20230227153343844

Modified.txt

image-20230227153336221

​ 三个文件如上图所示。

​ 对于Modified.txt,结果与第一次执行add命令之前的status完全不一样。未执行add之前,README位于未追踪Untracker区域。而add且commit之后再次修改,README处于未暂存的Modified区域。

Thinking 0.2

add the file:对应git add 命令,可以文件提交到暂存区

stage the file:也对于git add,但是针对于Modified区域文件

commit:对应git commit命令,提交修改。

Thinking 0.3

1.

使用

git checkout -- print.c

将print.c从暂存区恢复到工作区

2.

使用

git checkout HEAD print.c

将print.c从HEAD恢复到暂存区和工作区

3.

使用

git rm --cached print.c

Thinking 0.4

三次提交后的说明:

image-20230227172127044

reset后的log:

zhi

执行

git reset --hard c5eb447c967c57e99d683fdae0e0097bebd5fd6f

image-20230227184255896

再次执行

git reset --hard 4fbba005b28b1ef3b2eba31c1e0755dfaea2cb85

image-20230227184716902

Thinking 0.5

执行结果如:

image-20230227184916547

Thinking 0.6

上方为输出结果,下方为test内容

image-20230227191457859

echo为输出语句,没执行一句echo后,进行相应的赋值

echo echo Shell Start... read more