20145335 《信息安全系统设计基础》课程总结
每周作业链接汇总
- 第0周:预习课本问题及安装虚拟机
- 第1周:了解linux核心命令
- 第2周:熟悉vim操作,用gcc编译代码
- 第3周:初步学习计算机中各种数的表示和运算
- 第5周:学习汇编,了解了逆向的思想应用
- 第6周:按装了Y86处理器,了解ISA抽象
- 第7周:学习掌握了存储器的体系结构
- 期中总结:复习前7章的知识
- 第9周:学习了系统级I/O
- 第10周:学习了常用的Linux指令,加深对指令的理解
- 第11周:学习了异常控制流
- 第12周:复习9、10、11的代码与实验
- 第13周:学习网络编程和并发编程
- 第14周:学习了虚拟存储器
实验链接总结
- 实验一:开发环境的熟悉
- 实验二:固件开发
- 实验三:实时系统的移植
- 实验四:驱动程序设计
- 实验五:网络通信
代码托管链接
-
注:之前的项目地址
Linux-besti-is-20145335
发生了损坏,上传的文件打不开,并且之前上传的格式没有完整的按照要求来,将bin
文件和src
文件上传到了一起。于是重新建立了一个新的项目Linux-bestiality-is-2016-2017-1-20145335
,并将原来旧项目地址的文件git clone
下来按照要求区分出bin
和src
文件重新传入新的项目中 -
使用
git log --pretty=format:"%h - %an, %ar : %s"
的截图
- 代码量汇总使用命令
wc -l find src -name *.c
出现问题,于是使用命令find .-name '*.c'|xargs wc -l *.c
,总用量如下。(里面部分代码是用来尝试虚拟机下git 是否能够连接成功能够上传的测试代码,还有一部分当时处于不及格队列中加练的代码)
- 关于代码驱动学习是否做到,我的答案是肯定的,做到了代码驱动学习,最开始对于娄老师的给出的代码托管,需要区分出
src
文件和bin
文件,在使用开源中国git上传的时候是如何做到可以分开传的,在学期的开始还是存在问题的,后来通过仔细阅读娄老师的《代码驱动的程序设计学习》,得到了问题是如何解决的,就比如原来使用gcc的命令只知道使用gcc a.c -o a
编译a.c
文件,后来学习了《代码驱动程序设计学习》知道gcc命令还可以使用成gcc /src 13/a.c -o /bin 13/a
这样就可以将src 13
文件夹中的a.c
文件编译到bin 13
中,这样就可以区分出src
和bin
文件,此时在使用git上传条理性就会清楚许多。 还有通过学习《代码驱动的程序设计学习》也会使用tree
命令来查看上传的代码是否有条理性。
- 在实践代码的基础上也是有所体会,在第九周的时候娄老师曾今发了学习代码,然而我只是编译并运行了而已,并附上了代码运行结果的截图,就以为完成了任务。可是娄老师的评论是代码不仅要运行更多要理解。后来明白了代码不能仅是运行,不然学习更多的是常用命令了,并不是所需要完成所学的代码。所以在第10、11周娄老师发的代码后就会在运行之前打开
.c
文件,看源代码,对于不动函数上网去百度,去查阅资料。就比如最开始接触的fork()
函数,对于刚了解到的子进程和父进程,就通过在源代码中加减fork()
函数的个数观察代码运行结果,在实践中学习。
第0周提出的学习问题
-
总的来说,只有小部分我提出的问题能抓住了重点,比如第6章:存储器是由哪些单元组成的,但是也大部分问题提出的太大,不够细致,比如第8章:系统是如何处理遇到的突发情况;第五章的:如何最大化的优化程序。虽然有些问题当时是认真思考过提出来的,但是现在看起来就像糊弄作业一样···
还有很多知识经过一学期的学习和最开始什么都不知道去对比还是很不一样。包括思考问题的角度和解决问题的方法,毕竟是当时是看着目录提出的问题,现在是学了一学期,更深的理解了课本的知识。
-
Q1:计算机的组件是如何工作?
答:计算机是由硬件和系统软件组成,它们共同工作来运行应用程序。
-
Q2:各种不同编码的运算区别?
答:现代计算机存储和处理信息以二进制信号表示。计算机用几种不同的二进制表示形式来编码数值。
-
Q3:程序语言如何转换成机器语言?
答:计算机执行机器代码,用字节序列编码低级的操作。GCC c语言编译器以汇编代码的形式产生输出,汇编代码是及其代码的文本表示,给出程序中的每一条指令。然后GCC 调用汇编器和链接器,从而根据汇编代码生成可执行的机器代码。
-
Q4:计算机处理器是如何设计的?
答:基于顺序操作,将这个处理器每条指令的执行分为五步,每个步骤由一个独立的硬件部分或者阶段来处理。
-
Q5:怎么最大化的优化程序?
答:第一步是消除不必要的内容,让代码尽可能有效地执行它期望的工作。第二步,利用处理器提供的指令集并行能力,同时执行多条指令。
-
Q6:存储器是由哪些层次结构组成的?
答:L0:寄存器;L1:告诉缓存;L2:告诉缓存;L3:高速缓存;L4:主存;L5:本地二级存储(本地磁盘);L6:远程二级存储(分布式文件系统、Web服务器);
-
Q7:链接器起到的功能是什么?
答:链接器是将个中国代码和数据收集起来并组合成一个单一文件的过程。
-
Q8:系统是如何处理遇到的突发状况?
答:通过控制异常控制流来处理遇到的突发状况。
-
Q9:储存器怎么管理最高效?
答:现代操作系统对主存提供了一个抽象概念,叫做虚拟存储器。
-
Q10:系统级的IO和原来java中遇到的IO有什么不同?
答:系统及I/O是指所有计算机操作系统中文件的输入与输出。而java中的I/O是指数据信息通过程序的写入和写出
-
Q11:如何编写客户端-服务器程序?
答:通过常用的socket()、linsten()、connection()函数来编写程序。
-
Q12:三种不同的并发程序技术的区别?
答:使用进程并发必须使用某种显式的进程间通信机制;使用I/O多路复用,所有的流都会共享一个地址空间。;使用线程,像进程流一样由内核进行调度,而像I/O多路复用流一样共享一个虚拟地址空间。
加分项目
-
有些加分项目是遇到了问题,将问题放在了小组论坛上,和同学一起讨论。关于计算机的学习,每个人总是会遇到各种各样的问题,当把问题放到一起,大家一起讨论一下,不仅遇到的问题可以解决,通过讨论,印象更深刻。
-
另一个加分项目是《GDB调试汇编堆栈过程分析》最开始完成这个项目的时候,最后的表格即堆栈的变化不太清楚,后来再次执行了一次,并修改了博客内容,得到了加分。
二维码:
-
还有加分博客
第六周:[click here](http://www.cnblogs.com/20145335hh/p/5990427.html) 第八周:[click here](http://www.cnblogs.com/20145335hh/p/6035068.html) 第十一周:[click here](http://www.cnblogs.com/20145335hh/p/6107369.html)
-
还有一个作业是《MarkdownPad2使用心得》虽然不是加分作业,但是是主动去写的一篇博客,也是很认真去完成的。
二维码:
扣分项目
- 没有过项目被扣分。虽然成绩不是很高,但是每一步都按照老师的要求的来,所以没有过项目被扣分。
待及格队列管理制度
-
优点
首先待及格管理制度会有忧患意识。就是知道自己已经不及格了,就会更加努力的去学习,达到及格线并且努力取得更好的成绩。这种授课方式,一步跟不上,步步跟不上。同时也能督促着多学习。
-
缺点
是额外增加的学习内容。进入不及格队列的原因是因为之前的考试不及格或者前几次积累下来导致不及格。所以希望增加额外学习内容是与之有关的,而不是随便学习一部分内容发篇博客就算完成任务,这样该没有掌握的内容还依然没有掌握。希望老师能够监督待及格同学圈定学习内容。
课程的收获与不足
-
自己收获的地方
这门课程是《深入理解计算机操作系统》目的是系统的理解计算机中硬件和操作系统是具体如何实现应用的,存储器、处理器、还有机器语言都是如何使用的。已经是第6个学期了,虽然原来不论是《计算机导论的课程》还是《c语言程序设计基础》、《Java程序设计基础》都会多多少少了解部分计算机硬件知识。但是通过这一学期的学习对于就计算机这些知识有了更加深入的理解和感悟。
同样觉得最大的收获是会使用Linux操作系统,会使用各种各样的命令来操作计算机包括虚拟机,当在虚拟机下完成一些简单的操作,打开文件,编译运行文件,查看帮助手册,用git托管代码,查看托管日志,都是通过熟练的掌握命令时候就发现成就感满满。
-
自己不足的地方
不足的地方还是在于学习上。在第一节课上老师对于这门课程做出了学习计划。首先,对于每周代码的编译数量存在不足,没有严格的按照计划实行。有些老师给的带代码仅仅只是编译了运行了结果,掌握了代码功能,但是并不清楚具体使用的函数是如何实现这些功能的。
有时候惰性太大,博客作业总是想拖到周末去完成。偶尔加上其它课程总是完成的不够好。
给学弟学妹的建议
-
如果重新学习,怎么做才可以学的更好:
如果重新学习《深入理解计算机操作》这门课程,我觉得首先需要按照每周的学习计划完成,不论是代码还是课本知识的学习,可能知识量会很大,但是还是需要坚持去做。就如同《java程序设计基础》一样,一部跟不上步步跟不上,所以一定要坚持去做
其次是多编译程序,已经学习过c语言和java语言,可能掌握的不是很扎实,但还是需要多编程多训练。尤其是虚拟机的使用,用常用的Linux命令去完成一些打开文件,编译运行文件,查看帮助手册,用git托管代码,查看托管日志等简单操作。也不需要 强行去记忆命令,多多使用,孰能生巧,长时间去练习就可以掌握。
问卷调查
-
你平均每周投入到本课程多长时间?
大概25-35个小时,平均都在30个小时左右。
-
每周的学习效率有提高吗?
有提高,经过上学期的java课程的学习,已经基本适应这种授课方式,效率会有所提高
-
学习效果自己满意吗?
不是很满意,因为进过一次待及格对列,之后再想追赶就很难了,即使一步步去按照要求去做,也还是和其他同学相比会差一些。所以对于这次的学习效果不是非常满意。
-
课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书送给你作纪念)
课程结束后应该会继续去写博客吧,除了作业必须要求的之外也许会写一些有关电脑等知识面的随笔。
-
你觉得这门课老师应该继续做哪一件事情?
我觉得老师应该坚持让同学学会使用git来管理代码,不仅方便老师的坚持,对于自己的查看也会十分方便。
还有坚持待及格管理制度,这样会有很强的忧患意识能够督促学习
-
你觉得这门课老师应该停止做哪一件事情?
我觉得老师可以减少组队的次数,有些人会因为其他客观或者主观或者懒惰等原因没有很好的完成内容导致影响队友的成绩。
-
你觉得这门课老师应该开始做什么新的事情?
我觉得这门课是一门计算机的课程,老师应该在一些重点的知识点方面讲解一下,或者对于测试题目难度大的进行讲解,毕竟每个人的接受能力不一样,并不是完全的自学都可以得到好的成绩。