第一周做业:使用gcc编译器的经常使用选项、使用gdb调试技术、makefile基本原理及语法规范html
第二周做业:vi测试、gcc测试git
第三周做业:信息的表示和处理算法
第四周做业:实现myod、head,tail的使用数据库
第五周做业:汇编语言、指令编程
第六周做业:使用gdb跟踪汇编代码、异常控制流、系统级I/Owindows
第七周做业:Y86-64处理器数组
第八周做业:网络编程安全
第九周做业:存储器层次结构服务器
第十周做业:实现state命令、研究Linux下IPC机制网络
第十一周做业:虚拟内存
第十二周做业:无
第十三周做业:总结学的最好的一章
第十四周做业:重学学的最差的一章
实验一 开发环境的熟悉:交叉编译
实验二 固件程序设计:MDK、LED、URAT、国密算法
实验三 实时系统:客户端-服务器通讯
实验四 外设驱动程序设计:在虚拟设备驱动源码目录下编译并加载驱动模块
实验五 通讯协议设计:OpenSSL、混合密码系统进行防御
截图 git log --pretty=format:"%h - %an, %ar : %s" 的结果
代码驱动的学习作到没有?
不算彻底作到吧,主要仍是参考别的代码再进行编写。
加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
代码学习主要仍是在已有代码的基础上,加上本身的理解对代码进行改编,这学期的实践项目比较多,在必定程度上也提升了本身编写代码的能力。实践上有什么经验教训
课堂实践仍是须要提早的预习,在充分理解题意的状况下才能完成,临时抱佛脚是一种不可取的行为。
第1周做业中的问题主要针对每章主题里的部份内容进行了提问,好像没有特别抓住其中的重点,主要仍是对未学习内容提出了问题。
第一章:虚拟内存与物理内存的区别?
物理内存是安装在主机板上的内存。
虚拟内存是做业系统在硬盘上创建一个档案,把物理内存中不经常使用的部分拷贝起来,再把那个部分的物理内存清空,方便别的程序写入。虚拟内存的大小是能够自定,可是大小一般在物理内存的1到2倍之间,太大的话,虚拟内存的效能会降低。
由于虚拟内存在硬盘上,因此它的速度是取决于硬盘的存取速度、碎片的多少等。另外,由于它不像物理内存同样,资料与停机后消失,因此虚拟内存是能够透过解密方法读取其中的资料。第二章:布尔代数如何在实际中应用?
布尔代数不只能够在数学领域内实现集合运算,更普遍应用于电子学、计算机硬件、计算机软件等领域的逻辑运算:当集合内只包含两个元素(1和0)时,分别对应{真}和{假},能够用于实现对逻辑的判断。
常见的应用包括: 数字电路设计,0和1与数字电路中某个位的状态对应,例如:高电平、低电平。 计算机的网络设置,利用计算机的二进制特性,将子网掩码与本机IP地址进行逻辑与运算,能够获得计算机的网络地址和主机地址。 数据库应用,经过SQL语句查询数据库时须要进行逻辑运算,肯定具体的查询目标。第三章:机器级代码与C语言代码的区别?
对于机器级编程来讲,两种抽象很重要:
一、指令集体系结构(Instruction set architecture ISA)
它定义了处理器状态、指令的格式,以及每条指令对状态的影响。
IA32将程序的行为描述成好像每条指令时按顺序执行的,一条指令结束后,下一条再开始。(实际上处理器并发地执行许多指令,可是能够采起措施保证总体行为与ISA指定的顺序执行彻底一致)
二、机器级程序使用的存储器地址是虚拟地址
提供的存储器模型看上去是一个很是大的字节数组。存储器系统的实际实现是将多个硬件存储器和操做系统软件组合起来。
程序存储器(program memory)包含:程序的可执行机器代码、操做系统须要的一些信息、栈、堆。程序存储器用虚拟地址来寻址(此虚拟地址不是机器级虚拟地址)。操做系统负责管理虚拟地址空间(程序级虚拟地址),将虚拟地址翻译成实际处理器存储器中的物理地址(机器级虚拟地址)。C语言
C语言是一个有结构化程序设计、具备变量做用域(variable scope)以及递归功能的过程式语言。
C语言传递参数均是以值传递(pass by value),另外也能够传递指针(a pointer passed by value)。
不一样的变量类型能够用结构体(struct)组合在一块儿。
只有32个保留字(reserved keywords),使变量、函数命名有更多弹性。
部份的变量类型能够转换,例如整型和字符型变量。
经过指针(pointer),C语言能够容易的对存储器进行低级控制。
预编译处理(preprocessor)让C语言的编译更具备弹性。第四章:SEQ具体指什么?
SEQ是 Sequential CPU的实现,表如今指令的执行要依次经历各个阶段(Fetch->Decode->Execut->Memory->WriteBack->PC Update).每个指令在一个时钟周期内完成。第五章:寄存器溢出的弊端?
不能很好的实现循环并行性,对维护多个累积变量的优点有必定影响。第六章:局部性对存储器层次结构的重要意义?
有良好局部性的程序比局部性差的程序运行得快。第七章:如何进行重定位?
重定位就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程,也就是说在装入时对目标程序中指令和数据的修改过程。第八章:如何有效处理异常?
1.直接终止程序(自杀)
2.返回一个错误的值,附加错误码
3.返回一个合法的值,让程序处于某种非法的状态
4.调用一个预先准备好在出现"错误"的状况下使用的函数.
5.经过暴力的方式解决:abort()函数和常见exit()函数.
6.使用goto语句
7.使用setjmp()与longjmp()第九章:虚拟内存对系统的重要意义?
虚拟内存是用于当作内存来弥补计算机RAM空间缺少的硬盘空间。当实际RAM满时(实际上,在RAM满以前),虚拟内存就在硬盘上建立了。当物理内存用完后,虚拟内存管理器选择最近没有用过的,低优先级的内存部分写到交换文件上。这个过程对应用是隐藏的,应用把虚拟内存和实际内存看做是同样的.第十章:I/O如何进行重定向?
所谓的I / O重定向也就是让已建立的FD指向其余文件。在I / O重定向的过程当中,不变的是FD 0/1/2表明STDIN / STDOUT / STDERR,变化的是文件描述符表中FD 0/1/2对应的具体文件,应用程序只关心前者。本质上这和接口的原理是相通的,经过一个间接层把功能的使用者和提供者解耦。第十一章:如何进行C/S编程模型通讯?
服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK段,服务器收到后从accept()返回。第十二章:基于不一样类型的并发编程的异同?
不管哪一种并发机制,同步对共享数据的并发访问都是一个困难的问题。
进程是由内核自动调度的,并且由于它们有各自独立的虚拟地址空间,因此要实现共享数据,必需要有显式的IPC机制。
事件驱动程序建立它们本身的并发逻辑流,这些逻辑流被模型化为状态机,需用I/O多路复用来显式地调度这些流。
同基于进程的流同样,线程也是由内核自动调度的。
项目 PWD
无。
本身的收获(投入,效率,效果等)
总的来讲这学期其实仍是自学的比较多,课堂实践内容相对来讲要比课本学习复杂一点。C语言的编程能力有了必定的提高,对Linux操做系统和windows的不一样有了更直观的感觉。本身须要改进的地方
这学期的学习效率好像要更低?自学容易抓不住重点,好像在一些没必要要的内容上浪费了很多时间。若是有结对,写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
在实验的时候可以高效的完成实验内容。
若是从新学习这门课,怎么作才能够学的更好?
多敲敲代码,有选择性的参考网络文章,能对课本内容有更好的了解。
你平均每周投入到本课程多长时间?
18-20小时每周的学习效率有提升吗?
有的吧。学习效果本身满意吗?
通常。课程结束后会继续一周至少一篇博客吗?(若是能作到,毕业时我把你的博客给你集结成一本书送给你做记念)
不会吧。你以为这门课老师应该继续作哪一件事情?
课下测试。你以为这门课老师应该中止作哪一件事情?
课堂笔记互评。你以为这门课老师应该开始作什么新的事情?
暂时没有什么好的建议。