每周作业链接汇总
第0周作业
简要内容:
- 阅读以上博客
- 快速翻阅了一下课本
- 使用虚拟机VirtualBox或VMWare安装Linux系统;
- 预习Linux基础入门
二维码
第1周作业
简要内容:
- Linux操作系统概述
- 核心的Linux命令:find/locate/cheat/grep/which/whereis
- 使用Linux中用户管理命令/系统相关命令/文件目录相关命令/打包压缩相关命令/比较合并相关命令/网络相关命令等
二维码
第2周作业
简要内容:
- Linux系统下的开发环境
- vi的基本操作
- gcc编译器的基本原理
- 使用gcc编译器的常用选项
- 使用gdb调试技术
- makefile基本原理及语法规范
- 静态库和动态库的生成与调用方法
- C程序中模块的概仿,模块分解的“高内聚,低耦合”的原则
- 链接的概念
二维码
第3周作业
简要内容:
- 二进制在计算机中的重要地位
- 布尔运算在C语言中的应用
- 有符号整数、无符号整数、浮点数的表示
- 补码
- 如何C避免语言中溢出,数据类型转换中的陷阱和可能会导致的漏洞
- 理解“信息=位+上下文”
二维码
第5周作业
简要内容:
- 程序的机器级表示
- 算术和逻辑操作
- 汇编语言中的控制指令
- GDB调试器
二维码:
第6周作业
简要内容:
- ISA抽象的作用
- ISA,并能举一反三学习其他体系结构
- 流水线和实现方式
二维码
第7周作业
简要内容:
- 常见的存储技术(RAM、ROM、磁盘、固态硬盘等)
- 局部性原理
- 缓存思想
- 局部性原理和缓存思想在存储层次结构中的应用
- 高速缓存的原理和应用
二维码
第8周作业
简要内容:
- 复习 Linux常用命令
- 复习 教材1-7章
二维码
第9周作业
简要内容:
- 系统编程和系统调用的概念
- 系统编程错误处理的方式
- Unix/Linux系统级I/O:open close read write seek stat
- RIO
- I/O重定向的方法
二维码
第10周作业
简要内容:
- 掌握系统编程和系统调用的概念
- 掌握系统编程错误处理的方式
- 掌握Unix/Linux系统级I/O:open close read write seek stat
- 掌握RIO
- 掌握I/O重定向的方法
二维码
第11周作业
简要内容:
- 了解异常及其种类
- 理解进程和并发的概念
- 掌握进程创建和控制的系统调用及函数使用:fork,exec,wait,waitpid,exit,getpid,getppid,sleep,pause,setenv,unsetenv,
- 理解数组指针、指针数组、函数指针、指针函数的区别
- 理解信号机制:kill,alarm,signal,sigaction
- 掌握管道和I/O重定向:pipe, dup, dup2
二维码
第12周作业
简要内容:
- 第九周代码检查
- 第十周代码检查
- 第十一周代码检查
二维码
第13周作业
简要内容:
- 掌握三种并发的方式:进程、线程、I/O多路复用
- 掌握线程控制及相关系统调用
- 掌握线程同步互斥及相关系统调用
二维码
第14周作业
简要内容:
- 理解虚拟存储器的概念和作用
- 理解地址翻译的概念
- 理解存储器映射
- 掌握动态存储器分配的方法
- 理解垃圾收集的概念
- 了解C语言中与存储器有关的错误
二维码
实验报告汇总链接
- 信息安全系统设计基础》实验一 开发环境的熟悉
- 简要内容:熟悉Linux开发环境,使用
armv4l-unknown-linux-gcc
指令进行编译 - 二维码:
- 简要内容:熟悉Linux开发环境,使用
- 20145208 20145230 20145235《信息安全系统设计基础》实验2
- 简要内容:多线程程序设计,pthread库函数的使用
- 二维码:
- 20145208 20145230 20145235 《信息安全系统设计基础》实验三 实时系统的移植
- 简要内容:安装ADS,安装GIVEIO驱动及JTAG驱动的过程,在arm开发板上测试结果
- 二维码:
-
- 20145235《信息安全系统设计基础》实验四 外设驱动程序设计
- 简要内容:Linux下进行驱动设计的原理,使用模块方式进行驱动开发调试的过程
- 二维码:
- 《信息安全系统设计基础》实验五
- 简要内容:学习在arm开发板上的SOCKET网络编程
- 二维码:
代码托管
- 链接:
- 二维码:
- 提交历史:虚拟机进不去了。。。。。爆炸,修好之后补上。
-
- 代码总量:
- 代码驱动的学习做到没有?
勉强做到了,前几周的的学习,代码很少,所以对代码驱动的学习体会很少。到后面几周的学习,代码量突然增加,感觉有点措手不及,但结合书上的知识去分析代码,收获是巨大的。
- 加点代码,改点代码是理解的最好方式,谈谈你的心得
对于老师所给的代码,如果停留只是去运行一下的层面的话,收获就很浅,就算懂代码,只能说理解皮毛。只有通过自己加点代码,改点代码去理解书上的知识,这样的话才会做到所谓的“玩转代码”,我想老师想让我们做到便是将代码玩得转,精通代码,活学活用吧。
- 实践上有什么经验教训?
实践这学期做了两个,一个是通过gdb了解调用函数过程栈的变化,另一个是缓冲区溢出实践。我觉得最大的教训是:必须要手动画一下栈,自己分析分析一下过程。我觉得这一点很重要,因为通过gdb,你得到的是寄存器和存储的值,唯有自己动手画一下栈,并分析,才会将抽象的东西展现在你面前,这样就会很好理解。
整体评价一下第0周作业中自己提出的问题是不是抓住了学习重点
抓住了大部的分析重点。
回答一下第0周作业中自己提出的问题
- 什么是计算机系统漫游?
- 这个问题当时问的太没水平了,所谓计算机系统漫游,便是让初学者对计算机系统有个初步的了解。
- 信息如何表示如何处理?
-
计算机要处理的信息是多种多样的,如日常的十进制数、文字、符号、图形、图像和语言等。但是计算机无法直接“理解”这些信息,所以计算机需要采用数字化编码的形式对信息进行存储、加工、和传送。
信息的数字化表示就是采用一定的基本符号,使用一定的组合规则来表示信息。计算机中采用的二进制编码,其基本符号是“0”和“1”。
主要有数的表示和非数值表示
一、计算机中数的表示
在普通数字中,用“+”或“—”符号在数的绝对值之前来区分数的正负。在计算机中有符号数包含三种表示方法:原码、反码、补码。
1、原码表示法:
用机器数的最高位代表符号位,其于各位是数的绝对值。符号位若为0则表示正数,若为1则表示负数。
2、反码表示法:
正数的反码和原码相同,负数的反码是对原码除符号位外各位取反。
3、补码表示法:
正数的补码和原码相同,负数的补码是该数的反码加1。
二、非数值数据表示
1、字符的表示:
在计算机处理信息的过程中,要处理数值数据和字符数据,因此需要将数字、运算符、字母、标点符号等字符用二进制编码来表示、存储和处理。目前通用的是美国国家标准学会规定的ASCII码——美国标准信息交换代码(如图1-4-1 ——7位ASCII码表)。每个字符用7位二进制数来表示,共有128种状态,这128种状态表示了128种字符,包括大小字母、0…9、其它符号、控制符。
-
- 什么是程序的机器级表示?
-
计算机系统使用了多种不同形式的抽象,利用更简单的抽象模型来隐藏实现的细节。
对于机器级编程来说,其中两种抽象尤为重要:
1、指令集体系结构(Instruction set architecture ISA)
2、机器级程序使用的存储器地址是虚拟地址
提供的存储器模型看上去是一个非常大的字节数组。存储器系统的实际实现是将多个硬件存储器和操作系统软件组合起来。
-
- 处理器体系结构包含哪些?
- Y86指令集体系结构
- 逻辑设计和硬件控制语言HCL
- 流水线
- 如何优化程序性能?
- 第五章的内容,本学习没有学习,也不懂这个问题如何回答。
- 存储器结构层次有哪些?
- 如何在系统上运行程序?
- 就拿一个.c文件来收,要让它运行,首先要进行预处理,然后编译,接着汇编,最后链接成可执行完文件,才能在系统上运行。
- 异常控制流是什么?
- 异常控制流:现代操作系统通过使控制流发生突变来对系统状态做出反应,这些突变称为异常控制流。
- 虚拟存储器是什么?
- 虚拟内存是计算机系统内存管理的一种技术。它使应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。
- 系统级I/O是什么?
- I/O (input/output) 实际上就是主存与外围设备的之间的数据拷贝。input就是将某个外围设备上的数据拷贝到主存,而output则是将主存上的数据拷贝到外围设备。 所有所有语言的运行时系统都提供了一个I/O处理工具。
- 网络编程要注意哪些?
-
- 我觉得要注意套接字的创建以及一些函数的调用,还要明白web服务器是怎么一回事。
-
- 什么事并发编程?
- 所谓并发编程是指在一台处理器上“同时”处理多个任务。并发是在同一实体上的多个事件。多个事件在同一时刻发生。有基于进程的并发编程、基于I/O多路复用的并发编程、基于线程的并发编程。
- 你有什么项目被加分,谈谈你的经验
- 项目(给出链接和二维码):
-
- 教材配套项目——缓冲区实验
- 二维码:
- 你有什么项目被扣分,谈谈你的教训
- 没有检查代码
- 教训:代码一定要及时去验收,越拖越糟糕,平时一定要积极主动去敲代码,认真进行代码驱动学习。
- 待及格管理制度的优缺点(进入过的同学必写)
- 待及格期间多发的博客列表:在待及格区的时候,是我学习效率最好的时候,每周两篇博客,书上的知识消化的很好,我觉得这个应该继续下去。
- 优缺点:优点:对于想摆脱及格区的同学相当有用,有一定的强制力。缺点:对于待及格区的同学应当给予一些鼓励,增加对于学习的兴趣。
- 建议:对于待及格区的同学,如果表现好,应当充分给予一些鼓励。对从从待及格脱离的的我来说,脱离之后,学习主动性比待及格区的时候明显有所下降,所以我觉得对于脱离几个区的同学,应该继续执行待及格区的管理办法,等到与及格区有一定分数差的时候,不在要求一周两篇博客和每周代码验收。也就是说只要进了及格区,要想在脱离出去,必须比及格区高出一定的分数才能脱离。这样的,不会出现,一出及格区就回到原来的状态。
- 课程收获与不足
- 自己的收获(投入,效率,效果等)
- 首先我觉得最大的收获,便是对整个计算机系统的结构层次有了一个非常深刻的认识。
- 对于计算机底层的东西,从开始略知一二,到现在实现gdb函数调用的栈分析以及缓冲区溢出,收获很大。
- 对于边学习,边写博客的这种学习方法,有了更生的理解,就像这次的总结作业一样,能够这种学习方法的好处。记录了自己的整个学习过程,反映出自己的学习情况。就像一面镜子,看到曾经的自己。
- 作为信息安全的学生来说,对于今后的专业课学习,有了一定的基础。
- 自己需要改进的地方
- 就拿学习主动性来说,我在这方面做的不够到位,每周总是在最后几天开始一周的学习任务,这点应该批评自己,以后的学习中一定要改正。
- 代码驱动学习做的不够好,对于有些代码理解的不是很透彻。
- 如果有结对,写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
- 我觉得每周写一篇博客会导致一个严重的问题,大家都是周日那一天开始每周的学习任务,应该避免这种现象,我觉得每轴博客应该增加。
- 自己的收获(投入,效率,效果等)
- 给开学初的你和学弟学妹们的学习建议
- 如果重新学习这门课,怎么做才可以学的更好:
- 一定要好好把可能的看完,一定要先把书上的知识消化了,才能去做老师所给的实践以及代码。
- 学习应该是个每天积累的过程,不能因为周日是提交做的截止时间就在周日完任务似的把一周的学习任务应付了。我觉得这点很重要。
- 如果重新学习这门课,怎么做才可以学的更好:
- 问卷调查
- 你平均每周投入到本课程多长时间?
- 十个小时
- 每周的学习效率有提高吗?
- 一般
- 学习效果自己满意吗?
- 不满意
- 课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书送给你作纪念)
- 有时会
- 你觉得这门课老师应该继续做哪一件事情?
- 课堂测验
- 你觉得这门课老师应该停止做哪一件事情?
- 你觉得这门课老师应该开始做什么新的事情?
- 抽查学习情况,每周考试有一定的水分,
- 你平均每周投入到本课程多长时间?
- 其他任意发挥
- 给出你的总结的链接和二维码
二维码: