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

20145211 《信息安全系统设计基础》课程总结——只是当时已惘然

每周作业链接汇总

第0周作业

    • 简要内容:开课前的准备:主要为翻阅课本,熟悉教材,提出问题,总结大体阅读感想,安装虚拟机。
    • 二维码:

       

  • 第一周作业
    • 简要内容:linux基本常用重要指令介绍find/locate/cheat/grep/which/whereis等。
    • 二维码:

       

  • 第二周作业
    • 简要内容:基于Linux系统的开发环境、vi的基本操作、gcc编译器的基本原理及如gdb调试
    • 二维码:

       

  • 第三周作业
    • 简要内容:信息的表示和处理,对信息在计算机中的存储进行介绍:二进制在计算机中的重要地位、布尔运算在C语言中的应用;有符号整数、无符号整数、浮点数的表示;补码的重要性、C语言中溢出、数据类型转换中的陷阱和可能会导致的漏洞
    • 二维码:
  • 第四周作业
    • 简要内容:关于前几周学习所遇到的问题和解决情况;以及装双系统的一点心得体会
    • 二维码:
    •  

  • 第五周作业
    • 简要内容:基于linux的X86汇编、ISA:函数调用栈帧的概念、GDB调试;以及程序的机器级表示
    • 二维码:

       

  • 第六周作业
    • 简要内容:处理器体系结构,介绍了ISA和Y86指令体系结构;流水线与顺序实现方式
    • 二维码:

       

  • 第七周作业
    • 简要内容:常见的存储技术;局部性原理和缓存思想在存储层次结构中的应用以及高速缓存的原理和应用
    • 二维码:

       

  • 第八周作业
    • 简要内容:对前7周的内容查缺补漏,复习了Linux常用命令以及教材1-7章
    • 二维码:

       

  • 第九周作业
    • 简要内容:系统编程和系统调用的概念、系统编程错误处理的方式、Unix/Linux系统级I/O的使用情况
    • 二维码:

       

  • 第十周作业
    • 简要内容:完成实践代码调试分析、课后练习;学习视频,加深指令了解
    • 二维码:

       

  • 第十一周作业
    • 简要内容:了解异常及其种类,理解进程和并发的概念;理解数组指针、指针数组、函数指针、指针函数;完成实践代码调试分析
    • 二维码:

       

  • 第十二周作业
    • 简要内容:复习前三周的知识,并分析检查总结
    • 二维码:

       

  • 第十三周作业
    • 简要内容:掌握三种并发的方式:进程、线程、I/O多路复用及相关系统调用;完成实践代码调试分析
    • 二维码:

       

  • 第十四周作业
    • 简要内容:理解虚拟存储器的概念和作用、地址翻译的概念、存储器映射、动态存储器分配的方法、垃圾收集以及C语言中与存储器有关的错误;完成实践代码调试分析
    • 二维码:

       

实验报告链接汇总

  • 实验一 开发环境的熟悉
    • 简要内容:熟悉 linux 开发环境,学会基于 S3C2410 的 linux 开发环境的配置和使用。使用linux的armv4l-unknown-linux-gcc编译,使用基于NFS方式的下载调试,了解嵌入式开发的基本过程。
    • 二维码:

       

  • 实验二 固件开发
    • 简要内容:了解多线程程序设计的基本原理,学习 pthread 库函数的使用。程。
    • 二维码:

       

  • 实验三 内核驱动设计入门
    • 简要内容:安装ADS,安装GIVEIO驱动,安装JTAG驱动,测试基本安装是否正确。
    • 二维码:

       

  • 实验四 模块方式驱动实验
    • 简要内容:掌握实时系统应用和驱动程序的编写,学会以实用模块化方式来进行驱动开发与调试。
    • 二维码:

       

  • 实验五 简单嵌入式WEB服务器实验
    • 简要内容:掌握在ARM开发板实现一个简单WEB服务器的过程,学习在ARM开发板上的SOCKET网络编程,学习在Linux环境下signal()函数的调用。
    • 二维码:

       

