20145328《信息安全系统设计基础》课程总结

20145328《信息安全系统设计基础》课程总结

每周作业链接汇总

  • 第0周作业
  • 简要内容:翻阅课本内容,使用虚拟机安装linux系统,预习linux基础入门知识,关于学习资源的感想,提出问题。
  • 二维码:

  • 第1周作业
  • 简要内容:介绍Linux操作系统相关内容,包括一些核心的Linux命令:find/locate/cheat/grep/which/whereis,以及如何使用Linux中用户管理命令/系统相关命令/文件目录相关命令/打包压缩相关命令/比较合并相关命令/网络相关命令等
  • 二维码:

  • 第2周作业
  • 简要内容:介绍Linux系统下的开发环境,Vim的基本操作,gcc编译器的基本原理以及gcc编译器的常用选项,如何使用gdb进行调试,以及Makefile基本原理及语法规范,静态库和动态库的生成与调用方法,介绍链接的相关知识
  • 二维码:

  • 第3周作业
  • 简要内容:介绍二进制在计算机中的重要地位、布尔运算在C语言中的应用,介绍有符号整数、无符号整数、浮点数的表示,介绍补码的重要性、C语言中溢出、数据类型转换中的陷阱和可能会导致的漏洞,介绍“信息=位+上下文”。
  • 二维码:

  • 第5周作业
  • 简要内容:介绍X86汇编基础、ISA;介绍函数调用栈帧的概念、用GDB进行调试,总结教材第三章《程序的机器级表示》内容。
  • 二维码

  • 第6周作业
  • 简要内容:安装Y86处理器,了解ISA抽象,介绍流水线和实现方式,总结教材第四章《处理器体系结构》的内容。
  • 二维码:

  • 第7周作业
  • 简要内容:理解局部性原理和缓存思想在存储层次结构中的应用,介绍常见的存储技术(RAM、ROM、磁盘、固态硬盘等),介绍高速缓存的原理和应用,总结教材第六章《存储器层次结构》的内容。
  • 二维码:

  • 期中总结
  • 简要内容:复习Linux常用命令以及教材1-7章,总结自己新学到的知识点、自己的收获、自己的不足并提出课程建议和意见。
  • 二维码:

  • 第9周作业
  • 简要内容:介绍系统编程和系统调用的概念、系统编程错误处理的方式、Unix/Linux系统级I/O、RIO以及I/O重定向的方法,总结教材第10章《系统级I/O》和附录A的内容。
  • 二维码:

  • 第10周作业
  • 简要内容:实践常用指令的代码,加深对指令的理解
  • 二维码:

  • 第11周作业
  • 简要内容:介绍异常及其种类、进程和并发的概念、进程创建和控制的系统调用及函数,介绍数组指针、指针数组、函数指针、指针函数的区别,介绍信号机制、管道和I/O重定向,总结教材第八章《异常控制流》的内容,运行分析相关代码。
  • 二维码:

  • 第12周作业
  • 简要内容:复习前三周的知识,深入理解老师给的代码
  • 二维码:

  • 第13周作业
  • 简要内容:介绍三种并发的方式:进程、线程、I/O多路复用,介绍线程控制及相关系统调用、线程同步互斥及相关系统调用,总结教材第十一章《网络编程》、教材第十二章《并发编程》的内容, 运行并分析相关代码。
  • 二维码:

  • 第14周作业
  • 简要内容:介绍虚拟存储器的概念和作用、地址翻译的概念、存储器映射、动态存储器分配的方法、垃圾收集以及C语言中与存储器有关的错误,总结教材第九章《虚拟存储器》的内容,运行并分析相关代码。
  • 二维码:

实验报告链接汇总

  • 实验一 开发环境的熟悉
  • 简要内容:介绍Linux开发环境的配置和使用,使用Linux的arm编译,使用基于NFS方式的下载调试,以及嵌入式开发的基本过程。
  • 二维码:

  • 实验二 固件开发
  • 简要内容:分析02_pthread及03_tty中的代码,介绍怎样使用linux的armv4l-unknown-linux-gcc编译、使用基于NFS方式的下载调试以及嵌入式开发的基本过程。
  • 二维码:

  • 实验三 实时系统的移植
  • 简要内容:介绍安装ADS、安装GIVEIO驱动、安装JTAG驱动的正确方法,并介绍如何测试基本安装是否正确。
  • 二维码:

  • 实验四 驱动程序设计
  • 简要内容:介绍在LINUX下进行驱动设计的原理以及使用模块方式进行驱动开发调试的过程。
  • 二维码:

  • 实验五 网络通信
  • 简要内容:介绍在ARM开发板实现一个简单的WEB服务器的过程
  • 二维码:

