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

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

每周作业链接汇总

  • 第0周作业:针对课本十二章的内容提出自己的问题,并在之后的学习中慢慢思考与解答;成功安装虚拟机。

  • 第1周作业:了解Linux操作系统,掌握核心的Linux命令,如find/locate/cheat/grep/which/whereis等,使用Linux中用户管理命令/系统相关命令/文件目录相关命令/打包压缩相关命令/比较合并相关命令/网络相关命令等。

  • 第2周作业:熟悉vi的基本操作,熟悉gcc编译器的基本原理,学习使用gcc编译器的常用选项,学习使用gdb调试技术,熟悉makefile基本原理及语法规范,掌握静态库和动态库的生成与调用方法。

  • 第3周作业:学习教材第二章《信息的表示和处理》,理解二进制在计算机中的重要地位,掌握布尔运算在C语言中的应用,理解有符号整数、无符号整数、浮点数的表示,理解补码的重要性,及课后习题详解。

  • 第5周作业:掌握X86汇编基础。

  • 第6周作业:1.了解ISA抽象的作用,掌握ISA。

  • 第7周作业:了解常见的存储技术(RAM、ROM、磁盘、固态硬盘等),理解局部性原理,理解缓存思想,理解局部性原理和缓存思想在存储层次结构中的应用,高速缓存的原理和应用。

  • 期中总结:复习Linux常用命令,复习教材1-7章。

  • 第9周作业:掌握系统编程和系统调用的概念,掌握系统编程错误处理的方式,掌握Unix/Linux系统级I/O,掌握RIO及I/O重定向的方法。

  • 第10周作业:掌握系统编程和系统调用的概念,掌握Unix/Linux系统级I/O。

  • 第11周作业:了解异常及其种类,理解进程和并发的概念,掌握进程创建和控制的系统调用及函数使用:fork,exec,wait,waitpid,exit,getpid,getppid,sleep,pause,setenv,unsetenv,,理解数组指针、指针数组、函数指针、指针函数的区别,理解信号机制:kill,alarm,signal,sigaction,掌握管道和I/O重定向:pipe, dup, dup2。

  • 第12周作业:第九、十、十一周代码检查。

  • 第13周作业:掌握三种并发的方式:进程、线程、I/O多路复用,掌握线程控制及相关系统调用,掌握线程同步互斥及相关系统调用。

  • 第14周作业:理解虚拟存储器的概念和作用,理解地址翻译的概念,理解存储器映射,掌握动态存储器分配的方法,理解垃圾收集的概念,了解C语言中与存储器有关的错误。

实验报告链接汇总

代码托管链接和二维码

  • 代码托管连接:https://git.oschina.net/senlinmilelu/IS20145218

  • git log --pretty=format:"%h - %an, %ar : %s"

  • 代码量汇总

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

    • 做到了。
  • 加点代码,改点代码是理解的最好方式,谈谈你的心得

    • 我们看到代码的时候总会下意识的觉得太难懂了,看上去就很难理解,所以从来都是会去躲避学习代码,能不看就不看,能少看就少看,更别提加减代码了。但其实我们静下心去一行行得读下去,就会发现其实并没有很难理解,反而因为能多懂一点而感到开心。
  • 实践上有什么经验教训

    • 实践是锻炼我们对各种命令的熟练程度,也能让我们更加了解计算机语言,多动手总是没错的,不要每次为了考试就死记硬背一些命令,用熟了自然手到擒来。

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

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

  • 第一章问题:什么是并发?
    • 一个同时具有多个活动的系统。并行:用并发使一个系统运行地更快,并行可以在计算机系统多个抽象层次上运用。按照系统层次结构由高到低的顺序强调三个层次:线程级并发、指令级并行、单指令多数据并行。
  • 第二章问题:有符号数和无符号数之间在计算机中是怎么转化的?
    • C语言允许在各种不同的数字数据类型之间做强制类型转换。将负数转换成无符号数可能会得到0。如果转换的无符号数太大以至于超出了补码能够表示的范围,可能会得到TMax。
    • C语言允许有符号数与无符号数之间的转换,转换的原则是底层的位表示保持不变。-
  • 第三章问题:一元操作和二元操作具体是什么?
    • 一元操作:只有一个操作数,既是源又是目的,可以是一个寄存器或者存储器。
    • 二元操作:第二个操作数既是源又是目的,两个操作数不能同时是存储器。
  • 第四章问题:如何使用Y86指令集进行操作?
    • Y86指令
