20145212 《信息安全系统设计基础》课程总结
20145212 《信息安全系统设计基础》课程总结
每周作业链接汇总
- 简要内容:安装虚拟机VirtualBox、安装Linux系统;写出自己对这门课程学习的展望。
- 二维码
- 简要内容:学习了Linux系统中的常用命令:
man/find/locate/cheat/grep/which/whereis
;练习了实验楼中的课程。 - 二维码
- 简要内容:学习了vim的基本操作;学会使用gcc编译器;学习了gdb的调试。
- 二维码
- 简要内容:学习了操作系统中的信息表示和处理;学习了整数与浮点数的转换。
- 二维码
- 简要内容:学习了汇编;学会使用GDB调试汇编堆栈过程。
- 二维码
- 简要内容:安装了Y86处理器,了解Y86指令体系结构;学习ISA抽象。
- 二维码
- 简要内容:学习了局部性原理和缓存思想在存储层次结构中的应用;根据代码驱动的程序设计学习建立了项目结构。
- 二维码
- 简要内容:总结并复习了前7周的学习内容。
- 二维码
- 简要内容:学习Linux操作系统的基本I/O服务。
- 二维码
- 简要内容:学习并实践了常用指令的代码,加深了对指令的理解。
- 二维码
- 简要内容:学习了异常;通过实践了解了进程的并发。
- 二维码
- 简要内容:复习了了第九周、第十周、第十一周代码;进行了实验的汇总。
- 二维码
- 简要内容:学习了网络编程和多线程的基本内容
- 二维码
- 简要内容:学习了虚拟存储器的概念及其作用
- 二维码
实验报告链接汇总
- 二维码:
- 二维码:
- 二维码:
- 二维码:
- 二维码:
代码
托管链接和二维码:
- 代码托管链接
- 二维码
截图
- git log --pretty=format:"%h - %an, %ar : %s" 的结果
代码量汇总
关于第0周学习
回答一下第0周作业中自己提出的问题
第一章 多处理器与多线程的运行模式是什么样的?
- 多路处理器是服务器上的技术,就是多个CPU
CPU最初发展的时候是一个CPU一个处理核心,CPU的性能主要靠提高核心工作频率来提高,由于物理限制,不能把CPU的核心无限提高频率,所以发展出来双核心的CPU。两个核心一起工作需要靠软件的支持。
- 多线程:每一个程序可以包含至少一个线程,而多个线程之间可以“并发”执行。
第二章 浮点运算中IEEE标准的运算规则是什么样的? - IEEE定义了多种浮点格式,但最常见的是三种类型:单精度、双精度、扩展双精度
- 三种精度分别适用于不同的计算要求。
单精度适合一般计算
双精度适合科学计算
扩展双精度适合高精度计算
- 一个遵循IEEE 754标准的系统必须支持单精度类型(强制类型)、最好也支持双精度类型(推荐类型),至于扩展双精度类型可以随意。
第三章 条件跳转指令是否会像C语言中的goto语句一样使编码的结构变得紊乱?如果会,会造成什么影响? - 条件跳转指令检查一个或多个标志位,判断它们是否匹配某个特殊条件(就像setcc指令)
- 如果标志匹配成功,该指令就将控制转移到目标位置;如果匹配失败,CPU忽略该条件跳转指令而继续执行下一条指令。
- 一些条件跳转指令只是简单测试符号位(sign)、进位位(carry)、溢出位(overflow)、零标志(zero)位的设置。
第四章 Y86模拟器的控制逻辑具体是什么样的? - 这个问题本身就不太对……
第五章 对程序的优化具体应该从哪些方面下手? - 语句调整,用汇编重写
- 指令调整
- 循环展开
- 参数传递优化
第七章 动态链接是什么,如何实现?
- 动态链接需要解决空间浪费和更新困难这两个问题最简单的办法就是把程序的模块相互划分开来,形成独立的文件,而不再将他们静态的链接在一起。
- 简单地讲,就是不对那些组成程序的目标文件进行链接,等到程序要运行时才进行链接。
- 把链接这个过程推迟到了运行时再进行,这就是动态链接(Dynamic Linking)的基本思想。
第八章 系统在什么时候会出现异常,如何有效的避免这些异常?
- 异常指的是在程序运行过程中发生的异常事件,通常是由硬件问题或者程序设计问题所导致的。
- 异常的常见例子:有内存分配不足、数组下标越界、运算溢出或除数为零。
- 异常的捕获:
通过try…catch语句进行捕获异常。
通过throw抛出异常,throws向上一级调用方法抛出异常。
第九章 虚拟存储器中Linux缺页异常怎么解决?
- 利用异常表处理Linux内核态缺页异常
- 当系统启动分页机制以后,如果一条指令的虚拟地址所对应的页框(page frame)不在内存中或者访问的类型有错误,就会发生缺页异常。
- 处理器把引起缺页异常的虚拟地址装到寄存器CR2中,并提供一个出错码,指示引起缺页异常的存储器访问的类型,随后调用Linux的缺页异常处理函数进行处理。
- Linux中进行缺页异常处理的函数如下:
asmlinkage void do_page_fault
(struct pt_regs *regs, unsigned long error_code)
{
……………………
__asm__("movl %%cr2,%0":"=r" (address));
……………………
vma = find_vma(mm, address);
if (!vma)
goto bad_area;
if (vma->vm_start <= address)
goto good_area;
if (!(vma->vm_flags & VM_GROWSDOWN))
goto bad_area;
if (error_code & 4) {
if (address + 32 < regs->esp)
goto bad_area;
……………………
bad_area:
……………………
no_context:
/* Are we prepared to handle this kernel fault? */
if ((fixup = search_exception_table(regs->eip)) != 0) {
regs->eip = fixup;
return;
}
………………………
}
第十章 I/O函数该如何正确的使用?
- open 打开文件描述符
- read 读
- write 写
- close 关闭文件描述符
vfcntl 修改文件描述符,例如改为不阻塞 - lseek 移动文件读写的当前位置
- ioctl 与fcntl类似
- readdir 读取目录
- select 多路选择
- readlink 读取符号链接
- stat 读取文件属性
第十一章 Web服务器的动态内容中服务端和客户端遵循什么样的CGI规则? - CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。
- CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
- CGI在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。
第十二章 如何有效控制并发线程的不安全性? - 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
- 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据
- 一方面,对申请访问临界资源的所有线程要公平对待,不能对部分线程优先考虑,使一些线程长时间独占资源,而使其它的线程进行长时间的等待,得不到资源。
- 另一方面,在考虑了公平性的同时,也不能忽视了安全性的考虑,出现某一个线程访问临界资源,致使程序不能正常运行,产生严重的后果。
- 在Java中对多线程的并发控制应该做到公平性和安全性的理想兼容,两方面都不可忽视。并发系统的公平性使得资源在多线程之间得到相当科学和合理的分配,安全性保证了各线程的正常调度运行,从而使程序顺利地执行结束,完成任务。
你有什么项目被加分,谈谈你的经验
优秀作业
第2周作业
- 简要内容:学习了vim的基本操作;学会使用gcc编译器;学习了gdb的调试。
- 二维码
- 简要内容:学习了操作系统中的信息表示和处理;学习了整数与浮点数的转换。
- 二维码
- 简要内容:学习了局部性原理和缓存思想在存储层次结构中的应用;根据代码驱动的程序设计学习建立了项目结构。
- 二维码
- 简要内容:安装了Y86处理器,了解Y86指令体系结构;学习ISA抽象。
- 二维码
- 简要内容:学习了局部性原理和缓存思想在存储层次结构中的应用;根据代码驱动的程序设计学习建立了项目结构。
- 二维码
- 简要内容:总结并复习了前7周的学习内容。
- 二维码
- 简要内容:学习并实践了常用指令的代码,加深了对指令的理解。
- 二维码
- 简要内容:学习了异常;通过实践了解了进程的并发。
- 二维码
- 简要内容:学习了网络编程和多线程的基本内容
- 二维码
扇贝背单词
- 从上个学期学习JAVA的时候开始,已经坚持了300多天
GDB调试汇编堆栈过程分析
- 二维码
经验
这学期没有什么被扣分的项目,分数也一直都蛮好的,我觉得这一切最重要的就取决于态度,只要认真对待,完成了应做的事情,就一定会有相应的回报。
课程收获与不足
- 自己的收获
在两个学期这种自学模式的教学下,我自我学习的能力得到了很大的提高,不只是对于这门课的学习,我觉得有些东西是受益终生的。
记得老师曾经在课堂上说过,大意是如果在一段时间专注坚持做好一件事,那么长此以往,就会比大多数人更加优秀。这句话让我反思了很多。因为我从小就是一个三分钟热度的人,对很多东西都有兴趣都却很快就坚持不下去。但是如果我尝试着坚持,就能够有远比现在更加优秀。我想这门课对我而言最大的意义,不是学习了信息安全系统设计基础,而是改变了我的思想方式。 - 自己需要改进的地方
已经改变了很多,希望自己能够一直坚持下去。 - 给开学初的你和学弟学妹们的学习建议
- 言行一致,重在坚持。
- 不论何时都不要有浮躁的心态,用认真的态度对待每一件要做的事。
- 如果重新学习这门课,怎么做才可以学的更好
- 在学习处于繁忙状态的时候放宽心态,不要浮躁,冷静的面对问题。
问卷调查
- 你平均每周投入到本课程多长时间?
- 20小时
- 每周的学习效率有提高吗?
- 有提高
- 学习效果自己满意吗?
- 比较满意,还能做得更好
- 你觉得这门课老师应该继续做哪一件事情?
- 在某些章节进行闭卷考试我认为是很有必要的,因为有些答案虽然通过查阅书本就能够得到,但是这并不代表写对了题目就真的掌握了题目。
- 扇贝打卡加分是一个十分有利的促进学习的项目,希望可以一直延续。
- 你觉得这门课老师应该开始做什么新的事情?
- 可以鼓励学生在教材学习的基础上自己探索更深层的知识点,并总结写出博客,然后酌情加分。
补充
1.本学期你与老师和同学交互最多的一篇博客是哪篇?
- 是我在博客园中提出的小组话题:为什么实验楼给出的一个小程序里面除法永远结果都为0
2.本学期被阅读最多的博客是哪一篇?有何经验?
- 第二周学习总结
- 经验:
在第二周的博客中我详细的展现了在linux系统中使用git的过程,实践内容比较丰富,我想正是因为这样才被阅读和参考。其实,一个人是不是用心写博客,认真总结自己做的事情,大家都是能看得到的。
3.现在评价一下第0周提出的问题的质量,抓住重点了吗?
- 后几章一些部分抓住了重点,但是对于那些需要细节学习的章节(如反汇编),提出的问题就比较片面了。