20145227鄢曼君 《信息安全系统设计基础》课程总结

20145227鄢曼君 《信息安全系统设计基础》课程总结

每周作业链接汇总

  • 第0周作业

    • 简要内容:翻阅了课本的感想;使用虚拟机VirtualBox成功安装Linux系统;预习了Linux基础入门;阅读了老师推荐的博客并写出了自己的感悟。
    • 二维码:
  • 第一周作业

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

    • 简要内容:介绍了了Linux系统下的开发环境、vi的基本操作、gcc编译器的基本原理;介绍了gcc编译器的常用选项、如何使用gdb调试技术;介绍了makefile基本原理及语法规范以及静态库和动态库的生成与调用方法;介绍了C程序中模块的概仿,模块分解的“高内聚,低耦合”的原则;介绍了链接的概念。
    • 二维码:
  • 第三周作业

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

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

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

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

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

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

    • 简要内容:完成了课后练习;学习视频并总结了知识点,运行分析了相关代码。
    • 二维码:
  • 第十一周作业

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

    • 简要内容:分析、检查、总结了第九周代码,第十周代码,第十一周代码。
    • 二维码:
  • 第十三周作业

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

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

实验报告链接汇总

  • 实验一 开发环境的熟悉

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

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

    • 简要内容:介绍了安装ADS、安装GIVEIO驱动、安装JTAG驱动的正确方法,并介绍了如何测试基本安装是否正确。
    • 二维码:
  • 实验四 外设驱动程序设计

    • 简要内容:介绍了在LINUX下进行驱动设计的原理以及使用模块方式进行驱动开发调试的过程。
    • 二维码:
  • 实验五 简单嵌入式WEB服务器实验

    • 简要内容:介绍了在ARM开发板实现一个简单的WEB服务器的过程;在宿主机和实验箱中实现了老师给的代码并分析了代码。
    • 二维码:

代码托管链接和二维码:

  • 链接:https://git.oschina.net/20145227/IS-Design-20145227

  • 二维码:

  • 截图 git log --pretty=format:"%h - %an, %ar : %s" 的结果:

  • 代码量汇总(用wc命令,有截图):

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

    • 做到了。这学期开始的前几周并没有按照老师的要求做,而是直接像学习java一样在自己电脑里面git,并不规范。后面按照老师发的博客代码驱动的程序设计学习中的要求在Ubuntu上安装配置好了git,并按照要求每周规范的git了代码。然后又学会了代码的编译与运行、使用gdb辅助学习、GDB代码调试、CGDB代码调试、汇编代码调试、DDD代码调试以及多进程与多线程的学习等等内容,基本完成了要求。
  • 加点代码,改点代码是理解的最好方式,谈谈你的心得。

    • 很多时候,敲了教材上的代码编译运行之后只是知道了这个代码运行的结果,要想要更好的理解代码就可以改动代码或者加点代码来运行加深理解。我这样做了多次,发现效果确实很好,比起仅仅看教材上的代码,这种方法真的很有效果。
  • 实践上有什么经验教训?

    • 这学期实践内容很多,以我做的GDB的深入研究为例谈谈自己的想法吧。在做之前,一直感觉GDB调试是很困难的一件事,但是自己真正去实践才发现它并没有我想象中的那么难。所以很多时候只要我们自己积极主动的学习,那么其实就已经成功了一半了。实践过程中出现的很多问题上一届的学长学姐们也遇到过,多学习他们的学习总结和经验对我们有很多帮助。遇到问题时,自己可以多想想,尽自己最大努力去解决这个问题。也可以查阅资料、向老师同学请教,最终一定能够有很大收获的。

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

  • 1.GCC编译程序的过程分为哪些阶段阶段?
    • 答:分为预处理、编译、汇编、链接四个阶段。
  • 2.IEEE浮点数标准包含哪些部分?
    • 答:IEEE浮点数标准包含符号、尾数、(阶码)三部分。
  • 3.C语言中的循环结构,汇编中怎样才能实现?
    • 答:可以用条件测试和跳转组合起来实现。
  • 4.HCL中,多路复用函数如何描述?
    • 答:使用情况表达式来描述。
  • 5.主存储器的性能指标主要有哪些?
    • 答:存储容量、存取时间、存储周期、存储器带宽。
  • 6.高速缓存的容量如何计算?
    • 答:可以用 C=S*E*B 来计算。
  • 7.静态链接和动态链接的区别?
    • 答:动态链接是指在生成可执行文件时不将所有程序用到的函数链接到一个文件,因为有许多函数在操作系统带的dll文件中,当程序运行时直接从操作系统中找。而静态链接就是把所有用到的函数全部链接到exe文件中。动态链接是只建立一个引用的接口,而真正的代码和数据存放在另外的可执行模块中,在运行时再装入;而静态链接是把所有的代码和数据都复制到本模块中,运行时就不再需要库了。
  • 8.故障指令包括什么?
    • 答:故障指令包括陷阱、故障、终止。
  • 9.Linux的虚拟存储器分为哪些部分?
    • 答:分为内核虚拟存储器和进程虚拟存储器两部分。
  • 10.Unix/Linux中,键盘被当做什么来处理?
    • 答:Unix/Linux中,键盘是被当做文件来读和写的。
  • 11.网络协议必须提供的基本能力是什么?
    • 答:命名机制和传送机制。
  • 12.Linux下C程序处理线程的标准接口是什么?
    • 答:Posix线程。

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