movl:irmovl、rrmovl、mrmovl、rmmovl,分别显式地指明源和目的地的格式。第一个字母表明源的类型,i(立即数)、r(寄存器)或m(存储器 ),第二个字母代表目的,可以是r或者m。

注意:

1.两个存储器传送指令中的存储器引用方式是简单地基址和偏移量形式,即:
Imm(Eb) M[Imm+R[Eb]](基址+偏移量)寻址

2.不允许从一个存储器地址直接传送到另一个存储器地址,也不允许将立即数传送到存储器。

OPl(整数操作指令):addl、subl、andl和xorl。只对寄存器数据进行操作,同时还设置条件码。
jXX(跳转指令):jmp、jle、jl、je、jne、jge、jg,根据分支指令的类型和条件码的设置来选择分支。
cmovXX(条件传送指令):cmovle、cmovl、cmove、cmovne、cmovge和comvg,与寄存器-寄存器传送指令rrmovl一样,但只有当条件码满足所需要的约束时才会更新目的寄存器的值。
call和ret:call指令将返回地址入栈,然后跳转到目的地址。ret指令从这样的过程调用中返回。
pushl和popl:入栈和出栈。
halt:停止指令的执行。
  • 第五章问题:优化程序性能需要哪些基本要求?
    • 让最常见的情况运行的快。
    • 在每个循环内部缓存不命中数量最小。
    • 对局部变量的反复引用是好的,因为编译器能够将他们缓存在寄存器文件中。
    • 步长为1的引用模式是好的,因为存储器层次结构中所有层次上的缓存都是将数据存储为连续的块(空间局部性)。
  • 第六章问题:随机访问存储器区别是什么?
    • 随机访问存储器(RAM)
      1.静态RAM(SRAM):用来作为高速缓存存储器,每个位存储在一个双稳态的存储器单元里。双稳态:电路可以无限期的保持在两个不同的电压配置或者状态之一。只要供电,就会保持不变。即使有干扰,例如电子噪音来扰乱电压,当干扰消除后,电路就会恢复到稳定值。
      2.动态RAM(DRAM):用来作为主存以及图形系统的帧缓冲区。将每个位存储为对一个电容的充电,当电容的电压被扰乱之后,他就永远都不会再恢复了。暴露在光线下会导致电容电压改变。
  • 第七章问题:静态连接器主要任务是什么?
    • 符号解析、重定位。
  • 第八章问题:怎么进行进程控制?
    • 获取进程ID
每个进程有一个唯一的非零正数进程ID(PID)。
pid_t getpid(void);     /*返回调用进程的PID*/
pid_t getppid(void);             /*返回它的父进程的PID*/
- 创建和终止进程
进程总是处于以下三种状态之一:
•运行。在CPU上执行,或者等待被执行且最终会被内核调度。
•停止。进程的执行被挂起,且不会被调度。(与信号有关)

•终止。进程永远停止。进程终止的原因:1)收到一个信号,默认行为是终止程序2)从主程序返回3)
 调用exit函数。

•exit函数以status退出状态来终止进程。void exit(int ststus)
•父进程通过调用fork函数创建一个新的运行子进程。
pid_t fork(void); /*子进程返回0,父进程返回子进程的pid,出错则返回-1。*/
  • 第九章问题:虚拟存储器有哪些作用?
    • 虚拟存储器的三个重要功能:
    • 将主存看做是一个存储在磁盘上的地址空间的高速缓存,在主存中只保护活动区域。
    • 为每个进程提供了一致的地址空间,从而简化了存储器管理。
    • 保护了每个进程的地址空间不被其他进程破坏
  • 第十章问题:有哪些I/O函数我们可以使用?
    • 应用程序可以通过open、close、lseek、read、write和stat这样的函数来访问Unix I/O。
  • 第十一章问题:如何搭建web服务器?
    (1)当一个客户端需要服务时,它向服务器发送一个请求,发起一个事务。例如,当Web览器需要一个文件时,它就发送一个请求给Web服务器
    (2)服务器收到请求后,解释它,并以适当的方式操作它的资源。例如,当Web服务器收到浏览器发出的请求后,它就读一个磁盘文件
    (3)服务器给客户端发送一响应,并等待下一个请求。例如,Web服务器将文件发送回客户端;
    (4)客户端收到响应并处理它。例如,当Web浏览器收到来自服务器的一页后,它就在屏幕上显示此页。
  • 第十二章问题:如何使用线程提高并行性?
    • 到目前为止,在对并发的研究中,我们都假设并发线程是在单处许多现代机器具有多核处理器。并发程序通常在这样的机器上运理器系统上执行的。然而,在多个核上并行地调度这些并发线程,而不是在单个核顺序地调度,在像繁忙的Web服务器、数据库服务器和大型科学计算代码这样的应用中利用这种并行性是至关重要的。

