20155318 《信息安全系统设计基础》课程总结
20155318 《信息安全系统设计基础》课程总结
每周作业链接汇总
-
第一周作业:Linux下开发环境、vi基本操作、gcc编译器的使用,对每章提一个问题
-
第二周作业:补做课堂实践、学习静态库和动态库,模仿od实现myod
-
第三周作业:理解有符号整数、无符号整数、浮点数的表示,避免C语言中溢出,数据类型转换中的陷阱和可能会导致的漏洞
-
第四周作业:补充课上实践,掌握系统编程错误处理的方式;掌握Unix/Linux系统级I/O:open close read write seek stat;掌握I/O重定向的方法
-
第五周作业:X86汇编基础、ISA(指令集体系结构)、使用GDB进行调试
-
第六周作业:了解异常及其种类、理解进程和并发的概念、掌握进程创建和控制的系统调用及函数使用
-
第七周作业:ISA抽象及其作用、流水线和实现方式
-
第八周作业:进程、线程、I/O多路复用三种并发方式,线程同步互斥及相关系统调用
-
第九周作业:RAM、ROM、磁盘、固态硬盘等存储技术,局部性原理和缓存思想在存储层次结构中的应用
-
第十周作业:补交第十周课上测试,Linux下IPC机制
-
第十一周作业:虚拟存储器、地址翻译、存储器映射、动态存储器分配方法
-
第十三周作业:重新学习教材第十二章:并发编程,完成该章课后习题
-
第十四周作业:重新学习教材第四章《处理器体系结构》,完成该章习题
实验报告链接汇总
-
实验一 开发环境的熟悉:配置交叉编译环境、连通目标机和宿主机、使用目标机运行程序
-
实验二 固件程序设计:MDK、LED、UART、国密算法、SM1
-
实验三 实时系统报告:基于socket实现mywc,使用多线程实现wc服务器并使用同步互斥机制保证计数正确
-
实验四 外设驱动程序设计:完成“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章的test试验
-
实验五 通讯协议设计:Linux下OpenSSL的安装与测试、基于Socket实现TCP通信、研究OpenSSL算法,测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5、实现对实验二中的“wc服务器”通过混合密码系统进行防护
代码托管链接和二维码
-
截图 git log --pretty=format:"%h - %an, %ar : %s" 的结果
-
代码量汇总提交statistics.sh的支持截图
-
代码驱动的学习做到没有?
-
首先,养成每周将虚拟机上的代码上传到码云上的习惯;其次,学习利用虚拟机的查询指令学习代码,提高了实践能力,这也是这学期在代码驱动方面最显著的提高。
-
加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
-
优化现有的代码不但能提高编程效率,而且能培养良好的编程思路,优化代码是在弄懂代码的基础上进行的,可以说是最好的学习方式了。
-
实践上有什么经验教训
-
课上的实践是对过去几周学习的一个检测,虽然本学期很多时候没有在课上完全完成实践的要求,但是在课下的补充学习中,可以对课上实践内容有更为深刻的认识。
-
整体评价一下第1周作业中自己提出的问题是不是抓住了学习重点
-
第一周我除了配置了本学习学习需要的实验环境之外,还针对每章的内容提出了十二个问题,不敢说完全抓住了学习重点,但是肯定是没有跑题的,不过可能是因为参考教材目录提出的问题,所以有些问题问的稍有一些大。
第1周作提出的问题
- 第一章:操作系统的管理硬件有哪些?有什么不同
操作系统的五大管理功能:
(1)作业管理:包括任务、界面管理、人机交互、图形界面、语音控制和虚拟现实等;
(2)文件管理:又称为信息管理;
(3)存储管理:实质是对存储“空间”的管理,主要指对主存的管理;
(4)设备管理:实质是对硬件设备的管理,其中包括对输入输出设备的分配、启动、完成和回收;
(5)进程管理:实质上是对处理机执行“时间”的管理,即如何将CPU真正合理地分配给每个任务。
- 第二章:无符号数和数的补码表示有哪些特性?
无符号数(Unsigned number)是相对于有符号数而言的,指的是整个机器字长的全部二进制位均表示数值位,相当于数的绝对值
机器数就是在计算机里面存储的数, 真值是带符号的数
原码表示法就是带符号的绝对值表示
正数的补码为它本身,负数的补码等于原码的数值位取反加1。原码变补码和补码变原码的方法是一样的。
- 第三章:在机器程序中,如何将控制与数据连接起来?
- 参考知乎中代码是如何控制硬件的?这一问题的回答
- 第四章:Y86-64是一种什么样的指令?
Y86是一个指令体系结构(ISA)通过Y86指令,能够更好的了解CPU处理指令的流程以及它的工作原理。
-
第五章:如何减少程序需要做的工作的变换?
-
这个问题比较大,参考张学令《程序优化与程序变换方法的研究》一文,优化程序主要从对程序进行并行化;提高程序的数据局部性;为程序存储优化提供支撑三个方面进行考虑。
-
第六章:高速存储对程序的性能影响如何?
-
告诉缓存能够提升系统性能、加快程序运行速度;但若工作站中仅有一级告诉缓存且数量少,磁盘的数据和高速缓存之前的数据延迟不可忽略。可以参考陈讯《高速缓存对系统的性能及加快程序执行速度的影响》一文。
-
第七章:动态库与静态库的不同?
本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll) 【静态库】是在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接,注意以下三点: 1.静态库对函数库的链接是放在编译时期完成的。 2.程序在运行时与函数库再无瓜葛,移植方便。 3.浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。 静态库存在的问题: 1.空间浪费 2.对程序的更新、部署和发布页会带来麻烦。如果静态库libxx.lib更新了,所有使用它的应用程序都需要重新编译、 【动态库】在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例,规避了空间 浪费问题。动态库在程序运行时才被载入,也解决了静态库对程序的更新、部署和发布页会带来麻烦。用户只需要更新动态库即可,增量更新。
以上解答参考了静态库和动态库的区别这篇博客
- 第八章:应用程序是如何处理阻塞信号的?
执⾏信号的处理动作称为信号递达,信号从产⽣到递达之间的状态,称为信号未决。进程可以选择阻塞某个信号。被阻塞的信号产⽣时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。
Linux下常规信号在递达之前产生多次只计⼀次,而实时信号在递达之前产⽣多次可以依次放在⼀个队列里。
- 第九章:应用程序如何使用和管理虚拟内存?
windows 提供了三种机制来对内存进行操作
1)虚拟内存,最适合用来管理大型对象数组 或大型结构数组
2)内存映射文件,最适合用来管理大型数据流(通常是文件),以及在同一机器上运行的多进程之间共享数据。
3)堆,适合用来管理大量的小型对象。
- 第十章:内核用什么数据结构来表示打开的文件?
内核使用三种数据结构表示打开的文件,分别是文件描述符表、文件表和 V 节点表。
(1) 每个进程在进程表中都有一个记录项,记录项中包含有一张打开文件描述符表,每个描述符占用一项。与每个文件描述符相关联的是:
(a) 文件描述符标志。
(b) 指向一个文件表项的指针。
(2) 内核为所有打开文件维持一张文件表。每个文件表项包含:
(a) 文件状态标志(读、写、添写、同步和非阻塞等)。
(b) 当前文件偏移量。
(c) 指向该文件 V 节点表项的指针。
(3) 每个打开文件(或设备)都有一个 v 节点(v-node)结构。v 节点包含了文件类型和对此文件进行各种操作的函数的指针。v 节点还包含了从磁盘读取的 i 节点(i-node)的信息,i 节点信息包含了文件的所有者、文件长度、文件所在的设备、指向文件的实际数据块在磁盘上的所在位置的指针等。
- 第十一章:什么是套接字接口?
应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)的接口,区分不同应用程序进程间的网络通信和连接。
- 第十二章:基于进程的并发和基于线程的并发的区别和联系?
先简单说说线程与进程的概念:
(1)进程是指一个内存中运行的应用程序,比如在Windows系统中,一个运行的exe就是一个进程。
(2)线程是指进程中的一个执行流程。
多线程并发只是表面和感觉上的并发,并不是实质上的并发。一个线程要运行,它必须占有CPU,而我们目前用的计算机大多都是单CPU的,所以一次最多只能有一个线程获取CPU并运行。
多线程的实质是“最大限度地利用CPU资源”,当某一个线程的处理不需要占用CPU而只需要和I/O等资源打交道时,让其他线程有机会获得CPU资源。
-
你有什么项目被加分,谈谈你的经验
-
我本学期参加密码学方面的一个竞赛;在课堂上没有完成的实践,课下我都会查询资料尽力完成并将学习心得记录下来。
-
优秀作业
-
竞赛
-
参加了第三届全国密码技术竞赛并获三等奖
-
你有什么项目被扣分,谈谈你的教训
-
暂时没有
课程收获与不足
- 自己的收获
- 在这学期的学习中,虽不能达到教材名称《深入理解计算机系统》这个要求,但是对计算机系统也确实有了一个系统的了解。特别是编译运行Linux下的程序、汇编、存储、进程、并发这几个方面都有了进一步的研究,这些知识在操作系统那门课中也有学习,进一步加深了了解和认识。
- 自己需要改进的地方
- 我认为我在教材的效率方面是有待提高的,教材内容多,如果一页页看的话很难看完,这就对一整章造成学习不充分的影响,在后几章的学习中,我更多的是参考老师给出的实验楼实践链接,对课本进行更为系统的学习,这样提高了效率,我认为这是我今后学习其他知识也需要注意的方向。
- 如果有结对,写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
- 我常阅读搭档的博客,是对同一个知识点不同角度的学习;这学期大部分实验课都需要和同伴一起完成,在合作中我们取长补短、共同进步,每次课后的博客都由我们两个人共同书写,要点更加完善,收获也更多。
- 给开学初的你和学弟学妹们的学习建议
- 希望大家在学期初就找到适合自己的学习方法,并制定这门课程的学习计划,按照自己的计划和方法来学习。
- 如果重新学习这门课,怎么做才可以学的更好
- 在完成每周任务的同时进行适当的预习
问卷调查
-
你平均每周投入到本课程多长时间?
-
平均每周投入半天(5h)的时间,如果任务大可能投入一天(10h)的时间
-
每周的学习效率有提高吗?
-
在学期中期效率是比较高的,学期开始因为对课程内容不熟悉,所以效率并不高,这一情况在经过几周的磨合和适应后得到改变
-
学习效果自己满意吗?
-
还可以,但是我认为可以在学习新知识点上效率更高,在通读教材及前几届的优秀博客后,对知识点已经有个大致的了解,但是还需要花费一些时间把他们总结整理成markdown格式的笔记,稍微浪费一些时间。
-
课程结束后会继续一周至少一篇博客吗?
-
这个不能做出保证,但是我已经将写博客养成一种学习习惯,在今后的学习中,也会把所学所思写成博客记录下来
-
你觉得这门课老师应该继续做哪一件事情?
-
分组学习,所谓1+1>2,在这门课和同伴的共同学习中,能取得事半功倍的成果。
-
你觉得这门课老师应该停止做哪一件事情?
-
过于形式主义的任务,比如出门门票的提交…
-
你觉得这门课老师应该开始做什么新的事情?
-
在课上对每章的重点内容进行讲解,方便有侧重点的自学
-
20155318 《信息安全系统设计基础》课程总结