了解课程内容,阅读老师的博客。之后对学习内容进行总结,提出自己不懂以及最想解决的问题。安装虚拟机,学会其简单的操作方法。
对实验楼中的内容进行实践学习。了解linux系统,学会基本概念和操作,如终端、用户管理、文件创建、删除等等。对linux的核心命令熟练运用掌握。如find、locate、cheat、grep、which、whereis等。
学习vim的一些基本操作,如光标移动、保存退出、删除、复制、替换等等,gcc编译代码的过程及原理,实践应用gcc编译的方法,运用gdb对代码进行调试,学习makefile的基本原理及语法规范
理解三种数字(无符号数、补码、浮点数)的概念,理解什么是整数溢出,学会在64位机器上生成32位代码,理解掌握大端法和小端法,掌握布尔运算在C语言中的应用,掌握逻辑运算和位运算,学会补码的计算
熟练掌握编译产生汇编代码的方法,学会运用反汇编命令,理解操作数三种类型的定义,理解栈的特点,掌握gdb使用的流程并实践运用
学习Y86指令集的内容,理解并掌握Y86异常、Y86指令集功能码,学习HCL表达式,理解HCL表达式和C语言中表达式的区别,安装Y86模拟器并掌握其使用的方法,完成并仔细分析课后例题中的重点题
了解RAM、ROM、磁盘、固态硬盘,理解局部性的定义和性质,掌握缓存命中、缓存不命中、冲突不命中的定义,按照老师的要求在git中建立一tree,将代码分类管理
复习linux的常用命令,如man、cheat、grap、find、cd、vim、gdb等,对自己半个学期来的收获进行总结,发现自己学习过程中仍然存在的问题和不足
掌握UnixI/O中文件打开、读写、关闭的原理,通过实践熟悉文件打开,读写文件、关闭文件的函数调用,掌握I/O重定向的方法,理解标准I/O库的概念,在学习过程中发现问题并将问题发到论坛中与同学们共同讨论
对老师发的代码进学习,掌握进程创建和控制的系统调用及函数使用,理解异常及异常种类的定义,掌握异常处理的方法,理解进程和并发的概念,理解数组指针、指针数组、函数指针、指针函数的区别,理解信号机制:kill,alarm,signal,sigaction
本周主要复习了前三周的学习内容,对之前老师发的代码以及实验中用到的代码进行了仔细地分析、学习,理解数组指针、指针数组、函数指针、指针函数的定义,掌握他们的区别方法,理解信号产生的方法和信号处理函数
理解虚拟存储器的概念和作用,理解地址翻译的概念,理解存储器映射,掌握动态存储器分配的方法,理解垃圾收集的概念,了解C语言中与存储器有关的错误
熟悉linux开发环境,使用linux的ARM编译,了解嵌入式开发的基本过程
了解多线程程序设计的基本原理,熟悉终端I/O函数的使用,学习使用多线程来实现串口的收发处理,使用linux的armv4l-unknown-linux-gcc编译
掌握uC/OSII的移植过程,掌握C语言、汇编语言的混合编译
学习在linux下驱动设计的原理,掌握使用模块方式进行驱动开发调试的过程
掌握在ARM开发板实现一个简单WEB服务器的过程,学习在ARM开发板上的SOCKET网络编程,学习在linux环境下signal函数的调用
之后每周我都是认认真真的将代码一个一个标上注释,以每周为一类上传。其实,git的用处不仅仅是能挽救我们的数据,我们用它来查改代码,增添代码都十分的简单。在完成第一次的git配置之后,每次上传代码,只需要简单的输三个命令就可以完成。这也让我明白,无论做什么事情,前期基础中付出越多的努力,以后做起来就会越简单
确实,要理解一个代码,硬生生的看是不够的,效率也比较低。通过对代码的增删和修改能让我们更快的理解代码。举一个简单的例子,比如说filesize这段代码。在第一次编译运行时,输出Thesizeof/etc/networksis54。刚开始看到的时候一头雾水,后来把/etc/networks修改成其他的文件路径,查看这些文件的大小之后,发现输出结果就是定义路径文件的大小。因此,不需要查代码中参数的意义,就可以将其理解消化。
或者有的时候我们对有些函数的功能不是很理解,可以把这段函数的代码删掉,再次运行,对比前后输出结果的不同,就能明白。
因此,加点代码,改点代码不仅能加深我们对代码的理解,也能提高学习的效率。
感觉并没有抓住重点.....
1.系统硬件是如何组成的?
电脑组成硬件:主板、CPU、内存、显卡、电源、散热器、显示器。
主板:电脑核心部件,用于搭载电脑其余硬件设备的一个平台。
CPU:电脑核心部件,用于处理数据。
内存:电脑核心部件,用于给CPU提供数据存放的地方。
显卡:分为集成显卡和独立显卡,集成显卡是必须部件,独立显卡是可选部件,用于将数字信号转换为图形信号。
电源:根本部件,用于提供电脑各个硬件工作电压。
散热器:辅助类不可缺少部件,用于散去CPU工作产生的热量。
显示器:必备部件,用于将显卡的图形信号转换为图像。
2.信息如何处理表示?
三种最重要的数字表示:无符号,补码,浮点数
3.程序语言是如何转换成计算机语言的?
由C编译器生成IA32和X86-64汇编语言
4.处理器是如何设计的?
从设计单时钟周期、非流水线化的数据通路开始,然后引入流水线化的思想,将处理一条指令所需要的不同步骤实现为独立阶段。
5.如何消除循环的低效率?
提高局部性
6.存储器的结构?
寄存器、高速缓存、主存、本地二级存储、远程二级存储
7.什么是静态链接?
以一组可重定位目标文件和命令行参数作为输入,生成一个完全链接的可以加载和运行的可执行目标文件作为输出
8.进程的基本概念是什么?
进程是对一个正在执行的程序的一种抽象
9.虚拟存储器的功能有哪些?
虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个人的一致的的私有的地址空间
10.什么是I\O?
I/O指输入输出,输入操作是从I/O设备拷贝数据到主存,而输出操作是从主存拷贝数据到i/o设备
11.如何进行网络编程?
利用socket、listen、connect、rent、rev等函数进行编程
12.并发和并行的区别是什么?
我的加分共10分,其中3分来自于优秀博客加分,5分是问题总结加分,2分是匿名调查加分。
优秀博客:
二维码:
问题汇总:
一个学期的学习就快要完了,回过头总结这个学期这门课收获到了什么,我想主要是三个方面的进步。
第一个方面是课程知识学习。通过这一个学期的学习,掌握了《深入理解计算机系统》这本书中的知识。
第二个方面是学习工具使用方法的学习。在这一个学期的学习过程中,老师教会我们使用了多种学习工具,比如linux下的git、markdown、实验楼等等。这些学习工具不仅提高了我们学习的效率,也让我们学习的过程更加生动有趣,不仅仅停留在课本上。同时,这些学习工具在今后任何一门课程或是日常的工作和生活中,都能给我们带来极大的便利。当我们有一天用markdown完成排版任务,用git恢复丢失的数据,或是通过博客园回顾知识时,会想到是娄老师给予了我们这些宝贵的财富。
需要改进的地方,我觉得还是在学习中的惰性吧。每次老师在周一的时候就会下发本周的学习任务,但是我总是拖到周四、周五才开始学习。
还有就是在学习的时候不够耐心。就像是在代码学习的过程中,假如这个代码中有很多不懂得参数和函数,往往看着看着就会放掉其中一些细节的地方。
优点:
让处在待及格队伍中的同学意识到差距和危机的存在,及时的告诫同学们不能再应付差事。让暂时成绩稍差的同学明白应该从什么地方开始做起,有了一个明确的目标和动力。也确保了这些同学每周都在认真完成学习任务。
希望老师能建立一个学习帮助机制。让一个成绩较好的同学帮助一个待及格队伍中的同学,解决他们在学习中遇到的问题,帮助他们提高成绩。很多时候待及格队伍中的同学有问题但找不到人能帮助解决问题。这可能会打消大家学习的积极性。
学习过程着眼重点,抓住细节。每周老师都会给这周学习的任务和考试重点,要提高学习效率自然要抓住每周的重点学习。同时,在学习过程中,也要注意每一处的细节。其实老师要求我们做的每一件事情都是他觉得精华的的东西。老师要求要完成的每一件事情都要认真完成,不能觉得做这件事没有意义就不愿意去做,不能只拘泥于眼前,要看到长远的影响。