Lab0
Thinking 0.1
思考下列有关 Git 的问题:
- 在前述已初始化的 ~/learnGit 目录下,创建一个名为 README.txt 的文件。执行命令 git status > Untracked.txt(其中的 > 为输出重定向,我们将在 0.6.3 中详细介绍)。
- 在 README.txt 文件中添加任意文件内容,然后使用 add 命令,再执行命令 git status > Stage.txt。
- 提交 README.txt,并在提交说明里写入自己的学号。
- 执行命令 cat Untracked.txt 和 cat Stage.txt,对比两次运行的结果,体会README.txt 两次所处位置的不同。
- 修改 README.txt 文件,再执行命令 git status > Modified.txt。
- 执行命令 cat Modified.txt,观察其结果和第一次执行 add 命令之前的 status 是否一样,并思考原因。
不一样
原因:
因为创建README.txt文件时,README.txt处于未跟踪的状态,不能跟踪该文件的变化
在执行git add命令后,可将文件提交到暂存区,变为暂存状态,即可跟踪README.txt,故再对README.txt文件进行修改后,可跟踪其的变化。
Thinking 0.2
仔细看看0.10,思考一下箭头中的 add the file 、stage the file 和commit 分别对应的是 Git 里的哪些命令呢?
add the file: git add <file>
stage the file: git add <file>
commit: git commit -m "message"
Thinking 0.3
思考下列问题:
代码文件 print.c 被错误删除时,应当使用什么命令将其恢复?
代码文件 print.c 被错误删除后,执行了 git rm print.c 命令,此时应当使用什么命令将其恢复?
无关文件 hello.txt 已经被添加到暂存区时,如何在不删除此文件的前提下将其移出暂存区?
- git checkout — print.c
- git reset HEAD print.c
- git checkout — print.c
- git rm —cached print.c
Thinking 0.4
思考下列有关 Git 的问题:
- 找到在 /home/22xxxxxx/learnGit 下刚刚创建的 README.txt 文件,若不存在则新建该文件。
- 在文件里加入 Testing 1,git add,git commit,提交说明记为 1。
- 模仿上述做法,把 1 分别改为 2 和 3,再提交两次。
- 使用 git log 命令查看提交日志,看是否已经有三次提交,记下提交说明为 3 的哈希值a。
- 进行版本回退。执行命令 git reset —hard HEAD^ 后,再执行 git log,观察其变化。
- 找到提交说明为 1 的哈希值,执行命令 git reset —hard
后,再执行 git log,观察其变化。现在已经回到了旧版本,为了再次回到新版本,执行 git reset —hard ,再执行 git log,观察其变化。
vim README.txt:进入README.txt编辑
git add README.txt
git commit README.txt “[123]”
git log: 提交说明为”1 2 3“均会显示
- git reset —hard HEAD^ + git log: 仅显示”1 2“的提交说明
- git reset —hard e27c0fddee6312baa600c4ab7a462ffad96e1abc(提交说明为“1”的哈希值) + git log:仅显示”1“的提交说明
- git reset —hard bf6889e550c6a9c0266d99ee648bfd37a7e00(提交说明为“3) + git log: 提交说明为”1 2 3“均会显示
Thinking 0.5
执行如下命令, 并查看结果
- echo first
- echo second > output.txt
- echo third > output.txt
- echo forth >> outp
1 | #生成output.txt文件,将second重定向至output.txt |
Thinking 0.6
使用你知道的方法(包括重定向)创建下图内容的文件(文件命名为 test),将创建该文件的命令序列保存在 command 文件中,并将 test 文件作为批处理文件运行,将运行结果输出至 result 文件中。给出 command 文件和 result 文件的内容,并对最后的结果进行解释说明(可以从 test 文件的内容入手). 具体实现的过程中思考下列问题: echoecho Shell Start 与 echo
echo Shell Start
效果是否有区别; echo echo $c>file1与 echoecho $c>file1
效果是否有区别.
commend:
test:
result:
$[[]]: 数值计算
>|>>重定向
echo echo Shell Start
与echo echo Shell Start
效果是否有区别
- 没有区别
- 两者都是直接标准输出echo Shell Start
echo echo $c>file1
与echo echo $c>file1
效果是否有区别
- 有区别
- 前者将echo 3($c的值)输出到file,后者标准输出echo $c>file1
Thinking A.1
在现代的 64 位系统中,提供了 64 位的字长,但实际上不是 64 位页式存储系统。假设在 64 位系统中采用三级页表机制,页面大小 4KB。由于 64 位系统中字长为8B,且页目录也占用一页,因此页目录中有 512 个页目录项,因此每级页表都需要 9 位。因此在 64 位系统下,总共需要 3 × 9 + 12 = 39 位就可以实现三级页表机制,并不需要 64位。
现考虑上述 39 位的三级页式存储系统,虚拟地址空间为 512 GB,若三级页表的基地址为 PTbase,请计算:
- 三级页表页目录的基地址。
- 映射到页目录自身的页目录项(自映射)。
假设39位的[0:11],[12:20],[21:30],[31,39]依此表示页,三级页表,二级页表,一级页表
- 如果三级页表页目录的基地址表示二级页表的基地址:$ PT_{base} + (PT_base >> 12)*8$
- 如果三级页表页目录的基地址表示二级页表的基地址:$ PT_{base} + (PT_base >> 12)8 +(PT_{base} >> 21)8 $
- $ PT_{base}[31:39] $表示映射到页目录自身的页目录项(一级页表)内的偏移量
难点分析
实验体会
lab0课下:借助实验讲解视频,实验指导书巩固linux操作命令,Vim常用功能,GCC编译器的使用,Makefile的编写,Git管理,重定向和管道,shell脚本编程等知识点,利用上述知识点基本覆盖课下实验,但是遇到gcc编译并链接两个不同文件夹的.c文件时,需使用-I选线,引入源文件的文件夹。
lab0-exam:lab0课下实验的知识点覆盖这一部分练习
注意生成文件的位置
在实验的准备阶段仔细阅读实验相关要求,例如执行命令bash init.sh
lab0-extra:仔细理解题意,实验中需要的完成的任务较为简单,对
sort
,grep
,awk
三条命令的使用在.sh文件(shell脚本文件)编写命令时需注意传入参数的使用,不要直接用文件名,例如grep ${CMD} ${FILE}($CMD—寻找字符串 $FLIE—目标文件)
变量赋值:nowpid=$(awk -F “ “ ‘$2==’$nowpid’ {print $3}’ ${FILE})