代码托管链接和二维码:

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

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

  • 代码驱动的学习做到没有?
  • 我只能说做到了一部分,刚开始没有能力也没有精力搞代码驱动的学习;这后来逐渐按照老师的要求做,认真学习了老师发的博客代码驱动的程序设计学习,在Ubuntu上安装配置好了git,但是也只停留在代码的运行阶段而没有任何分析。之后才在老师的教导下对代码进行逐条分析,这其中的过程虽然很艰辛,但是让我收获颇丰。
  • 加点代码,改点代码是理解的最好方式,谈谈你的心得。
    • 也许是我个人有点强迫症,很多时候我觉得与其慢慢看懂一个毫无注释的代码,真的不如自己推倒重建。这就导致我每次看老师给的代码都没有什么兴趣,很多时候,运行完了便草草了事;后来我觉得这么做不行,必须要把老师给的代码变成自己的东西,于是我便一行行的去看代码,直到弄到为止;接着便对其中一些有意思的地方进行一些改动,看他的运行结果是否是自己当初想象的模样,不亦乐乎?
  • 实践上有什么经验教训?
    • 这学期实践内容很多,之前我总是担心代码运行出问题,一旦出问题,我的心态就爆炸了。所以要有一颗敢于直面惨淡的人生的决心,以及不怕流血牺牲的精神因为事后你会发现,其实它并没有你想象中的那么难。所以很多时候只要我们自己积极主动的学习,那么其实就已经成功了一半了。

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

    • 1.与线程之间的关系?
      • 答:进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。
    • 2.大端存储与小端存储的区别?
      • 答:小端存储:较低的有效字节存放在较低的存储器地址,较高的字节存放在较高的存储器地址;

        大端存储:较低的有效字节存放在较高的存储器地址,较高的字

    • 3.简述三种不同的寻址方式及其操作数来源?
      • 答:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址、立即数,寄存器操作数,内存操作数,
    • 4.CSAPP关于Y86处理器的问题?
      • 答:现在Intel的CPU,L1 Data Cache的典型load-to-use latency是4个周期左右,这个是大家在网上随便找个工具就能验证的,L2 Cache,L3 Cache,Memory在10个周期~200+个周期不等。
        CPU的访存指令首先会发到L1 Cache,这一层基本上90%+会命中,如缓存缺失就会继续找L2 Cache,这一层的latency也比L1 Cache涨了好几倍,依次往下。
        流水线里面访问L1 Data Cache的指令会多停顿一些,如果这个处理器是乱序执行,就会允许后面的不相关指令越过这条访存指令继续往前执行,如果是顺序执行就得等着了。
    • 5.主存储器的性能指标主要有哪些?
      • 答:1. 为了“优化”而减少源码中局部变量的个数

        这可能是最没用的手工“优化”了。特别是遇到在高级语言中“不用临时变量来交换两个变量”这种场景的时候。
        看另一个问题有感:有什么像a=a+b;b=a-b;a=a-b;这样的算法或者知识? - 编程

        2. 为了“优化”而把应该传值的参数改为传引用

    • 6.存储器山的正确理解究竟是什么?
      • 答:存储器山是一种综合研究存储器层次结构的工具。它反映了存储器层次结构中不同层次的带宽。也反映了具有不同的时间局部性与空间局部性的程序的性能。通过分析存储器山的数据,还可以看出存储器系统的部分硬件参数
    • 7.链接器的主要任务?
      • 答:1、符号解析(symbol resolution)。目标文件定义和引用符号。符号解析的目的是将每个符号引用刚好和一个符号定义联系起来。
        2、重定位(relocation)。编译器和汇编器生成从地址0开始的代码和数据节。链接器通过把每个符号定义和一个存储器位置联系起来,然后,修改所有对这些符号的引用,使他们指向这个存储器位置,从而重定位这些节。
  • 8.c语言所提供的用户级异常控制有哪些?
  • 答:
  • 9.虚拟存储器都有哪些作用?
    • 答:虚拟内存的作用 内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Window 虚拟存储器s中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。举一个例子来说,如果电脑只有128MB物理内存的话,当读取一个容量为200MB的文件时,就必须要用到比较大的虚拟内存,文件被内存读取之后就会先储存到虚拟内存,等待内存把文件全部储存到虚拟内存之后,跟着就会把虚拟内存里储存的文件释放到原来的安装目录里了。
  • 10.什么是基于I/O的多路复用并发编程?
    • 答:在I/O编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或者I/O多路复用技术进行处理。I/O多路复用技术通过把多个I/O的阻塞复用到同一个select的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。与传统的多线程/多进程模型比,I/O多路复用的最大优势是系统开销小,系统不需要创建新的额外进程或者线程,也不需要维护这些进程和线程的运行,降底了系统的维护工作量,节省了系统资源。
  • 11.网络编程与代码编程的主要差别?
    • 答:网络编程是计算机变成的一种类型,网络变成就是需要使用各种协议完成不同计算机之间数据传输和控制。
  • 12.什么样的变量多线程可以共享,什么样的不可以共享?
    • 答:一组并发线程运行在一个进程的上下文中,每个线程都有它自己独立的线程上下文,例如:栈、程序计数器、线程ID、条件码等,每个线程和其它的线程一起共享除此之外的进程上下文的剩余部分,包括整个用户的虚拟地址空间,当然也共享同样的打开的文件的集合。,这里有一点要特别注意,就是寄存器是从不共享的,而虚拟存储器总是共享的。
      有了共享就要防止在对共享变量进行操作的过程中得到一个不可知的值,在Linux内核中有个原子类型与原子操作这么个概念,因为用户态下没有这么一个原子操作存在,那么在我们用户态下就需要要对操作这个共享变量的线程进行同步。为什么要进行同步呢?
      因为假设我们在一个程序中有一个全局变量cnt,初始值为0,接下去我们创建了两个线程,完成的功能都是在一个循环中对这个变量进行+1操作,想象一下在这两个线程操作完成后会出现什么状况。

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

课程收获与不足

