本次实验主要考察汇编代码以及GDB调试的应用。实验总共要求6次输入,每次输入都正确才算完成实验,每次输入的值隐藏在汇编代码中。实验通过反汇编二进制文件得到汇编代码,通过GDB查看寄存器值和内存器值辅助阅读代码,理解代码之间的逻辑及联系,找到解题的关键。
CSAPP-lab1-DATALAB
本次实验主要是考察书本第二章的内容,要求掌握数字信息在计算机中的存储方式以及相关运算,比如数字的补码表示,补码运算;浮点数的表示和计算等,需要了解计算机是如何去“认识”一个数字。事实上题目本身不难,但是可用的运算操作符和最大的操作符数量有限制,这就使得题目难度陡升,需要仔细思考,纠结很久才能写完一题,这是因为本人对位运算不怎么熟悉。下面具体分析一下每一道题。
(ps:这里有一个解释写的比较好的网站,位运算有时候就是想不出来,郁闷。)
分布式入门篇(五)
在分布式系统中,要维持“多机表现的像单机”一样是非常困难的,原因在于维护一致性的成本很高,特别是在物理位置相隔很远的两台服务器之间维持一致性难度更高。一致性的难点在于:我们无法保证网络通信是一定可用的,由于网络分区(两台主机失联)的可能性非常大,很容易造成信息冲突;另一方面,任务的顺序也很难保持一致,若选择不通过通信的方式来维护一个全局一致的序号,那么由于时钟的偏差,一段时间后两台主机的时间就会出现较大的差别,造成后来的事件反而排在前面的情况,若选择网络通信的方式来维持一个序号,则要面临网络分区的风险。处理一致性一个较好的方法就是paxos,不同于要求全部主机达成一致,其只要(N/2+1)台主机达成一致(N是节点数量),这时候,因为任意两个大小为(N/2+1)的集合一定存在交集,所以只要(N/2+1)台节点达成一致,那么慢慢的,所有主机都会达成一致,当然paxos也会出现永远无法达成一致的情况(活锁),不过我们暂时不考虑这个。
由于维护一致性的成本很高,因此我们需要考虑一下,真的所有任务都需要维持强一致性吗?对于某些可以不需要维持强一致性的任务来说(比如不需要考虑信息到达的次序,只要保证信息都到达了,我们就能得到正确的结果),此时维护强一致性是不必要并且是降低系统可用性的,所以对于这一类任务,我们可以使用一些新的方法。