每周作业链接汇总
了解课程上课方式、做好心理预期、快速翻阅一下课本、使用虚拟机VirtualBox安装Linux系统,安装Ubuntu或/各Federa、预习Linux基础入门
了解Linux操作系统、掌握核心的Linux命令:find/locate/cheat/grep/which/whereis,熟练应用“搜索”进行举一反三的学习、使用Linux中用户管理命令/系统相关命令/文件目录相关命令/打包压缩相关命令/比较合并相关命令/网络相关命令等
熟悉Linux系统下的开发环境、熟悉vi的基本操作、熟悉gcc编译器的基本原理、熟练使用gcc编译器的常用选项、熟练使用gdb调试技术、熟悉makefile基本原理及语法规范、掌握静态库和动态库的生成与调用方法、理解C程序中模块的概仿,模块分解的“高内聚,低耦合”的原则、了解链接的概念
理解二进制在计算机中的重要地位、掌握布尔运算在C语言中的应用、理解有符号整数、无符号整数、浮点数的表示、理解补码的重要性、能避免C语言中溢出,数据类型转换中的陷阱和可能会导致的漏洞、进一步理解“信息=位+上下文”
理解逆向的概念、掌握X86汇编基础,能够阅读(反)汇编代码、了解ISA(指令集体系结构)、理解函数调用栈帧的概念,并能用GDB进行调试
了解ISA抽象的作用、掌握ISA,并能举一反三学习其他体系结构、了解流水线和实现方式
了解常见的存储技术(RAM、ROM、磁盘、固态硬盘等)、理解局部性原理、理解缓存思想、理解局部性原理和缓存思想在存储层次结构中的应用、高速缓存的原理和应用
复习 Linux常用命令、复习 教材1-7章
掌握系统编程和系统调用的概念、掌握系统编程错误处理的方式、掌握Unix/Linux系统级I/O:open close read write seek stat、掌握RIO、掌握I/O重定向的方法
掌握系统编程和系统调用的概念、掌握系统编程错误处理的方式、掌握Unix/Linux系统级I/O:open close read write seek stat、掌握RIO、掌握I/O重定向的方法
了解异常及其种类、理解进程和并发的概念、掌握进程创建和控制的系统调用及函数使用:fork,exec,wait,waitpid,exit,getpid,getppid,sleep,pause,setenv,unsetenv,、理解数组指针、指针数组、函数指针、指针函数的区别、理解信号机制:kill,alarm,signal,sigaction、掌握管道和I/O重定向:pipe, dup, dup2
第九周代码检查、第十周代码检查、第十一周代码检查、项目
掌握三种并发的方式:进程、线程、I/O多路复用、掌握线程控制及相关系统调用、掌握线程同步互斥及相关系统调用
理解虚拟存储器的概念和作用、理解地址翻译的概念、理解存储器映射、掌握动态存储器分配的方法、理解垃圾收集的概念、了解C语言中与存储器有关的错误
实验报告链接汇总
熟悉linux开发环境;学会基于 S3C2410 的 linux 开发环境的配置和使用;使用linux的armv4l-unknown-linux-gcc编译;使用基于NFS方式的下载调试,了解嵌入式开发的基本过程;正确使用连接线等实验仪器,并注意保护实验箱。
掌握程序的烧写方法;能够实现Bootloader;实现密码学中常见算法的固化。
掌握uC/OSII(uCLinux…)的移植过程;掌握C语言,汇编的混合编程。
掌握实时系统应用和驱动程序的编写、选择某个接口电路
掌握在ARM开发板实现一个简单的WEB服务器的过程。学习在ARM开发板上的SOCKET网络编程。学习Linux下的signal()函数的使用。
代码托管链接和二维码
截图 git log --pretty=format:"%h - %an, %ar : %s" 的结果
代码量汇总
代码驱动的学习做到没有?
虽然没有完全做到,但我还是有做了的。
加点代码,改点代码是理解的最好方式,谈谈你的心得
通过改代码收获还是很大的。对代码进行了一步一步的实践,对我的帮助很大,能够使我更深入的理解和分析了代码,了解了系统调用及函数使用,理解了不同函数调用的区别,感觉这样的学习状态很充实,不仅仅是这一门课,这样的方法用到其他的课程上面帮助应该也是很大的。
实践上有什么经验教训
在学习中实践难免会遇到很多的问题,但是通过查找资料和自己的认真分析研究去解决之后,对问题的理解会更深入,也很有成就感,深刻地体会到了在实践中学习的好处。
回答一下第0周作业中自己提出的总题
1.计算机的组件
计算机五大组件包括控制器、运算器、储存设备、输入设备、输出设备五个部分。
2.不同编码的区别
整数运算只能编码相对较小的范围,但是是精确的;
浮点运算可以编码一个较大的范围,但是是近似的;浮点运算不可结合。
3.C程序与机器代码如何转换的
C预处理器——扩展源代码-生成.i文件
编译器——产生两个源代码的汇编代码-——生成.s文件
汇编器——将汇编代码转化成二进制目标代码——生成.o文件
链接器——产生可执行代码文件
4.是如何设计处理器的
重点是Y86指令集体系结构
5.如何进行最大化的程序优化
这个就从多个方面了,具体在课本第五章有讲。
6.存储器的层次结构是怎样的?
存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。
CPU寄存器、高速缓存存储器、主存储器、磁盘。
7.链接器的功能
链接器主要有两个工作要做――符号解析和重定位:
符号解析:当一个模块使用了在该模块中没有定义过的函数或全局变量时,编译器生成的符号表会标记出所有这样的函数或全局变量,而链接器的责任就是要到别的模块中去查找它们的定义,如果没有找到合适的定义或者找到的合适的定义不唯一,符号解析都无法正常完成。
重定位:编译器在编译生成目标文件时,通常都使用从零开始的相对地址。然而,在链接过程中,链接器将从一个指定的地址开始,根据输入的目标文件的顺序以段为单位将它们一个接一个的拼装起来。除了目标文件的拼装之外,在重定位的过程中还完成了两个任务:一是生成最终的符号表;二是对代码段中的某些位置进行修改,所有需要修改的位置都由编译器生成的重定位表指出。
8.系统如何对突变情况作出反应
1.处理器检测到有异常发生
2.通过异常表,进行间接过程调用,到达异常处理程序
3.完成处理后:①返回给当前指令②返回给下一条指令③终止
9.如何有效管理存储器
操作系统为每个进程提供了一个独立的页表,也就是一个独立的虚拟地址空间。
抖个虚拟页面可以映射到同一个共享物理页面上。
存储器映射:将一组连续的虚拟页映射到任意一个文件中的任意位置的表示法。
10.Unix I/O是什么
输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程。
11.如何编写使用互联网的客户端-服务器程序
当客户端需要服务时,向服务器发送请求,发起一个事务。
服务器收到请求后,解释它,并以适当的方式操作它的资源。
服务器给客户端发送一个响应,并等待下一个请求。
客户端收到响应并处理它。
12.三种不同的并发编程技术的区别
进程
每个逻辑控制流是一个进程,由内核进行调度,进程有独立的虚拟地址空间
I/O多路复用
逻辑流被模型化为状态机,所有流共享同一个地址空间
线程
运行在单一进程上下文中的逻辑流,由内核进行调度,共享同一个虚拟地址空间
你有什么项目被加分,谈谈你的经验
扇贝背单词(对四六级有没有影响?)
自从听了老师的建议开始扇贝打卡背单词,一直坚持下来,让我这个英语特别差的人过了四级。
课程收获与不足
自己的收获(投入,效率,效果等)
先不说自己单单在这门课中收获的知识,最重要的是在这门课中学习到的学习方法,学习习惯不止用在这一门课上,学习可以贯穿我们的一生。
自己需要改进的地方
自己有时候在作业多的一周,学习的时间就分配的不太好,有些就会偷懒,需要改进。
如果有结对,写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
结对实验这样的方式特别好,可以体会到团队合作好处,多一个人多一种力量,可以集思广益,出现错误也有多的解决方法,希望老师坚持这样的实验方式。
给学弟学妹们的学习建议
如果重新学习这门课,怎么做才可以学的更好
如果想学好这门课,一定要在平时多下工夫,实践很重要,更帮助你更好的理解知识。
问卷调查
你平均每周投入到本课程多长时间?
学习任务少的时候大概10个小时左右,多的时候有到25到30个小时。
每周的学习效率有提高吗?
刚开学的效率比较低,后来每周都有提高,从看书到编译代码再到分析改代码,收获很大。
学习效果自己满意吗?
开始实践的时候已经到了后半学期,有点晚,但是也很开心掌握了应该有的学习方法,这很重要,基本满意吧。
课程结束后会继续一周至少一篇博客吗?(如果能做到,毕业时我把你的博客给你集结成一本书)
尽量吧
你觉得这门课老师应该继续做哪一件事情?
像本学期一样,坚持上课讲解知识和试卷题目
你觉得这门课老师应该停止做哪一件事情?
认为可以把一些加分项目改成必做项目,这样同学们学到的知识会更多
你觉得这门课老师应该开始做什么新的事情?
将读书(相关书籍)也加到加分项目里
本学期你与老师和同学交互最多的一篇博客是哪篇?
本学期被阅读最多的博客是哪一篇?有何经验?
可能是因为我做事情不喜欢拖拉,所以开始实践的比较早,将安装过程中遇到的问题和解决过程写进了博客里,大家都可以在安装过程中或者遇到问题的时候点进来看,所以阅读量比较高吧。
现在评价一下第0周提出的问题的质量,抓住重点了吗?
感觉都不是重点,都是大的概念,很泛化,同时也不好回答,感觉自己在快速阅读中还是不能快速掌握重点,还是需要静下心来好好看书。