zoukankan      html  css  js  c++  java
  • 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小时

    • 改进情况:无

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

    参考资料

  • 相关阅读:
    20191317王鹏宇第四章学习笔记
    20191317王鹏宇2.3.1测试
    树莓派openeuler安装openssl及其实践
    树莓派实验指导第三章实验
    树莓派openeuler的安装以及ukui桌面的安装并安装远程桌面vnc
    20191317王鹏宇鲲鹏服务器测试
    反汇编测试
    信息安全系统设计与实现第八周:《Unix/Linux系统编程》第五章学习笔记
    团队作业三
    信息安全系统设计与实现第七周:《Unix/Linux系统编程》第四章学习笔记
  • 原文地址:https://www.cnblogs.com/cjy-123/p/11567567.html
Copyright © 2011-2022 走看看