20155330 《信息安全系统设计基础》课程总结
20155330 《信息安全系统设计基础》课程总结
每周作业链接汇总
-
第一周作业:使用gcc编译器的常用选项、使用gdb调试技术、makefile基本原理及语法规范
-
第二周作业:vi测试、gcc测试
-
第三周作业:信息的表示和处理
-
第四周作业:实现myod、head,tail的使用
-
第五周作业:汇编语言、指令
-
第六周作业:使用gdb跟踪汇编代码、异常控制流、系统级I/O
-
第七周作业:Y86-64处理器
-
第八周作业:网络编程
-
第九周作业:存储器层次结构
-
第十周作业:实现state命令、研究Linux下IPC机制
-
第十一周作业:虚拟内存
-
第十二周作业:无
-
第十三周作业:总结学的最好的一章
-
第十四周作业:重学学的最差的一章
实验报告链接汇总
-
实验一 开发环境的熟悉:交叉编译
-
实验二 固件程序设计:MDK、LED、URAT、国密算法
-
实验三 实时系统:客户端-服务器通信
-
实验四 外设驱动程序设计:在虚拟设备驱动源码目录下编译并加载驱动模块
-
实验五 通信协议设计:OpenSSL、混合密码系统进行防护
代码托管链接和二维码:
- 截图 git log --pretty=format:"%h - %an, %ar : %s" 的结果
- 代码量汇总提交statistics.sh的支持截图
-
代码驱动的学习做到没有?
不算完全做到吧,主要还是参考别的代码再进行编写。
-
加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
代码学习主要还是在已有代码的基础上,加上自己的理解对代码进行改编,这学期的实践项目比较多,在一定程度上也提高了自己编写代码的能力。
-
实践上有什么经验教训
课堂实践还是需要提前的预习,在充分理解题意的情况下才能完成,临时抱佛脚是一种不可取的行为。
整体评价一下第1周作业中自己提出的问题是不是抓住了学习重点
第1周作业中的问题主要针对每章主题里的部分内容进行了提问,好像没有特别抓住其中的重点,主要还是对未学习内容提出了问题。
回答一下第1周作业中自己提出的问题
-
第一章:虚拟内存与物理内存的区别?
物理内存是安装在主机板上的内存。
虚拟内存是作业系统在硬盘上建立一个档案,把物理内存中不常用的部分拷贝起来,再把那个部分的物理内存清空,方便别的程序写入。虚拟内存的大小是可以自定,但是大小通常在物理内存的1到2倍之间,太大的话,虚拟内存的效能会下降。
因为虚拟内存在硬盘上,所以它的速度是取决于硬盘的存取速度、碎片的多少等。另外,因为它不像物理内存一样,资料与停机后消失,所以虚拟内存是可以透过解密方法读取其中的资料。
-
第二章:布尔代数如何在实际中应用?
布尔代数不仅可以在数学领域内实现集合运算,更广泛应用于电子学、计算机硬件、计算机软件等领域的逻辑运算:当集合内只包含两个元素(1和0)时,分别对应{真}和{假},可以用于实现对逻辑的判断。
常见的应用包括: 数字电路设计,0和1与数字电路中某个位的状态对应,例如:高电平、低电平。 计算机的网络设置,利用计算机的二进制特性,将子网掩码与本机IP地址进行逻辑与运算,可以得到计算机的网络地址和主机地址。 数据库应用,通过SQL语句查询数据库时需要进行逻辑运算,确定具体的查询目标。
-
第三章:机器级代码与C语言代码的区别?
-
对于机器级编程来说,两种抽象很重要:
1、指令集体系结构(Instruction set architecture ISA)
它定义了处理器状态、指令的格式,以及每条指令对状态的影响。
IA32将程序的行为描述成好像每条指令时按顺序执行的,一条指令结束后,下一条再开始。(实际上处理器并发地执行许多指令,但是可以采取措施保证整体行为与ISA指定的顺序执行完全一致)
2、机器级程序使用的存储器地址是虚拟地址
提供的存储器模型看上去是一个非常大的字节数组。存储器系统的实际实现是将多个硬件存储器和操作系统软件组合起来。
程序存储器(program memory)包含:程序的可执行机器代码、操作系统需要的一些信息、栈、堆。程序存储器用虚拟地址来寻址(此虚拟地址不是机器级虚拟地址)。操作系统负责管理虚拟地址空间(程序级虚拟地址),将虚拟地址翻译成实际处理器存储器中的物理地址(机器级虚拟地址)。
-
C语言
C语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。C语言传递参数均是以值传递(pass by value),另外也可以传递指针(a pointer passed by value)。
不同的变量类型可以用结构体(struct)组合在一起。
只有32个保留字(reserved keywords),使变量、函数命名有更多弹性。
部份的变量类型可以转换,例如整型和字符型变量。
通过指针(pointer),C语言可以容易的对存储器进行低级控制。
预编译处理(preprocessor)让C语言的编译更具有弹性。
-
-
第四章:SEQ具体指什么?
SEQ是 Sequential CPU的实现,表现在指令的执行要依次经历各个阶段(Fetch->Decode->Execut->Memory->WriteBack->PC Update).每一个指令在一个时钟周期内完成。
-
第五章:寄存器溢出的弊端?
不能很好的实现循环并行性,对维护多个累积变量的优势有一定影响。
-
第六章:局部性对存储器层次结构的重要意义?
有良好局部性的程序比局部性差的程序运行得快。
-
第七章:如何进行重定位?
重定位就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程,也就是说在装入时对目标程序中指令和数据的修改过程。
-
第八章:如何有效处理异常?
1.直接终止程序(自杀)
2.返回一个错误的值,附加错误码
3.返回一个合法的值,让程序处于某种非法的状态4.调用一个预先准备好在出现"错误"的情况下使用的函数.
5.通过暴力的方式解决:abort()函数和常见exit()函数.
6.使用goto语句
7.使用setjmp()与longjmp()
-
第九章:虚拟内存对系统的重要意义?
虚拟内存是用于当做内存来弥补计算机RAM空间缺乏的硬盘空间。当实际RAM满时(实际上,在RAM满之前),虚拟内存就在硬盘上创建了。当物理内存用完后,虚拟内存管理器选择最近没有用过的,低优先级的内存部分写到交换文件上。这个过程对应用是隐藏的,应用把虚拟内存和实际内存看作是一样的.
-
第十章:I/O如何进行重定向?
所谓的I / O重定向也就是让已创建的FD指向其他文件。在I / O重定向的过程中,不变的是FD 0/1/2代表STDIN / STDOUT / STDERR,变化的是文件描述符表中FD 0/1/2对应的具体文件,应用程序只关心前者。本质上这和接口的原理是相通的,通过一个间接层把功能的使用者和提供者解耦。
-
第十一章:如何进行C/S编程模型通信?
服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK段,服务器收到后从accept()返回。
-
第十二章:基于不同类型的并发编程的异同?
无论哪种并发机制,同步对共享数据的并发访问都是一个困难的问题。
进程是由内核自动调度的,而且因为它们有各自独立的虚拟地址空间,所以要实现共享数据,必须要有显式的IPC机制。
事件驱动程序创建它们自己的并发逻辑流,这些逻辑流被模型化为状态机,需用I/O多路复用来显式地调度这些流。
同基于进程的流一样,线程也是由内核自动调度的。
你有什么项目被加分,谈谈你的经验
- 项目 PWD
你有什么项目被扣分,谈谈你的教训
无。
课程收获与不足
-
自己的收获(投入,效率,效果等)
总的来说这学期其实还是自学的比较多,课堂实践内容相对来说要比课本学习复杂一点。C语言的编程能力有了一定的提升,对Linux操作系统和windows的不同有了更直观的感受。
-
自己需要改进的地方
这学期的学习效率好像要更低?自学容易抓不住重点,好像在一些不必要的内容上浪费了不少时间。
-
如果有结对,写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
在实验的时候能够高效的完成实验内容。
给开学初的你和学弟学妹们的学习建议
-
如果重新学习这门课,怎么做才可以学的更好?
多敲敲代码,有选择性的参考网络文章,能对课本内容有更好的了解。
问卷调查
-
你平均每周投入到本课程多长时间?
18-20小时
-
每周的学习效率有提高吗?
有的吧。
-
学习效果自己满意吗?
一般。
-
课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书送给你作纪念)
不会吧。
-
你觉得这门课老师应该继续做哪一件事情?
课下测试。
-
你觉得这门课老师应该停止做哪一件事情?
课堂笔记互评。
-
你觉得这门课老师应该开始做什么新的事情?
暂时没有什么好的建议。