代码托管链接

  • 代码托管链接→代码托管链接
  • git log格式化日志截图git log --pretty=format:"%h - %an, %ar : %s"

  • 代码量汇总

  • 代码托管二维码

  • 代码驱动的学习做到没有?

    • 算是做到了吧,从上个学期学java开始就是按照着代码驱动学习中的目录结构来进行代码的管理,只是在之前的学习中都是每周的代码一次性commit上去,慢慢地在学习中也发现这样的代码管理并没有起到很好的作用,也学会了规范的commit使用方式,虽然很繁琐但是的确很有用
  • 加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得

    • 在后面几周的学习当中代码量越来越大,比起最开始的也要复杂很多,有些地方光对着看是没法看懂的,需要自己去进行相应的改动才能更好地去理解。这个与使用的是什么编程语言无关,无论是在学习什么编程语言,最快的理解一段代码的方式就是对这段代码进行一些改动,然后去思考为什么改过之后的结果是这样的。
  • 实践上有什么经验教训

    • 多敲多运行多改动代码来对代码进行理解,只要你能够掌握这一段代码讲的是什么,为什么是这样,那么这段代码你就算是掌握了。

整体评价一下第0周作业中自己提出的问题是不是抓住了学习重点

整体来说提出的问题就是在没事找事做的样子,有很多东西都没有问到点子上,感觉就是对着目录来问,只看到了表面的东西,都是一些很大很宽泛的问题,很少有问到细节上面

回答一下第0周作业中自己提出的问题

  • 计算机系统应该是如何运行一个“hello,world”程序的?

    • gcc编译驱动程序读取源程序文件hello.c,通过预处理、编译、汇编、链接这四个阶段将源程序文件翻译成一个可执行目标文件。
  • 在计算机系统中是如何处理二进制数据的,在算法溢出的时候应该如何进行对应的处理?

    • 计算机将信息按位编码,利用不同的编码方式表示证书、实数和字符串,运算溢出可以改变数据定义的类型来解决,也可以使用无符号数和补码运算来满足整数运算的许多其他属性,包括结合律、交换律和分配率。
  • 程序在机器上是如何表示的?为何程序会出现缓冲区溢出等情况,如何减轻常见的代码安全所带来的威胁?

    • 程序在机器上是以汇编代码的形式进行表示的。通常在栈中分配某个字节数组来保存一个字符串,但是字符串的长度超出了为数组分配的空间。这就造成了缓冲区溢出,通过GCC中栈随机化、栈破坏检测、限制可执行代码区域等机制可以减轻常见的代码安全所带来的的威胁。
  • 处理器体系结构包含了什么?流水线化的思想将处理一条指令所需要的不同步骤实现为独立的阶段的原理是什么?

    • 指令体系结构(ISA);流水线化通过让不同的阶段并行操作,改进了系统的吞吐量性能。在任意一个给定的时刻,多条指令被不同的阶段处理。
  • 如何通过一个简单的变换就使程序变得高效?

    • 首先需要选择合适的算法和数据结构,其次必须写出编译器能够有效优化以转换成高效可执行代码的源代码。这个展开答可以说好多。。。剩下的基本上都在第五章里面。
  • 存储器的层次结构是什么?存储器有什么层次结构?作用是什么?

    • 答案如图所示
  • 链接的作用是什么?

    • 作用是将各种代码和数据部分收集起来并组合成为一个单一文件。

你有什么项目被加分,谈谈你的经验

这个学期的加分基本都是靠的优秀作业,而这部分优秀作业都是通过大量的实践拿到的,其实无论是上个学期的java还是这个学期的信息安全系统设计基础,都能够看出老师对于实践的重视,因为只有大量的实践你才能对一个知识掌握透彻,没有实践的话哪怕现在对于知识有所掌握,但并不深刻,过段时间可能就会忘了。

优秀作业

你有什么项目被扣分,谈谈你的教训

  • 第三周迟交作业,原因在于当周周末是国庆节假期,明明要外出,但是并没有提前完成作业内容,算是一个教训吧,以后尽量都尽早完成作业,别拖到最后再来赶。

