进程调度是Linux中的一个重要的话题,在多道程序设计系统中,经常会发生多个进程或者线程同时竞争CPU。所以,一定要有一个程序来决定由哪个进程来占用CPU,这个程序就是我们所说的调度程序。本文简要地总结了Linux下常见的调度机制及相关的问题。

Read More

最近拿到了Dr. Ke Shi发的DEVISER TelosB节点,由于Dr.给的文档是基于Ubuntu14.04的,而我使用的是Archlinux。并且发现在Arch环境下配置还有些不同的地方,于是收集资料整理了这一篇在Archlinux环境下配置TinyOS的教程。详细说明了在Arch环境下需要安装的软件包,配置的环境变量和py版本的处理等问题。最后还附加了一个烧写亮灯程序的示例。

Read More

接下来两个lab都是和程序优化有关,内容基于CSAPP的第五章:优化程序性能和第六章存储器层次结构
Performance Lab其实是本书第二版中这一章节的实验,在第三版中它已经被Cache Lab取代,不过作为Cache Lab的一个预热,也是值得做一做的。当然这个Lab比较简单,我就不做过多说明了。

Read More

从这个lab开始,你在看完书本的内容后,还得仔细看一下材料自带的讲义,不看的话估计不知道从何下手。
这个lab就非常有趣了,任务要求我们去实现对两个程序的缓冲区溢出攻击,分别涉及代码注入攻击和返回导向编程攻击,总体来说难度并不是很大。
这个lab很好的向我们说明了诸如gets()这类函数的危险性有多大。

Read More

最近因为参加比赛有两周没有做lab了,上周做完了bomb lab,现在终于想起来补这篇解题报告,这次实验是一次相当有趣的拆炸弹游戏(嗯,没错,你可以理解为游戏),要利用gdb进行反汇编调试,一步步找到通过六个关卡和一个隐藏关的密码。总体涉及C语言的分支跳转循环链表二叉树等结构的汇编语言表示,总的说来并不算特别难。

Read More

这个学期开始啃CSAPP–这本计算机名著了,打算来补一波基础。这本书从表层到底层概述了计算机系统的方方面面,读着相当舒服,让人放不下来。而这本书最吸引人的就是官方配套的9个lab,CMU的学生们说这本书有趣,令人兴奋,主要就是因为这些lab练习,它们不仅有趣,而且也有完好的评分机制和严格的检查,能让读者对自己的阅读进行一个自我检测。写这一系列博客一方面是为了整理自己做lab中遇到的问题和习题解答,另一方面也是每周督促自己进一步阅读,早日战胜这整本书。
Data lab是本书中的第一个lab,内容对应书本第二章,涉及到整数补码和单精度浮点数的位表示。通过在很严格的要求下用位运算完成15个函数,来熟悉理解和掌握相关的数据表示和转换的方法。

Read More

暑假学校布置了C语言课程设计的作业,其中需要一个用户图形界面。我就想能不能用点新奇的,于是想到了使用HTML界面,可以用JS做出很多生动的效果。那么,我们要怎么实现网页与C后端的通信呢,就要用到本文所讲解的websocket。
Websocket是HTML5的一种新的协议,它实现了浏览器与服务器的全双工通信。那么websocket和以前的HTTP相比有什么好处呢,我们如何从底层去实现它呢?本文旨在讲解websocket协议的C语言实现和应用。

Read More

最近看到了KMP算法,第一次看这个也确实是头疼,上网查了一下发现确实又很多人都在说这个算法不好理解,于是我在自己搞懂之后,决定自己写一个KMP算法的教程(C语言),与大家分享一下。

Read More