课程收获与不足

  • 自己的收获(投入,效率,效果等)
    • 这一个学期以来对这门课程的投入时间很多,都是每天积累起来的。每周的任务量大致差不多,有几周任务比较重就需要花费更多时间,每天读一节或者每天做一点实践,累积一周就是一章的内容,累积一学期就是一整本书的内容,积少成多不可谓不深刻。
    • 而我们花费时间和精力,效率却忽高忽低,有的时候明明深刻钻研,付出大量时间,却收效甚微,因为我们只聚焦在课本上,与之相关的、可以帮助理解的知识却一概不知,比如汇编学得不好的同学,就会发现第三章的内容学起来比较困难;操作系统学的不好的同学,会发现十二章内容很难理解。这就是我们即使花了时间去读书,写了博客,做了实践,也效率低下,无法融会贯通的原因。
    • 一个学期学一本书,不能说是完全理解,但起码做到了解、记忆书中内容,通过实践习得一些基本操作,比如vim,gdb等的基本用法,起码做到这些才能保证我们这一个学期的所花在这门课上的时间没有白费,才叫学有所成。
  • 自己需要改进的地方
    • 就如同前面说到的,有时候花了大量时间,效率却很低,只在意每周任务是否已经完成,而不去做深的思考,电脑到底为什么这样做,某条机器语言到底代表什么,这些都是我们长久以来忽略的,而过多的把目光投在写博客上。
  • 如果有结对,写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
    • 在本学期的五次实验中,有结对进行。结对实验可以取长补短,自己欠缺的知识说不定正好是对方擅长的,而且团队合作可以更好地促进两人彼此学习,实现1+1>2的效果。希望老师以后可以多给些可以组队进行得项目。

给学弟学妹们的学习建议

  • 如果重新学习这门课,怎么做才可以学的更好
    • 首先要注重学习的效率,每一周的任务并不是随便在书上找点内容写完博客就可以了,每周的考试会提醒我们其实在上一周自己并没有学到什么,所以一定要注重实践,代码必要的话自己敲一敲,一定要自己运行,不要到了学期末连怎么使用虚拟机都不知道。
    • 其次是每一章学习任务都或多或少跟我们以前学过的或者现在正在学的知识有关,我们的知识就像一整条链条,环环紧扣,有时加入新的分支,但是如果有一环是完全断开的,那就相当于我们其实什么都没有学到,每周只是在应付而已,所以建议学弟学妹们不要只是应付博客,更要为了自己能掌握的知识去学习,去努力。

问卷调查

  • 你平均每周投入到本课程多长时间?
    • 每天大概都会有几个小时来学习,每周将近20个小时。
  • 每周的学习效率有提高吗?
    • 在慢慢找寻学习这门课的方法,效率是慢慢提高的。
  • 学习效果自己满意吗?
    • 一开始的时候确实没找到正确方法,不知道每周自己在干什么,后来渐渐明白了自己的任务及目标。总体来说,本学期的学习效果还是比较满意的。
  • 课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书)
  • 你觉得这门课老师应该继续做哪一件事情?
    • 首先每周的总结也就是博客是必须的,而且内容上要多体现一些实践的东西,而不是单纯的抄一抄课本上的内容。
    • 其次每周考试的内容,也可以多一些理解性的内容,可以检验同学们过去的一周是不是真的理解了,还是只抄了书。
    • 最后,查代码或者检查操作的时候应该扩大一些范围,考试分数高的实践不一定强。
  • 你觉得这门课老师应该停止做哪一件事情?
    • 目前教学方法可以继续下去,很有效果。
  • 你觉得这门课老师应该开始做什么新的事情?
    • 可以穿插一些小项目在课程学习中,而不是作为加分项出现。

给出本文链接和二维码

]第十五周](http://www.cnblogs.com/senlinmilelu/p/6212453.html)

posted @ 2016-12-22 21:27  20145218  阅读(209)  评论(4编辑  收藏  举报