20155224 《信息安全系统设计基础》课程总结
每周作业链接汇总
- 第一周作业:教材第一章、第七章
- 第二周作业:MyOD实现
- 第三周作业:教材第二章
- 第四周作业:myhead、mytail + MyOD实现
- 第五周作业:教材第三章学习总结及mybash实现
- 第六周作业:教材第八章、第十章
- 第七周作业:教材第四章
- 第八周作业:课上练习3的daytime服务器分别用多进程和多线程实现成并发服务器
- 第九周作业:教材第六章+mypwd
- 第十一周作业:教材第九章
- 第十三周作业:教材第十章
- 第十四周作业:教材第九章
(按顺序)实验报告链接汇总
- 实验一 开发环境的熟悉;简要内容:熟悉开发环境
- 实验二 固件程序设计;简要内容:1-MDK、2-LED、3-UART、4-国密算法
- 实验三 实时系统;简要内容:实现mywc、使用多线程实现wc服务器并使用同步互斥机制保证计数正确
- 实验四 外设驱动程序设计;简要内容:外设驱动程序设计
- 实验五 通讯协议设计;简要内容:openssl的安装和使用
代码托管链接和二维码:
- 截图 git log --pretty=format:"%h - %an, %ar : %s" 的结果
- 代码量汇总提交statistics.sh的支持截图
-
代码驱动的学习做到没有?
- 平时对git的应用并不多,只学到了git、gdb的皮毛。
-
加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
- 我认为学代码很重要的一点是要理解代码,要先研读别人写的好的代码、理解透彻,才能化为己用。代码不是只有书上给出的那么点东西,还有很多扩展用法。
-
实践上有什么经验教训
- 实践上很重要的一点是动手前要查清资料,理清头绪。不要直接上手,要先心里有底。
整体评价一下第1周作业中自己提出的问题是不是抓住了学习重点
- 整体来说我提出的问题都是比较基础的问题,我认为对打好基础很有用。而只有打好基础,才能学习更深入的内容。
回答一下第1周作业中自己提出的问题
- 第一章:为什么通过进程、虚拟内存、文件三个抽象概念可以实现操作系统的两个基本功能
操作系统有两个基本功能:
(1)防止硬件被失控的应用程序滥用。
(2)向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。
文件是对I/O设备的抽象表示,虚拟存储器是对主存和磁盘I/O设备的抽象表示,进程则是对处理器、主存和I/O设备的抽象表示。
处理器读取并解释存放在主存里的二进制指令。因为计算机把大量的时间用于存储器、I/O设备和CPU寄存器之间复制数据,所以将系统中存储设备划分成层次结构——CPU寄存器在顶部,接着是多层的硬件高速缓存存储器、DRAM主存和磁盘存储器。在层次模型中,位于更高层的存储设备比低层的存储设备要更快,单位比特开销也更高,层次结构中较高层次存储设备可以作为较低层次设备的调整缓存。通过理解和运用这中存储层次结构的知识,程序员可以优化C程序的性能。
- 第二章:有符号数和无符号数转化的意义是什么。
计算机本身不能区分有符号数和无符号数,如何运用这个数字取决于我们需要怎样的数字。
有符号数和无符号数转化的意义在于我们可以选取自己需要的类型进行运算,得到想要的结果。
此外,无符号数中,所有的位都用于直接表示该值的大小。有符号数中最高位用于表示正负。同样是一个字节,无符号数的最大值是255,而有符号数的最大值是127。原因是有符号数中的最高位被挪去表示符号了。
- 第三章:程序的机器级表示是什么意思
在一些应用中,程序员必须用汇编代码来访问机器的低级特性。一种方法是:整个函数都用汇编代码来写,然后在链接阶段与C语言函数结合起来。 第二种方法是,在C语言程序中直接利用GCC对嵌入汇编代码支持。
- 第四章:处理器的体系结构是什么
一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构。
我们主要学习Y86处理器的体系结构。
Y86指令是不存在的,这是本书的作者受到 IA32指令,也就是“x86”的启发,所假想出来的一种处理器体系结构。
Y86程序员可见部分包括:寄存器、存储器、条件码、PC(程序计数器)、程序状态。
寄存器有8个,每一个寄存器可以存储一个字,也就是一个32位二进制。条件码是一个一位二进制的寄存器,保存着最近的算术或逻辑运算所造成的影响的信息。PC则是程序计数器,记录当前正在执行的指令的地址。存储器则是一个很大的字节数组,保存着程序和数据,Y86的程序可以使用虚拟地址(类似于数组的下标)来访问存储器,硬件和操作系统会将虚拟地址翻译为实际的地址。最后一个程序状态(stat),它则代表着程序的运行情况。它会指示程序是否正常运行,或者发生了某个特殊事件。
- 第五章:如何优化程序
一般可以消除循环低效率,减少过程调用,消除不必要的存储器引用。
- 第六章:存储器这种层次结构有什么好处
存储器的分层结构是指微机的存储器系统由寄存器、Cache、主存储器、磁盘、光盘等多个层次由上至下排列组成。分层结构的顶端,存储访问速度最快,单位价格最高,存储容量最小。自上而下速度越来越低,而容量越来越大,单位价格越来越低。
存储器系统有不同容量、成本和访问时间的存储设备,对不同类型的数据可采用不同的方式存储。对一些不必快速访问的次要数据可存储在层次较低的部位,避免占用高层次结构的处理时间,可提高效率降低成本。
- 第七章:静态库动态库是什么意思,一般用于什么
库是别人写好的现有的,成熟的,可以复用的代码,我们只需要知道其接口如何定义,便可以自如使用。在linux中静态库是以 .a 为后缀的文件,共享库是以 .so为后缀的文件。
当程序与静态库连接时,库中目标文件所含的所有将被程序使用的函数的机器码被copy到最终的可执行文件中。这就会导致最终生成的可执行代码量相对变多,相当于编译器将代码补充完整了,这样运行起来相对就快些。不过会有个缺点: 占用磁盘和内存空间. 静态库会被添加到和它连接的每个程序中, 而且这些程序运行时, 都会被加载到内存中.。无形中又多消耗了更多的内存空间。
与动态库连接的可执行文件只包含它需要的函数的引用表,而不是所有的函数代码,只有在程序执行时, 那些需要的函数代码才被拷贝到内存中。这样就使可执行文件比较小, 节省磁盘空间,更进一步,操作系统使用虚拟内存,使得一份共享库驻留在内存中被多个程序使用,也同时节约了内存。不过由于运行时要去链接库会花费一定的时间,执行速度相对会慢一些。
总的来说静态库是牺牲了空间效率,换取了时间效率,共享库是牺牲了时间效率换取了空间效率,没有好与坏的区别,只看具体需要了。
- 第八章:异常控制流是什么意思
现代操作系统通过使控制流发生突变来对系统状态做出反应,这些突变称为异常控制流。
- 第九章:虚拟内存和内存有什么区别
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
- 第十章:系统级I/O是什么意思
i/o系统即输入输出系统,操作系统中负责管理输入输出设备的部分称为i/o系统,完成设备管理功能,包括外设编址,数据通路的建立,向主机提供外设的状态信息等。i/o系统的组成有:i/o设备,设备控制器及i/o操作有关的软硬件。
i/o系统的主要功能是对指定外设进行i/o操作,同时完成许多其他的控制。包括外设编址,数据通路的建立,向主机提供外设的状态信息等。
- 第十一章:如何用C语言进行网络编程
使用socket套接字,进行服务器与客户端之间的通信。(不仅限于一对一)
在网络编程时,知道域名是不能直接访问一个主机的,需要转换成相应的IP地址。
- 第十二章:进程线程有何区别
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
你有什么项目被加分,谈谈你的经验
- 优秀作业(给出链接和二维码)
你有什么项目被扣分,谈谈你的教训
有些时候在课堂上没能及时完成任务,大部分原因在于事先准备不够充足,学习的不是很到位。有些东西看书的时候没仔细看、放过去了,或者看完之后没能熟练掌握。这样在课堂上就要花费额外时间研究,一是耽误了做实践的时间,二是这样匆匆赶工效果不好。课堂上不能完成,课下还要花费额外时间再学习,整体学习效率不好。
课程收获与不足
这门课因为老师平时的要求严格,另外自学的地方较多,在一定程度上帮助了我树立良好的学习习惯。当然有时候我也会有效率低下的时候,学习不能全身心投入,遇到一些比较难的问题容易心生厌倦,这是我需要改进的地方。
我经常向我的结对伙伴请教,我们一起钻研难点、查找资料,实验时分工明确,互帮互助。
给开学初的你和学弟学妹们的学习建议
这门课重要的就是保持学习兴趣,因为自学过程全靠自觉,没有兴趣会学的很痛苦。另外一定要坚持打代码,书上给出的示范最好尽量敲出来自己运行,看看是怎么应用的。养成每天敲一点点代码的习惯,有助学习。