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

每周作业链接汇总

第一周

简要内容

  • 第一章:
    计算机系统由硬件和系统软件组成,两者共同运作以运行应用程序。内部信息被表示为一组组的位,位依据上下文有不同的解释方式。
    程序被其他翻译程序翻译成不同形式,开始是被翻译成ASCII文本,然后被翻译成计算机可执行的二进制文本。如果是用Code::Blocks等编译软件编译,则在编译完成后自动生成可执行文本;若是用vim,则必须手动完成翻译工作。
    处理器通过读取并解释二进制指令来运行程序。
  • 第七章:
    链接可以在编译时依靠静态编译器完成,也可以在加载时靠动态链接器完成。链接器的目标文件只有二进制文件一种。
    链接器主要任务有二:符号解析和重新定义。
    GCC编译器在工作过程中调用得到的链接器为静态链接器,其他编译驱动程序亦是如此。
    与编译位置无关的代码的共享库可以加载到任何地方,亦可以在运行中被多个进程共享。

二维码

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

第三周

简要内容

计算机将信息编码为比特,通常组织成字节序列。
有不同的编码方式来表示整数、实数和字符串。
现代计算机绝大多数是64位字长机,即是本计算机的虚拟地址空间为16EB,大约是1.841019字节。然而我的笔记本电脑是32位字长机,其虚拟地址空间只有4GB,刚超过4109字节。
计算机内一个字节八个比特,值域0000000011111111。用十进制表示为0255,十六进制是00FF,或是0x000xFF。
计算机用16位ASCII值表示所有字符。
布尔代数用于逻辑计算,布尔数只有0和1两个数,结果也只有0和1两种,逻辑运算符只有~(非)、&(与)、|(或)、^(非或)。
二进制小数表示方法是依据小数点后几位来表示对应的2的负几次方,如二进制小数0.001表示十进制小数0.125,不过这种表示方法只能在表示x/2^n时能十分精确,形如十分之一这类分母不是2的几次方的小数,计算机只能通过二进制小数来近似表示。这类小数在不同的计算机容易引起不必要的误差。
IEEE 754标准是由美国电气电子工程师学会(IEEE)计算机学会旗下的微处理器标准委员会(Microprocessor Standards Committee, MSC)发布。

二维码

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

第四周

简要内容

  • 第十章
    Linux提供了一些基于UnixI/O模型的系统级函数,它们允许应用程序打开、关闭、读写文件,提取文件元数据,以及执行I/O重定向。
    使用读写函数时容易出现不足值,处理不足值的方法有两种:要么自己编写程序时就预先对这些不足值进行处理,要么应用RIO包,这个包反复读写直到传送完所有请求数据都读取完毕,然后自动处理不足值。
    标准I/O库是基于UnixI/O库实现的,并提供一组强大的高级I/O例程。标准I/O比UnixI/O更简洁,但是对于网络应用程序,Unix的更适合。
  • 错误处理
    附录内有三种错误风格报告函数:void unix_error(char msg)、void posix_error(int code,char msg)、* void gai_error(int code,char msg)。这些错误报告函数对应的风格就是Unix的错误、Posix的错误及GAI错误。还有一个void add_error(char msg)*,这个只是一个用来反馈错误的函数,并不是报告错误的函数。

二维码

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

第五周

简要内容

  • 逆向工程
    逆向工程则是先获取已有的成品,然后通过反向分析推导出完成该产品所需的大部分数据。在计算机编程当中,使用逆向工程通常指的是对已有软件进行反汇编(反向开大日代码……),通过汇编代码来得到目标软件的设计思路及实现方式。
  • 指令集体系结构
    ISA(指令集体系结构)包含以下四种: 复杂指令集运算(Complex Instruction Set Computing,CISC);精简指令集运算(Reduced Instruction Set Computing,RISC) ;显式并行指令集运算(Explicitly Parallel Instruction Computing,EPIC);超长指令字指令集运算(VLIW)。

二维码

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

第七周

简要内容

  • ISA(指令集体系结构)抽象的作用
  • ISA
  • 流水线
  • Y86-64指令
  • HCL语言
  • Y86-64执行模式

二维码

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

第八周

简要内容

  • 进程
  • I/O多路复用
  • 线程

二维码

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

第九周

简要内容

  • 常见的存储技术
  • 局部性
  • 缓存
  • 局部性原理和缓存思想在存储层次结构中的应用

二维码

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

第十一周

简要内容

  • 虚拟存储器
  • 地址翻译
  • 存储器映射
  • 动态存储器分配的方法
  • 分配算法
  • 垃圾收集
  • C语言中与存储器有关的错误

二维码

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

第十三周

简要内容

对我认为重要的第十二章重新学习过一遍,并把我认为的重点写上去。

二维码

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

第十四周

简要内容

我第八章学习得不行,便重新学习一遍,一并将错过或误解的内容附上去。

二维码

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

实验报告链接汇总

实验一——开发环境的熟悉

  • 交叉编译环境
  • 目标机宿主机联通
  • 目标机运行程序
  • 目标机模块分解
  • 清理工作

二维码

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

实验二——固件程序设计

  • MDK
  • LED
  • UART
  • SM2,SM3,SM4
    -SM1加密解密实验

二维码

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

