20155236 《信息安全系统设计基础》课程总结
每周作业链接汇总
-
- 简要内容:GCC编译器,库的链接
- 二维码:
-
- 简要内容:vim学习,gcc、gdb的使用
- 二维码:
-
- 简要内容:信息的表示和处理,对信息在计算机中的存储进行介绍
- 二维码:
-
- 简要内容:系统级I/O
- 二维码:
-
- 简要内容:程序的机器级表示,linux中的汇编介绍
- 二维码:
-
- 简要内容:处理器体系结构,Y86指令集体系结构
- 二维码:
-
- 简要内容:网络编程与并发线程以及多线程程序中的变量共享
- 二维码:
-
- 简要内容:存储器层次结构
- 二维码:
-
- 简要内容:实现pwd命令
- 二维码:
-
[20155236 《信息安全系统设计基础》第11周学习总结]http://www.cnblogs.com/fcgfcgfcg/p/7966694.html)
- 简要内容:
ls -l
命令 - 二维码:
- 简要内容:
-
- 简要内容:掌握并发的方式,线程控制及相关系统调用
- 二维码:
-
- 简要内容:程序的机器级表示
- 二维码:
实验报告链接汇总
-
20155236 《信息安全系统设计基础》实验一 开发环境的熟悉
- 简要内容:熟悉 linux 开发环境
- 二维码:
-
20155236 《信息安全系统设计基础》实验二 固件程序设计
- 简要内容:了解多线程程序设计的基本原理
- 二维码:
-
- 简要内容:利用并发程序,实现 wc 命令
- 二维码:
-
20155236 《信息安全系统设计基础》实验四 外设驱动程序设计
- 简要内容:掌握实时系统应用和驱动程序的编写,学会以实用模块化方式来进行驱动开发与调试。
- 二维码:
-
20155236 《信息安全系统设计基础》实验五 通信协议设计
- 简要内容:基于OenSSL实现混合密码防护
- 二维码:
代码托管汇总
-
代码托管链接和二维码
二维码:
-
截图 git log --pretty=format:"%h - %an, %ar : %s" 的结果: (因为之前一直没提交代码,这次一并提交)
-
代码量汇总提交statistics.sh的支持截图:
-
代码驱动的学习
- 完成学习任务时如果我们缺少思考,累却收获不大,从而失去学习的激情。当我在学习的过程中产生了一些厌烦、懈怠的情绪时,我会较为自觉的主动说服自己让自己对这一门课重新燃起希望。
- 我不否认信息安全是我高中毕业时梦寐以求的专业这一客观因素,可能也正是这个因素使得我在学习过程中克服了许多的不良情绪。但我也想说,人嘛,都有偷懒的时候,也都有对困难的事情感到畏缩的时候,但通过娄老师的细心指导,我找到了能克服不良情绪的根本原因——代码驱动的程序设计学习。
-
编程的学习,代码驱动是个很好的方式,我们的教材《深入理解计算机系统V2》是那么厚的一本书,通过使用git和gdb来积极主动的读写代码是一个很好的方式。积极主动的前提是自己有思考,不是仅仅完成老师的任务,那么按照下面的方法学习,这学期收获的不是一门功课的好成绩,而是为学习信息安全专业打下的坚实的计算机基础:程序设计、操作系统、计算机组成原理、汇编语言、编译原理、计算机网络、软件工程……
- 人生不如意十之八九,学习尚且存在许多烦恼,更不必说“编写代码”这个技术活了。我们带着对代码的思考,对问题的思索,去探究代码的魅力,会发现短短几行代码背后所包含的知识点是非常广的。而通过这些代码反映出来的知识也正是我们课本中的理论所学啊!
- 而我认为代码驱动学习的魅力也在于此,我在书中与他们(理论、知识点)相遇,可能只是粗粗一瞥,彼此之间没有发生任何故事;而在后续编程实践过程中,随着我编程的需要不断思索,而他们在此时便会一一浮现在我眼前,再次遇见他们,对他们有了更深厚的情感,发现我更了解他们了,发现他们也更愿意接受我了。我想这种感觉会激发更大的学习兴趣吧~
-
-
编程是一种创造性的工作,是一门艺术。精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的“智慧”,并不是号称一天瘦十斤的减肥药,它并不能代替你自己的勤奋。然而由于软件行业喜欢标新立异,喜欢把简单的事情搞复杂,我希望这些文字能给迷惑中的人们指出一些正确的方向,让他们少走一些弯路,基本做到一分耕耘一分收获。
- 学习代码是一门艺术,因为代码也叫“编程语言”嘛!既然是语言,他就有他独特的表达习惯与语法规则。在做到遵循其基本的规则后,我认为学习代码和读书是一回事,也是一个由薄到厚由厚到薄的过程,是一个量变产生质变的过程。
- 短短几行代码,可能换几行的顺序,改改控制条件,变动一个字符,代码的结果和原来的或许就会大相径庭。而这产生的差异正式我们要思索的,这也就是由薄到厚的过程。刚才已经介绍了,既然他是一门语言,表达内容当然自由,就和我们说话一样,同样一个意思,可以换许多种方法表达,但如何表达精炼且符合规范这就需要炉火纯青的技术了,明明10行代码足以解决所有问题,而您却偏偏写了100行代码,顺序、循环、选择结构随便乱用,这两者之间孰好孰差就一目明了。所以,如何用简短的表达实现预期的效果,这就是提炼的过程,是将学习编程由厚到薄的过程。
-
-
实践上经验教训
- git是个好东西,但是我之前一直没有git push...,以后一定要及时git,而且课上得实践如果不能及时完成,课下的时候一定要去问同学,把课下补做的做完。
整体评价一下第1周作业中自己提出的问题是不是抓住了学习重点
第1章:一个“hello.c”程序的生命周期到底是怎样的?
- 答:
- C预处理器——扩展源代码-生成.i文件
- 编译器——产生两个源代码的汇编代码-——生成.s文件
- 汇编器——将汇编代码转化成二进制目标代码——生成.o文件
- 链接器——产生可执行代码文件
第2章:计算机对数据信息的处理与现实生活中的计算到底有何异同,计算机对数字处理的数学原理是什么?
- 答:计算机系统中的所有信息都是以二进制形式存储的,计算机系统规定了三种重要的编码方式:无符号编码、补码编码、浮点数编码。
第3章:Intel IA32和x86-64两种汇编语言有何异同,能否通过本章的学习使自己能够理解编译器优化的能力?
- 答:
- Intel处理器系列:俗称x86,开始时是第一代单芯片、16位微处理器之一。
- DOS时代的平坦模式,不区分用户空间和内核空间,很不安全;
- 8086的分段模式;
- IA32的带保护模式的平坦模式
- 每个后继处理器的设计都是后向兼容的,可以保证较早版本上编译的代码在较新的处理器上运行。
第4章:处理器的硬件设计是如何与操作系统进行搭配的?
- 答:处理器管理的第一项工作是处理中断事件,硬件只能发现中断事件,捕捉它并产生中断信号,但不能进行处理。配置了操作系统,就能对中断事件进行处理。处理器管理的第二项工作是处理器调度,并引入了进程与线程的概念。
第5章:对程序进行优化的方法有哪些,在哪些情况下会更适用哪一种方法?
- 答:
- 消除循环的低效率:固定不变的东西提出循环,减少每次循环都计算相同的内容,这一点对性能的提升时很明显的;
- 减少过程的调用:消除循环中的过程调用,可通过函数提前得到需要操作的对象,这样会提高速度,但是模块性降低;
- 消除不必要的存储器引用:函数参数为指针时,如果循环中用到指针,需要对指针的地址进行访问,则每一次访问都会进行取指,执行,存储等操作,这时最好在函数中声明临时变量,在循环中用临时变量,这样直接就可以对变量进行赋值,循环结束之后,再将结果赋给指针地址。
第6章:存储技术是如何被组织成层次结构的?
- 答:
第7章:链接器在软件开发中扮演了怎样一个角色?
- 答:链接器是将一个或多个由编译器或汇编器生成的目标文件外加库链接为一个可执行文件的程序,它的两个主要任务是:符号解析及重定位。
第8章:应用程序是如何与操作系统交互的?
- 答:进程的经典定义就是执行中程序的实例。它提供了一种假象使得我们以为自己在独占处理器和存储器。首先来看独占处理器的假象,在有n个进程的操作系统中,这n个进程轮流执行一个时间片,然后被抢占。其中每个进程中程序计数器(即PC)的值序列与别的进程中的序列是相互独立的,这样就为我们制造了一种处理器只运行自己程序的假象。再来看独占存储器的假象,在一个有n位地址的机器上,地址空间是
1—2^n-1
的集合,每个进程都有2^n
大小的地址空间。其他进程不能访问,至于它的实现主要是虚拟存储器来实现的。
第9章:虚拟存储器是如何工作的,应用程序是如何使用和管理虚拟存储器?
- 将主存看成磁盘地址空间的高速缓存。
- 只保留了活动区域,并根据需要在磁盘和主存间来回传送数据,高效使用主存。
- 为每个进程提供一致的地址空间
- 简化存储器管理
- 保护了每个进程的地址空间不被其他进程破坏。
第10章:Unix I/O和标准I/O的一般概念是什么?
- 答:对于大多数应用程序而言,标准I/O更简单,是优于Unix I/O的选择。然而在网络套接字的编程中,要使用健壮的RIO函数。因为RIO函数提供了带缓冲的读操作,与无缓冲的写操作(对于套接字来说不需要),且是线程安全的。
第11章:Web服务器如何搭建,怎样实现其功能?
- 客户端:
- 通过socket函数获取一个socket文件描述符。程序通过这个文件描述符与内核的tcp/ip架构通讯联系。
- 通过该描述符请求与服务器的连接(connect函数),此时需要事先知道服务器的ip和服务器上的应用程序的端口
- 当connect函数成功返回,则表示连接达成,则可通过该文件描述符或者recv,send该文件描述符,即可实现与某服务器端的通信
- 服务器端:
- 通过socket函数获取一个socket文件描述符。程序通过这个文件描述符与内核的tcp/ip架构通讯联系。
- 绑定端口(bind函数),端口人为设置,本机IP自动获取即可(端口和IP设置通过sockaddr_in结构体实现)。
- 监听socket函数返回文件描述符(listen函数)
- 当listen函数返回时,表示有请求,则使用accept获取请求,accept函数产生一个新的文件描述符,用于和该请求通信。
- 读写该文件描述符或者recv,send该文件描述符,即可实现与某客户端的通信
- 服务器端还可以继续监听socket文件描述符,接受其他端口的请求
- 运行时,应该先启用服务器端。
第12章:三种并发编程的技术有何异同?
- 答:
- 进程,用内核来调用和维护,有独立的虚拟地址空间,显式的进程间通信机制。
- I/O多路复用,应用程序在一个进程的上下文中显式的调度控制流。逻辑流被模型化为状态机。
- 线程,运行在一个单一进程上下文中的逻辑流。由内核进行调度,共享同一个虚拟地址空间。
加分项目和扣分项目
一直表现平庸,没有什么加分也没什么扣分,就是两次课上实践没有做完。课下写了博客,不知道娄老师看到了没有。。
课程收获与不足
- 收获:
- 能熟练使用虚拟机,不再像之前一样抵触它了。
- Linux,我专业方面的造诣可能不深,截至目前,计算机操作系统中也就接触过windows和Linux和mac,但经过这2学期的对比,发现,Linux和mac在某些方面确实比windows厉害不少,比如下载可以直接用命令之类的。
- 学会时刻将信息托管云盘。
- 不足:
- 自制力太差,很多事拖到最后两天才开始着手去做。
- 效率太低,很多知识点看几遍还不能完全理解
- 结对:
- 我觉得结对学习用处不大吧,大家还是习惯于自己练习,自己去完成一些作业。
- 如果重新学习这门课,怎么做才可以学的更好:
- 还是培养兴趣吧,如果你是逼着自己学那真的没有意义,有兴趣在入门真的会便捷许多。
建议
-
我觉得其实我们并不能完全做完自学,我相信很多人跟我一样自制力是很差的,这样基本完全放养的方式,不适合当代学生吧,毕竟九年义务教育和高中已经给我们定了很大一部分性了,所以还是按照课时为单位去完成学习任务比较好吧。。。我知道编程其实很难学,但有些事情真的是凭兴趣才能自学成才学好的,我更相信各有所长,每个人都应该是不一样的,不应该用统一的机械化管理去流水线生产学生。所以请老师以后重点培养那些有浓厚兴趣的人,如果有不感兴趣的只是为了及格的,也请手下留情,学会了基础知识,我认为就可以了。
-
其次我认为课堂里应该有一种互助氛围啊。不能说他们处于挂科边缘,其余人就高枕无忧,或者睁一只眼闭一只眼了。或是能力不足、或是接受很慢、或是态度问题,但这些问题被发现后,如果能针对性解决,实现班级里互助,提供一些学习中必要的指导帮助是不是更好。
问卷调查
你平均每周投入到本课程多长时间?
- 答:10小时左右.感觉最后写每周总结还是花了一部分时间的。
每周的学习效率有提高吗?
- 答:有时候翻开课本会感觉非常多,无从下手。我的做法往往是看一看教学进程。
学习效果自己满意吗?
- 答:非常不满意吧,但是总比没有学习强很多,学会了一些以前根本不懂的知识。
课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书送给你作纪念)
- 答:有可能会吧,可能会写一些自己喜欢的东西。
你觉得这门课老师应该继续做哪一件事情?
- 答:继续这样的考核方式吧,能督促学习。
你觉得这门课老师应该停止做哪一件事情?
- 答:我觉得可以停一下针对后几名的政策。
你觉得这门课老师应该开始做什么新的事情?
- 答:
- 就这门课来说,我觉得实验我并没有弄懂,如果老师在下次做实验前能讲一讲就最好啦,带着目的去做,就可以不用过分依赖教程了。
- 同样的,我认为对于一些难的章节,如果也能提前多讲讲,教学进程里详细写写就更好了,毕竟带着目的学习可能会避免走许多弯路。(虽然碰壁走弯路也是一种学习体验,一种经验积累)
- 我觉得,博客这个平台还是有一定的限制,这也就是为什么最初我们都愿意在微信群里提问,可能还是少许不便吧。就是时间间隔很长我并不能及时收到提醒。
转载请注明出处
- 本文链接
- 二维码: