2019-2020-1 20175218 《信息安全系统设计基础》第1周学习总结
2019-2020-1 20175218 《信息安全系统设计基础》第1周学习总结
教材学习内容总结
第一章 计算机系统漫游
-
源程序就是一个由值0和1组成的位序列。程序中的某些文本字符就是字节,每个字节由8个位组成。
-
只有ASCII字符构成的文件称为文本文件,所有其他文件都称为二进制文件。
-
编译系统
- 预处理器(cpp)————将源程序进行修改,将.c文件转换成.i文件。命令示例(-E):gcc -E hello.c -o hello.i - 编译器(ccl)————将.i文件转换成.s文件。命令示例(-S):gcc -S hello.i -o hello.s - 汇编器(as)————将文件翻译成机器语言指令。命令示例(-c):gcc -c hello.s -o hello.o - 链接器(ld)————生成可执行目标程序。命令示例:gcc hello.o -o hello
- 以上4步可以通过命令(gcc hello.c -o hello)一步实现
- 第3步中,可以输入objdump -d hello.o查看文件
- 所有文件都有后,通过输入 ./ + 文件名 实现运行
-
系统的硬件组成:
- 总线
- I/O设备
- 主存
- 处理器
-
Amdahl定律
- 加速比:S=1/((1-α)+α/k)
-
系统的存储设备形成层次结构:CPU寄存器在顶部,然后是多层的硬件高速缓存存储器、DRAM主存和磁盘存储器。其中,位于更高层的存储设备比低层的存储设备要更快。
-
操作系统内核提供的三个基本的抽象:
- 文件是对I/O设备的抽象
- 虚拟内存是对主存和磁盘的抽象
- 进程是处理器、主存和I/O设备的抽象
-
-I参数:.h文件放入include中, .c文件放入src中。由 gcc *c -o main (一起编译所以.c文件)后找不到 head.h 文件。原因是 head.h 文件放到了另一个文件夹中,编译器找不到。此时,输入 gcc -I /头文件所在路径 *.c -o main 指明路径即可。
-
gdb:
- 功能
- 启动程序,并且可以设置运行环境和参数来运行指定程序
- 让程序在指定断点处停止执行
- 对程序作出相应调整,这样就能纠正一个错误后继续调试
- 常用命令
- gdb l ———— 列出文件的代码清单
- gdb display ———— 设置一些自动显示的变量,当程序停住时,或者在单步跟踪时,这些变量会自动显示
- gdb p ———— 显示指定变量
- gdb c ———— 继续执行,直到下一个断点或程序结束
- gdb b ———— 在指定函数,或指定行,或条件,或临时断点处停止
- gdb s ———— 相当于“Step Into”
- gdb n ———— 相当于“Step Over”
- gdb q ———— 退出gdb调试
- 功能
-
makefile隐含规则:它是一种惯例,make会按照这种“惯例”自动运行,就算我们在Makefile中没有书写这样的规则
第七章 链接
-
链接可以在编译时由静态编译器来完成,也可以在加载时和运行时由动态链接器来完成。
-
链接器处理称为目标文件的二进制文件,有三种形式:可重定位的、可执行的和共享的。
-
链接器的两个主要任务是符号解析和重定位。
-
动态链接器:
- 重定位 libc.so 的文本和数据到某个内存段 - 重定位 libvector.so 的文本和数据到另一个内存段 - 重定位 prog21 中所有对由 libc.so 和 libvector.so 定义的符号的引用
- 通过以上重定位可完成链接任务
教材学习中的问题和解决过程
- 问题1:
在学习gcc的时候,提到了静态数据库和动态数据库,一下没太懂它们的意思。
- 问题1解决方案:
上网发现了一个大佬在CSDN上写了一篇关于它们的介绍——点击进入链接,大致就了解了一些:
静态库:
是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为”.a”。
动态库:
与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为”.so”,gcc/g++在编译时默认使用动态库。无论静态库,还是动态库,都是由.o文件创建的。
- 问题2:
在看教程的第七章第十节的动态链接共享库时,不理解共享库实现共享的两种方式。
- 问题2解决方案:
这个问题还没有完全解决,主要是感觉第七章内容学起来有些艰难,以及很多知识点都不太理解。在网上看到了一个随笔,是关于Linux共享库、静态库、动态库的详细介绍的,我看了之后,还是不太理解,但稍微了解到了这三个库的基本知识。点击进入链接
代码调试中的问题和解决过程
-
问题1:没有安装gcc
-
问题1解决方案:直接根据提示install就行
-
问题2:git push失败
-
问题2解决方案:
(1)试试强制 git push ,结果还是不行
(2)系统提示不同步,所以先pull,再合并后进行push,即先输入 git pull --rebase origin master ,然后输入 git push -u origin master ,即可。
代码托管
上周考试错题总结
- 无
其他(感悟、思考等,可选)
- 感觉第七章学起来有些艰难
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 99/99 | 2/2 | 22/22 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:20小时
-
实际学习时间:22小时
-
改进情况:无
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)