课程收获与不足

自己的收获

  • 学习信息安全系统设计基础已经一学期了。这一学期的时间,我感觉我对很多知识还只是停留在比较浅的层面上,还有好多东西是需要自己去探索的。学习这门课应该是循环渐进,有始有终,按部就班,脚踏实地。
  • 这学期开始前,我已经学习过c语言、java、汇编、数据结构等知识,不过学的并不是很好。我觉得这学期最好的就是这门课程把之前学过的东西串联了起来,让我们对以前学的东西有了更深的理解。还有就是每周写博客,已经写了一年了。我感觉博客园真的是一个集思广益的地方,大家把自己的学习心得体会都通过博客的形式发表出来,然后其他人就可以去阅读、去参考别人成功的方法,有什么问题也可以在下面评论,然后博主会和大家互动,共同探讨,解决问题。

自己需要改进的地方

  • 学这门课千万不要浮躁。说到浮躁,这也是一个很值得我深思的问题。我觉得我自己也有这样的倾向,因此很多时候学习只是停留在很表面,并没有去深入理解。不仅是我,估计大多数的人都有这个毛病。真正学习的时候,浮躁会使你失去很多。在学习过程中,我很努力地使自己保持心理的平静,从基础学起。希望以后自己可以改掉浮躁的毛病。

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

  • 本学期的实验全部都是我和队友结对完成的。通过结对,我深刻地明白了团队合作的重要性。团队精神能推动团队运作和发展。在团队精神的作用下,团队成员产生了互相关心、互相帮助的交互行为,显示出关心团队的主人翁责任感,并努力自觉地维护团队的集体荣誉,自觉地以团队的整体声誉为重来约束自己的行为,从而使团队精神成为自由而全面发展的动力。一个具有团队精神的团队,能使每个团队成员显示高涨的士气,有利于激发员工作的主动性,由此而形成的集体意识,共同的价值观,高涨的士气、团结友爱,团队成员才会自愿地将自己的聪明才智贡献给团队,同时也使自己得到更全面的发展。
  • 我觉得结对实验这一环节很好,不仅让大家能够明确分工,合作的编写出程序,而且能培养大家的默契,让我们能够在实际操作过程中更好的编写代码。要想成功编写程序,这一过程是很复杂的,而团队方式可以使其简单许多,遇到问题的时候可以大家一起想,集思广益,而且团队操作在很大程度上还可以实现优势的互补。

给学弟学妹们的学习建议

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

  • 如果重新学习这门课的话,我想我会做的更好。首先,好好啃教材,辅助看教学视频。一本好的教材,可以让你更快更好的进入学习状态。然后看视频是学习比较直观的方式。建议先看课本,不懂的地方,更看视频,这样效果更好。
  • 最重要的是要多动手实践。这门课的学习,在学懂理论后,一定要实践。有时候,教材上给出的语法和例子很简单,很容易看懂,但到自己动手写的时候,又是另一种感觉。只有多动手编程,哪怕是简单的小程序,重复实现书上简单的例子,也是在积累和提高。动手做是最为重要的。很多人学习就是看书、听课,当时是明白了,但过后马上就忘记。如果不愿意敲键盘,就不如不学。即使有时候所敲的代码你不明白,可以先运行,看看结果,增加感性认识,然后上升到理性的认识。特别是在大家做考题的时候,很多东西,概念,你只要随便敲一个程序做做实验就能很深刻的理解,但很多人都是不愿意动手,这样的学习效率就很低。 动脑,动嘴, 就是要多想问题,多思考,多实践。

问卷调查

你平均每周投入到本课程多长时间?

  • 30小时。

每周的学习效率有提高吗?

  • 有提高。一开始效率很低,总是静不下来,后面就渐入佳境了。

学习效果自己满意吗?

  • 基本满意。很多时候感觉自己的付出和回报还是成正比的,但是有些时候明明花了很多时间去准备最终效果却并不好。

你觉得这门课老师应该继续做哪一件事情?

  • 扇贝打卡然后期末加分这种方法很值得提倡,希望能够继续做下去。这不仅可以调动大家学习的积极性,而且还让我们的英语水平提高了很多,对于四六级以及其他的方面都有很大的帮助。
  • 在博客园里发表博客也是很好的一种总结心得体会的方法,值得提倡。博客园是一个集思广益的地方,大家把自己的学习心得体会都通过博客的形式发表出来,然后大家可以提出意见,有什么不懂的也可以直接在评论里提出来,共同探讨,共同解决问题。

你觉得这门课老师应该停止做哪一件事情?

  • 老师的教学方法都很好,目前我觉得所有的都可以继续应用下去。

你觉得这门课老师应该开始做什么新的事情?

  • 每次实验之前,希望老师能够讲解一下实验内容,有些实验难度较大,自己想要做出来还是有点费劲的。就算按照教程做出来,但事实上很多东西也理解不了。所以希望老师可以着重为大家讲解一下实验,特别是代码的理解。

给出本文链接和二维码

posted @ 2016-12-22 18:59  20145227鄢曼君  阅读(320)  评论(7编辑  收藏  举报