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 ,即可。

代码托管

statistics.sh脚本截图

上周考试错题总结

其他(感悟、思考等,可选)

  • 感觉第七章学起来有些艰难

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 99/99 2/2 22/22

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:20小时

  • 实际学习时间:22小时

  • 改进情况:无

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted @ 2019-09-22 15:05  20175218陈敬勇  阅读(184)  评论(0编辑  收藏  举报