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

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


每周作业链接汇总

- 第一周作业:

  1. 简要内容:教材第一、七章学习总结

- 第二周作业:

  1. 简要内容:myod实现

- 第三周作业:

  1. 简要内容:教材第二章学习总结

- 第五周作业:

  1. 简要内容:教材第三章学习总结及mybash实现

  2. 二维码:
    1. 教材第四章学习总结

    2. mybash实现
    ![](http://images2017.cnblogs.com/blog/1065404/201712/1065404-20171228001041941-1355853709.png)
    

- 第六周作业:

  1. 简要内容:学习系统调用并实现mybash

- 第七周作业:

  1. 简要内容:教材第四章学习总结

- 第八周作业:

  1. 简要内容:课上练习3的daytime服务器分别用多进程和多线程实现成并发服务器并测试以及第八周学习总结

  2. 二维码
    1. 第八周课下作业

    2. 第八周学习总结
    

- 第九周作业:

  1. 简要内容:mypwd的实现以及第九周学习总结

  2. 二维码
    1. 第九周课下作业

    2. 第九周学习总结
    

- 第十周作业:

  1. 简要内容:第六章课上测试

- 第十一周作业:

  1. 简要内容:第九章学习总结

- 第十三周作业:

  1. 简要内容:学习第5章总结

- 第十四周作业:

  1. 简要内容:学习第12章总结

实验报告链接汇总

- 实验一

  1. 实验名称:熟悉开发环境
  2. 简要内容:熟悉开发环境

- 实验二

  1. 实验名称:固件程序设计
  2. 简要内容:固件程序设计:
    1. 1-MDK
    2. 2-LED
    3. 3-UART
    4. 4-国密算法

- 实验三

  1. 实验名称:实时系统
  2. 简要内容:实时系统:
    1. 实现mywc
    2. 使用多线程实现wc服务器并使用同步互斥机制保证计数正确

- 实验四

  1. 实验名称:外设驱动程序设计
  2. 简要内容:外设驱动程序设计

- 实验五

  1. 实验名称:通讯协议设计
  2. 简要内容:openssl的安装和使用

代码托管链接

- 代码托管二维码:

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

- 代码量汇总提交statistics.sh的支持截图

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

    • 下载安装使用it、vim、gdb、gdbc、使用dmesg调试。
  • 加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得

    • 我在学习的时候常常会以教材名称进行搜索,对这本教材的评价都是太过深奥,有一篇关于第11章的讲解中提到本书中的代码都是非常精华的大师之作。在简练的代码中实现了非常多的功能。在这样的代码的基础上修改确实很方便,但是不利于我们自己编程。代码还是应该自己去敲,再思考我们和教材上的代码的差距,才能有所收获。
  • 实践上有什么经验教训

    - 早做准备,有问题尽量自己解决。说实在的,很多时候难题对于大家都是一样难,自己动手解决才能在下次遇到问题时,有办法解决
    
  • 整体评价一下第1周作业中自己提出的问题是不是抓住了学习重点

    • 基本上抓住了

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

1.虚拟内存的含义和存在的意义

   虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
   别称虚拟存储器(Virtual Memory)。电脑中所运行的程序均需经由内存执行,若执行的程序很大或很多,则会导致内存消耗殆尽。为解决该问题,Windows中运用了虚拟内存技术,即匀出一部分硬盘空间来充当内存使用。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。若计算机缺乏运行程序或操作所需的随机存储器 (RAM),则 Windows 会用之进行补偿。它将计算机的RAM和硬盘上的临时空间组合。当RAM运行速率缓慢时,它便将数据从RAM移动到称为“分页文件”的空间中。将数据移入与移出分页文件可释放RAM,以便完成工作。 一般而言,计算机的RAM越多,程序运行得越快。若计算机的速率由于RAM可用空间匮乏而减缓,则可尝试借增加虚拟内存来进行补偿。但是,计算机从RAM读取数据的速率要比从硬盘读取数据的速率快,因而扩增RAM容量(可加内存条)是最佳选择。

2.C语言中的位级运算的实际应用有什么

   按位存储的数据的清零和置位

3.解释内存中的栈、堆和静态存储区的用法?

    堆区:
    1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
    2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身.

    3.一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。

    栈区:
    1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
    2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
    3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

    4.由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.
    
    静态区/方法区:
    1.方法区又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
    2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

   3.全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。

4.Y86和X86的区别和联系

   Y86是一个指令体系结构(ISA),它是一个写这本书的作者出的指令集.目的是为了让我们更加清晰地了解ISA,就像在读编译原理的时候,作者会教你做个编译器是一样的道理.
   
   Y86和X86的区别在于,有的时候Y86需要两条指令来达到X86一条指令就可以达成的目的.
 
   比如对于X86指令中的addl $4,%ecx这样的指令,由于Y86当中的addl指令不包含立即数,所以Y86需要先将立即数存如寄存器,即使用irmovl指令,然后再使用addl来处理加法运算.
 
   总的来说,Y86就是X86的一个缩减版,他的目的就是以简单的结构来实现一个处理器,帮助我们了解处理器的设计和实现.

5.什么是循环展开?

   循环展开就是通过在每次迭代中执行更多的数据操作来减小循环开销的影响。其基本思想是设法把操作对象线性化,并且在一次迭代中访问线性数据中的一小组而非单独的某个。这种思想主要适用于计算循环索引和测试循环条件的开销部分所占比重过大(相对于循环体内执行的指令而言),连续执行一组相同的指令,能提高指令的cache命中率。

6.对程序引用的局部性和局部存储有什么关系

   虚拟存储管理的效率与程序局部性程序有很大关系。根据统计,进程运行时,在一段时间内,其程序的执行往往呈现出高度的局限性,包括时间局部性和空间局部性。
   1、时间局部性:是指若一条指令被执行,则在不久的将来,它可能再被执行。
   2、空间局部性:是指一旦一个存储单元被访问,那它附近的单元也将很快被访问。

7.使用动态静态链接库的原因

   避免重复写代码

8.系统调用是如何实现的

   通过exev或者其他调用系统命令的函数

9.如何规避C程序中常见的与内存有关的错误?

   类型 1:内存未分配成功,却使用了它。
   方   法:在使用之前检查指针是否为NULL。
             1)当指针p是函数的参数时,在函数入口处用语句assert(p!=NULL)进行断言检查。
             2)当使用malloc或new来申请内存时,应该用if(p != NULL)进行防错检查。
   类型 2:引用了尚未初始化的指针
   原   因:内存的缺省初始值究竟是什么并没有统一的标准,在使用之前都进行初始化。
              1)没有初始化的观念。
              2)内存的缺省值是未定义,即垃圾值。
   类型 3:越界操作内存
   原   因:内存分配成功且初始了,但越界操作是不允许的。
   例   如:在使用数组时经常发生下标“多1”或“少1”,特别是在for循环语句时。
   类型 4:忘记释放内存,造成内存泄漏。
   原   因:含有这种类型错误的函数,每被调用一次,就丢失一块内存。当内存充足时看不到这种错误带来的影响,当内存耗尽时系统提示:“内存耗尽”。因此,动态内存的申请与释放必须配对,程序中malloc与free的使用次数要相同。
   类型 5:释放了内存却继续使用它
   原   因:对应的情况有2种
              1)返回了“栈内存的指针或引用”,因为堆栈中的变量在函数结束后自动销毁。
              2)某块内存被free后,没有将指向该内存的指针设置为NULL,导致产生“野指针”。

10.I/O是一种文件吗?

   
   linux把设备当作一种特殊文件整合到文件系统中。
   每个I/O设备分配一个路径,通常放在/dev目录下,每个设备都必须有主次设备号,主设备号相同的设备是同类设备(使用同一个驱动程序)。
   这些设备中,有些设备是对实际物理硬件的抽象,而有些设备则有内核自身提供的功能(不能依赖于特定的物理硬件,又称为“虚拟设备”)

11.客户端服务器通信的基本流程

   服务器端:
   – 申请一个socket (socketWatch)用来监听的
   – 绑定到一个IP地址和一个端口上
   – 开启侦听,等待接授客户端的连接
   – 当有连接时创建一个用于和连接进来的客户端进行通信的socket(socketConnection)
   – 即续监听,等侍下一个客户的连接

  客户端:
   – 申请一个socket(socketClient)
   – 连接服务器(指明IP地址和端口号)

12.信号量如何实现互斥的?

   信号量,也就是操作系统中所提到的PV原语,能达到互斥和同步的效果,这就是今天我们所要讲述的信号量线程控制。
   PV原语是对整数计数器信号量sem的操作,一次P操作可使sem减一,而一次V操作可是sem加一。进程(或线程)根据信号量的值来判断是否对公共资源具有访问权限。当信号量的值大于零或等于零的时候,该进程(或线程)具有对公共资源访问的权限,否则,当信号量的值小于时,该进程(或线程)就会被阻塞,直到信号量的值大于或等于一。


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

- 总结

- 教程


课程收获与不足

1. 自己的收获(投入,效率,效果等)

 - 可以在学习之前先去看看别人的学习总结,就像看看天气预报不要一点准备都没有;在实践 的时候克服自己的畏难心理;

2. 自己需要改进的地方

 - 学习的时候常常抓不住重点,还是要多向别人学习

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

 - 结对最好是能有优势互补的,我的学习搭档对于我的帮助是安装软件,实践动手,我能帮到他的是理论学习和编程

4. 给开学初的你和学弟学妹们的学习建议

 - 有问题自己解决。

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

 - 别因为学习任务重就不出去玩从而影响到对学习的热情。  

问卷调查

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

  - 基本每天都学,具体多长时间说不清楚,一天至少半个小时。

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

  - 比上个学期好很多,不过还是很拖沓

3. 学习效果自己满意吗?

  - 学无止境

4. 课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书送给你作纪念)

  - 有了发博客的习惯应该不会轻易停下来,不过到了大四可能博客内容会变成复习国考。

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

  - 写博客

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

  - 制定学习任务的目标时多考虑班上大多数同学的水平。

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

原文地址:https://www.cnblogs.com/xhwh/p/8128291.html