diff --git a/lab0/lab0_2_2_1_lab_steps.md b/lab0/lab0_2_2_1_lab_steps.md index 4a3773a..636f430 100644 --- a/lab0/lab0_2_2_1_lab_steps.md +++ b/lab0/lab0_2_2_1_lab_steps.md @@ -16,4 +16,4 @@ 8. 如果实现基本正确(即看到步骤6的输出都是 OK)则生成实验提交软件包,例如执行:make handin 9. 对于本校学生,把生成的使用提交软件包和实验报告上传到指定的git server,便于助教和老师查看。 -> 另外,可以通过”make qemu”让OS实验工程在qemu上运行;可以通过”make debug”或“make debug-nox “命令实现通过gdb远程调试 OS实验工程;通过"make grade"可以看自己完成的对错情况。 +> 另外,可以通过“make qemu”让OS实验工程在qemu上运行;可以通过“make debug”或“make debug-nox”命令实现通过gdb远程调试 OS实验工程;通过“make grade”可以看自己完成的对错情况。 diff --git a/lab0/lab0_2_2_3_install.md b/lab0/lab0_2_2_3_install.md index 096abbd..ee95be4 100644 --- a/lab0/lab0_2_2_3_install.md +++ b/lab0/lab0_2_2_3_install.md @@ -17,7 +17,7 @@ Ubuntu是图形界面友好和易操作的linux发行版,但有时只需执行 chy@chyhome-PC:~$ ls file1.txt file2.txt file3.txt tools -你所看到的这些被称为命令终端提示符,它表示计算机已就绪,正在等待着用户输入操作指令。以我的屏幕画面为例,“chy"是当前所登录的用户名,“laptop”是这台计算机的主机名,“~”表示当前目录。此时输入任何指令按回车之后该指令将会提交到计算机运行,比如你可以输入命令:ls 再按下回车: +你所看到的这些被称为命令终端提示符,它表示计算机已就绪,正在等待着用户输入操作指令。以我的屏幕画面为例,“chy”是当前所登录的用户名,“laptop”是这台计算机的主机名,“~”表示当前目录。此时输入任何指令按回车之后该指令将会提交到计算机运行,比如你可以输入命令:ls 再按下回车: ls [ENTER] @@ -230,7 +230,7 @@ CLI 不是系统的串行接口。您可以在执行其他命令时给出系统 可通过执行如下命令避免显示乱码中文。在一个shell中,执行: - export LANG=”” + export LANG="" 这样在这个shell中,output信息缺省时英文。 diff --git a/lab0/lab0_2_3_1_3_gcc_inline_asm.md b/lab0/lab0_2_3_1_3_gcc_inline_asm.md index 4b21c5a..4af0bce 100644 --- a/lab0/lab0_2_3_1_3_gcc_inline_asm.md +++ b/lab0/lab0_2_3_1_3_gcc_inline_asm.md @@ -9,7 +9,7 @@ GCC 提供了两内内联汇编语句(inline asm statements):基本内联 asm("nop"); asm("cli"); -"asm" 和 "\_\_asm\_\_" 的含义是完全一样的。如果有多行汇编,则每一行都要加上 "\n\t"。其中的 “\n” 是换行符,"\t” 是 tab 符,在每条命令的 结束加这两个符号,是为了让 gcc 把内联汇编代码翻译成一般的汇编代码时能够保证换行和留有一定的空格。对于基本asm语句,GCC编译出来的汇编代码就是双引号里的内容。例如: +“asm” 和 “\_\_asm\_\_” 的含义是完全一样的。如果有多行汇编,则每一行都要加上 “\n\t”。其中的 “\n” 是换行符,“\t” 是 tab 符,在每条命令的 结束加这两个符号,是为了让 gcc 把内联汇编代码翻译成一般的汇编代码时能够保证换行和留有一定的空格。对于基本asm语句,GCC编译出来的汇编代码就是双引号里的内容。例如: ``` asm( "pushl %eax\n\t" "movl $0,%eax\n\t" diff --git a/lab0/lab0_2_3_1_4_extend_gcc_asm.md b/lab0/lab0_2_3_1_4_extend_gcc_asm.md index 61e3190..4515347 100644 --- a/lab0/lab0_2_3_1_4_extend_gcc_asm.md +++ b/lab0/lab0_2_3_1_4_extend_gcc_asm.md @@ -22,13 +22,13 @@ asm [volatile] ( Assembler Template [ : Clobbers ] ]) ``` -其中,\_\_asm\_\_ 表示汇编代码的开始,其后可以跟 \_\_volatile\_\_(这是可选项),其含义是避免 “asm” 指令被删除、移动或组合,在执行代码时,如果不希望汇编语句被 gcc 优化而改变位置,就需要在 asm 符号后添加 volatile 关键词:asm volatile(...);或者更详细地说明为:\_\_asm\_\_ \_\_volatile\_\_(...);然后就是小括弧,括弧中的内容是具体的内联汇编指令代码。 "" 为汇编指令部分,例如,"movl %%cr0,%0\n\t"。数字前加前缀 “%“,如%1,%2等表示使用寄存器的样板操作数。可以使用的操作数总数取决于具体CPU中通用寄存器的数 量,如Intel可以有8个。指令中有几个操作数,就说明有几个变量需要与寄存器结合,由gcc在编译时根据后面输出部分和输入部分的约束条件进行相应的处理。由于这些样板操作数的前缀使用了”%“,因此,在用到具体的寄存器时就在前面加**两个“%”**,如**%%cr0**。输出部分(output operand list),用以规定对输出变量(目标操作数)如何与寄存器结合的约束(constraint),输出部分可以有多个约束,互相以逗号分开。每个约束以“=”开头,接着用一个字母来表示操作数的类型,然后是关于变量结合的约束。例如,上例中: +其中,\_\_asm\_\_ 表示汇编代码的开始,其后可以跟 \_\_volatile\_\_(这是可选项),其含义是避免 “asm” 指令被删除、移动或组合,在执行代码时,如果不希望汇编语句被 gcc 优化而改变位置,就需要在 asm 符号后添加 volatile 关键词:asm volatile(...);或者更详细地说明为:\_\_asm\_\_ \_\_volatile\_\_(...);然后就是小括弧,括弧中的内容是具体的内联汇编指令代码。 “” 为汇编指令部分,例如,"movl %%cr0,%0\n\t"。数字前加前缀 “%”,如%1,%2等表示使用寄存器的样板操作数。可以使用的操作数总数取决于具体CPU中通用寄存器的数 量,如Intel可以有8个。指令中有几个操作数,就说明有几个变量需要与寄存器结合,由gcc在编译时根据后面输出部分和输入部分的约束条件进行相应的处理。由于这些样板操作数的前缀使用了“%”,因此,在用到具体的寄存器时就在前面加**两个“%”**,如**%%cr0**。输出部分(output operand list),用以规定对输出变量(目标操作数)如何与寄存器结合的约束(constraint),输出部分可以有多个约束,互相以逗号分开。每个约束以“=”开头,接着用一个字母来表示操作数的类型,然后是关于变量结合的约束。例如,上例中: :"=r" (__dummy) “=r”表示相应的目标操作数(指令部分的%0)可以使用任何一个通用寄存器,并且变量__dummy 存放在这个寄存器中,但如果是: - :“=m”(__dummy) + :"=m"(__dummy) “=m”就表示相应的目标操作数是存放在内存单元__dummy中。表示约束条件的字母很多,下表给出几个主要的约束字母及其含义: diff --git a/lab1/lab1_2_1_6_ex6.md b/lab1/lab1_2_1_6_ex6.md index 4c78f3f..9ce6dbf 100644 --- a/lab1/lab1_2_1_6_ex6.md +++ b/lab1/lab1_2_1_6_ex6.md @@ -4,12 +4,12 @@ 1. 中断描述符表(也可简称为保护模式下的中断向量表)中一个表项占多少字节?其中哪几位代表中断处理代码的入口? 2. 请编程完善kern/trap/trap.c中对中断向量表进行初始化的函数idt_init。在idt_init函数中,依次对所有中断入口进行初始化。使用mmu.h中的SETGATE宏,填充idt数组内容。每个中断的入口由tools/vectors.c生成,使用trap.c中声明的vectors数组即可。 -3. 请编程完善trap.c中的中断处理函数trap,在对时钟中断进行处理的部分填写trap函数中处理时钟中断的部分,使操作系统每遇到100次时钟中断后,调用print_ticks子程序,向屏幕上打印一行文字”100 ticks”。 +3. 请编程完善trap.c中的中断处理函数trap,在对时钟中断进行处理的部分填写trap函数中处理时钟中断的部分,使操作系统每遇到100次时钟中断后,调用print_ticks子程序,向屏幕上打印一行文字“100 ticks”。 > 【注意】除了系统调用中断(T_SYSCALL)使用陷阱门描述符且权限为用户态权限以外,其它中断均使用特权级(DPL)为0的中断门描述符,权限为内核态权限;而ucore的应用程序处于特权级3,需要采用`int 0x80`指令操作(这种方式称为软中断,软件中断,Tra中断,在lab5会碰到)来发出系统调用请求,并要能实现从特权级3到特权级0的转换,所以系统调用中断(T_SYSCALL)所对应的中断门描述符中的特权级(DPL)需要设置为3。 -要求完成问题2和问题3 提出的相关函数实现,提交改进后的源代码包(可以编译执行),并在实验报告中简要说明实现过程,并写出对问题1的回答。完成这问题2和3要求的部分代码后,运行整个系统,可以看到大约每1秒会输出一次”100 ticks”,而按下的键也会在屏幕上显示。 +要求完成问题2和问题3 提出的相关函数实现,提交改进后的源代码包(可以编译执行),并在实验报告中简要说明实现过程,并写出对问题1的回答。完成这问题2和3要求的部分代码后,运行整个系统,可以看到大约每1秒会输出一次“100 ticks”,而按下的键也会在屏幕上显示。 diff --git a/lab7/lab7_5_appendix.md b/lab7/lab7_5_appendix.md index e0df0bb..8aa5e2e 100644 --- a/lab7/lab7_5_appendix.md +++ b/lab7/lab7_5_appendix.md @@ -1,4 +1,4 @@ -## 附录:执行 ”make run-matrix”的大致的显示输出 +## 附录:执行 “make run-matrix”的大致的显示输出 ``` (THU.CST) os is loading ... diff --git a/lab8/lab8_2_1_exercises.md b/lab8/lab8_2_1_exercises.md index ca57c27..934422e 100644 --- a/lab8/lab8_2_1_exercises.md +++ b/lab8/lab8_2_1_exercises.md @@ -20,7 +20,7 @@ #### 练习2: 完成基于文件系统的执行程序机制的实现(需要编码) -改写proc.c中的load\_icode函数和其他相关函数,实现基于文件系统的执行程序机制。执行:make qemu。如果能看看到sh用户程序的执行界面,则基本成功了。如果在sh用户界面上可以执行”ls”,”hello”等其他放置在sfs文件系统中的其他执行程序,则可以认为本实验基本成功。 +改写proc.c中的load\_icode函数和其他相关函数,实现基于文件系统的执行程序机制。执行:make qemu。如果能看看到sh用户程序的执行界面,则基本成功了。如果在sh用户界面上可以执行“ls”,“hello”等其他放置在sfs文件系统中的其他执行程序,则可以认为本实验基本成功。 请在实验报告中给出设计实现基于”UNIX的硬链接和软链接机制“的概要设方案,鼓励给出详细设计方案