自己的收获

  • 又到了谈收获的时候,相比之前学习JAVA的那段经历,学习信息安全系统设计基础的这段时间让我GET到了更多。显而易见的就是:我基本会用linux 了,会装双系统了,会Linux下编译运行代码了,会调试VS2015了,会在cmd里运行VS的代码了,掌握了函数指针、指针函数了,在我原有的位域的基础上理解了union和struct的内存分配了……说真的,我学到了很多有用的东西,尤其是书本之外的知识。
  • 当ppt成为一种趋势,当老师所讲脱离课本成为一种潮流,我不得不说娄老师是一位特立独行的老师,我也丝毫不掩饰对他的敬佩之情。《深入理解计算机系统》应该是我这学期除了高数之外翻得最透彻的一本书了,虽然驱动力不一样,但还是学到了很多。有句话说,“当你开始学习内存的时候,你已超越了90%的程序员。”之前无论是c,c++,还是java我都只停留在代码或者算法的地步,这3种语言我掌握的最好的应该就是c了,结果一个函数指针又让我认识到许多细节我已经忘了,真的是活到老,学到老啊!知识,需要温故而知新。
  • 在写了两个学期的博客之后,虽然我不太喜欢写博客,但我不得不承认我还是收获颇丰的~我的打字比以前更快了(当然也离不开代码的编写);因为我的习惯是每篇博客用一句诗做副标题,然后总结的时候谈一谈自己的感受或者本周发生的一些大事,这潜移默化的让我平时积累了更多的诗词,并对一些时事政治有了自己的思考。我不太喜欢写博客的原因,就是有着戴着枷锁跳舞的感觉,一般我写文章就是天马行空的那种~
  • 最后一点收获,我把他叫做习惯,养成习惯不容易,娄老师这学期让我们养成了不少习惯,虽然不知道之后还有多少,但是这其中定力和毅力已经有了。

自己需要改进的地方

  • 君子慎独,不欺暗室,没有老师监督的时候,我做的还不是很到位。同时时间的分配也不是很合理,娄老师也说了,我之前的态度不是很端正;所以导致我之前的分数一直很低,后来我一看这分数太少了,认真下了一波功夫,连拿几个5分;看来只要肯下时间,平时的测验拿个5分还是没有问题的,关键是你的态度,成绩与你的付出总是成正比的。
  • 这学期学的书很厚,每次考试前,我们都是站在知识体系巅峰的人,结果平时的测试一完,就都变成了张无忌。。所以,温故是必须的。
  • 实验,动手能力我还不是很强,而且我花了很久才把5个实验搞完;动手能力不行,亟待提高!

给学弟学妹们的学习建议

  • 建议谈不上,说点自己的想法。从上面的收获和需要改进的地方,有这么几点,需要学弟学妹们的注意。
  • 如果想真的学点东西,一定要温故,不然前脚学了后脚忘,孔子说的话都是真谛啊!
  • 其次,要端正态度,要有的放矢,分配好学习时间,尽量把学习任务平铺开,每天学一部分,周末时间多的话可以多学一点,但是不要把所有的任务都留在最后一天,这样会给自己造成很大压力。
  • 不要浮于表面,否则你什么也学不会。

问卷调查

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

  • 只能来波马后炮了,时间不能倒流这就很尴尬。
  • 首先就是温故知新,其次有的放矢,再次脚踏实地并不时抬头看路,最后勇于上问。

问卷调查

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

  • 23小时左右。

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

  • 最后几周效率很高,一波5分流~这也反应我前几周学习效率不高。。后来总结了一下,找到症结所在,奋起直追。

学习效果自己满意吗?

  • 还凑合吧。起码我认真的时候,拿5分还是没有问题的。不过有些时候明明花了时间,最终效果却并不好。

课程结束后会继续一周至少一篇博客吗?

  • 在学习java之前,我一直有在新浪博客发表文章,平时自己也喜欢写点小说、散文之类的,我是一个喜欢写字阅读的人,写文章就是我的习惯之一。不过,娄老师这种学术性博客,这个至少可以到大三下吧,因为有网络对抗~

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

  • 总结吧,每次写这种总结性的博客我都很开心,因为又可以畅所语言了,开心,开心。关键是之前你都在埋头走路,总结是抬头看路啊!!!
  • 试题讲解,太关键了,之前学习java的时候,每次考完,几乎就没有人关心考题了,这就很浪费,有没有……
  • 章节指导性讲解,这也很关键,之前学Java,有时候云里雾里的,这学期好多了。

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

  • 学习任务稍微均衡些就好了,有的章节有100页,一下看2章,很多的,老师。。

本学期你与老师和同学交互最多的一篇博客是哪篇?

  •  

20145211《信息安全系统设计基础》第十二周学习总结

本学期被阅读最多的博客是哪一篇?有何经验?

现在评价一下第0周提出的问题的质量,抓住重点了吗?

  • 基本都是把~我的语文功底还是相当深厚的。

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

  • linux让我们早点接触就好了,加分项目提高到20分就好了~
  • 其他的,老师做的很好。

给出本文链接和二维码

posted @ 2016-12-23 16:46  20145211  Views(339)  Comments(3Edit  收藏  举报