实验三——实时系统

  • 实验一
    学习使用Linux命令wc(1)
    基于Linux Socket程序设计实现wc(1)服务器(端口号是你学号的后6位)和客户端
  • 实验二
    使用多线程实现wc服务器并使用同步互斥机制保证计数正确

二维码

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

实验四—— 外设驱动程序设计

  • 任务一
    学习资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章
    提交康奈尔笔记的照片
  • 任务二
    在Ubuntu完成资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章的test试验
    提交编译,加载模块,卸载模块,测试运行的截图(要多张,全屏,体现学号信息)

二维码

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

实验五——通讯协议设计

  • 任务一
    在Ubuntu中完成 http://www.cnblogs.com/rocedu/p/5087623.html 中的作业。
    与他人协作,测试同一个OpenSSL包的加密算法。测试加密算法:AES、RSA、MD5。经过测试各算法的确有效。
    通信服务器和客户端需要相互确认。所以基于此,加密通信只能使用公钥加密算法RSA,进行通信之前先生成密钥文件。
  • 任务二
    在Ubuntu中实现对实验三中的“wc服务器”通过混合密码系统进行防护。

二维码

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

代码托管

托管二维码

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

代码提交日志

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

代码总量

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

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

答:在部分上做到了。只是在对多线程多进程上,还有尝试理解不占用内存的编码方式上用过,其他情况就只是看着每行代码去对着课本学习。

加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得

从原有代码当中添加一些自己新学习的代码,是一个很有效的学习方法,至少我不用考虑怎么重新搭建一个大框架以学习一小片的代码。目前我还不能搭建出成百上千行的大规模代码,最多就是东拼西凑,可能不能很好地实现“高内聚,低耦合”的编码理念。

实践上有什么经验教训

也许我应该在每一个代码里面添加计时功能,有时候我并不知道哪类代码结构更快出结果。

整体评价一下第1周作业中自己提出的问题是不是抓住了学习重点

有些有,有些没有。我并没有做到通读每一章,基本上除了第一和第七章是完全读过学过而没有疑惑,其他章节就是看了每章最后的总结就提问了。

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

  • 第二章:计算机有32位与64位之分,分别何在?两种计算机所存数据相互交换,会出现什么情况?
    32位和64位指的是计算机最大的无符号整型数据的最大值,32位指的是最大无符号整型数为232-1,64位则是264-1。64位机的数据传输给32位机,如果不提前做好准备的话有可能32位机会出现溢出;64位获得32位机的数据则不会出现溢出。
  • 第三章:条件控制来实现条件分支和条件传送来实现条件分支有何实质性区别?
    条件控制方式所消耗的内存资源比条件传送的要多,实现起来,条件控制比条件传送要低效的多。
  • 第四章:到底什么系统会用到Y86-64代码?
    就目前来看,Y86-64代码只是一个对X86-64代码的翻译。Y86-64代码比X86-64代码要更容易被人读懂。
  • 第五章:怎么样的代码是不必要的引用内存?
    每次循环都是将内存中取值再将递增的值传回内存的代码就是不必要的引用内存。
  • 第六章:“高速缓存存储器”与“内存”有何相关?
    高速缓存存储器一般可以说就是内存。
  • 第八章:有何种异常种类可以是通过代码故意实现的?
    除了因为设备引起的异常之外,绝大部分异常都可以通过代码故意引起。
  • 第九章:Linux虚拟机怎么调用我宿主机的i7核?
    Linux是把所有程序都看成文件对待,因此Linux虚拟机想用我的i7核,只用将i7核的相关信息转换成文件,Linux就可调用。
  • 第十章:Unix的I/O和Java的I/O有何区别?
    Unix的I/O使用起来不需要太多的准备工作,而Java的需要。
  • 第十一章:客户端和服务器怎么相互连接?
    无论是基于TCP协议还是UDP协议,客户端和服务器的连接需要传输彼此的IP地址。
  • 第十二章:目录所提及的三种并发模式,其优点和缺点有什么?
    进程并发实现起来最简单,但是不能及时将内存资源腾出给新的进程。
    I/O多路复用可以很好的利用系统资源,但是代码复杂度随预计访问量的上升而上升。
    线程并发有上两者的优点,但是必须依靠信号量来解决竞争冲突。

课程收获与不足

  • 收获:
    学习到一个开放式操作系统的运行结构和体系,学会使用不同的方法看待问题。
  • 不足:
    永远是超过计划用时地学习,有时还将学习时间调的过高,导致没有给其他科目留下时间来完成。

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

都%¥#给我滚去早点看书、早点学习,别整天到处晃悠!

问卷调查

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

  • 每周的学习效率有提高吗?
    感觉很像正弦曲线。
  • 学习效果自己满意吗?
    肯定不满意!无用功做得太多。
  • 课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书送给你作纪念)
    能做到一周一/多篇,但是内容就可能很少涉及本课程了,有可能还不一定是学习的内容,到时候就不用留作纪念了,内容太乱我自己都看得心烦。
  • 你觉得这门课老师应该继续做哪一件事情?
    叫学生通过写博客记录自己的学习过程。
  • 你觉得这门课老师应该停止做哪一件事情?
    以后实验报告博客叫每个同学都写,实验还分不分组无所谓,但是不能说谁苦劳多谁的搭档来写报告,这不是一个好主意。
  • 你觉得这门课老师应该开始做什么新的事情?
    玩玩在线视频教学,在没开学的时候?