课程收获与不足

自己的收获

  • 最大的收获在于能够熟练的掌握Linux环境下的Shell开发,比起上个学期对于git的认识也有所加深,对于实践的意义也有了更深的理解,更主要的在于,信息安全系统设计基础这门课像一根线一样将以前所学过的很多知识都串联在了一起,形成了一个良好的知识网络,而且也与这个学期所学的操作系统,信息安全技术有所关联,几门课相互对照之下,掌握的东西比单独学习要更加具体。

自己需要改进的地方

  • 对于学习的时间要进行更加细致的规划,不能再把很多东西都堆到要交之前再做,全部堆在一起又没有效率又影响学习效果,怎么算都是得不偿失。勉强交了个东西上去但实际上连自己心里的标准都没有达到,这样一来就很不划算。

如果有结对,写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议

  • 实验上面是通过结对来完成的,结对最大的意义在于不用全部的事情都积压在一个人身上来做,这样一来在学习的过程中就会比一个人要轻松一些,我在结对过程中主要负责的是硬件以及实验环境的搭建还有排查错误原因,在实验报告上面得到队友的帮助比较多,在结对的时候选择一个好的队友真的很重要,学会分工合作也很重要。

给学弟学妹们的学习建议

  • 关于每周一篇博客,长久以来,在各届学长学姐口口相传中已经被妖魔化了,但是实际上真的没有你们想象中的那么恐怖,更何况你再害怕也没有用,这门课你要想过每周一篇的博客肯定是必不可少的,与其抱着敷衍了事的心态去完成还不如认认真真的每周抽出一点时间来好好的把书看了,把博客写了。这样一来每周有了一个固定的学习时间,对于纠正进大学之后并不良好的学习习惯有一种很好的促进作用。
  • 关于学习时间,无论是大二下还是大三上,周一到周五的课余时间还是比较多的,将学习时间分配在这些时间上要比把每一周的任务都堆积在周末一起完成要好得多,老师要求的东西尽量达到,毕竟肯定不会坑你们,有些东西看上去短期内用不上,但实际上掌握之后的好处远远大于你能想到的。
  • 在学习的过程中多实践绝对不会吃亏。

如果重新学习这门课,怎么做才可以学的更好

  • 每周提前预习,因为下一周的任务是早就列出来的,把学习时间安排在周一到周五的课余时间提高学习效率,对于所学习的代码要多加改动,理解每段代码的含义以及具体用法,不要嫌麻烦。

问卷调查

  • 你平均每周投入到本课程多长时间?
    • 平均每周在23小时左右
  • 每周的学习效率有提高吗?
    • 在掌握了正确的学习方法以及方向后对于学习效率有很大的提高
  • 学习效果自己满意吗?
    • 总体来说比较满意,但最后几周并不是很满意,因为学习时间上没有调整好,导致最后几周的实践不够
  • 课程结束后会继续一周至少一篇博客吗?
    • java结束的时候也说过类似要继续一周一篇博客的话,但是并没有坚持下来,这个算是比较遗憾的事情,可以的话想尝试一下,这个学期的时候已经开始将自己学习一些知识的内容随手记在了印象笔记里面,然后整理之后编辑成博客,实际上我感觉在之前的过程中因为博客是作为作业提交的,所以写博客都是给人一种完成任务的感觉,在这个过程中感受不到写作带来的快乐,而且文笔也受到了很大的约束,我想如果是写一些自己想写的东西,那么或许会看到很多不同的东西。
  • 你觉得这门课老师应该继续做哪一件事情?
    • 提交博客,项目加分,期中考试,期中和期末的总结,这些事情都是比较有意义的,可以把很多学到的知识串联起来
  • 你觉得这门课老师应该停止做哪一件事情?
    • 暂时没有想到,因为老师所提出的要求都是有它的意义的,区别只在于对于现阶段的学习的帮助有多少,在我看来有些东西虽然在现阶段的学习中用处并不大,但是对于养成一个好的编程习惯是有很大帮助的,所以暂时还没有想到有些什么事情应该停止
  • 你觉得这门课老师应该开始做什么新的事情?
    • 将实验的内容与课程内容进行一个过渡,在缺少这个过渡的情况下对于实验内容的理解感觉有很大的缺失

给出你的总结的链接和二维码

posted @ 2016-12-25 23:20  20145328胡东晖  阅读(326)  评论(2编辑  收藏  举报