0%

万事开头难,尤其是和 0 与 1 打交道,和后面的实验相比,这次只能算个热身。但是喜欢运动的都知道,热身很重要!

阅读全文 »

进程和线程有什么差别?超线程又是什么意思?为什么多线程能够提高程序执行的速度?是所有情况都适用吗?并行程序有没有什么限制?这一讲我们来聊聊并行与同步这两个『继往开来』的概念。在今后的学习中,大家一定会不止一次发现,很多问题说来说去,其实就是并行与同步的问题。

阅读全文 »

如果说《深入理解计算机系统》的课本是九十分的话,那么配套的实验少说得有一百五十分。完成实验的过程,也就是深入理解计算机系统的过程,真正动手去做,一是会发现『纸上得来终觉浅』,二是会意识到『知行合一』的重要性。

阅读全文 »

在这个网络成为『必需品』的时代,让我们从最原始的 Socket(套接字)开始,来看看程序是如何通过网络进行『沟通』的。更有意思的是,这一讲我们会介绍如何通过 C 语言从零开始实现自己的服务器程序。

阅读全文 »

进程是操作系统中最重要的抽象,虚拟内存令这一切成为可能,为什么进程可以使用完整且连续的虚拟地址空间,而不需要关注物理内存呢?另外,计算机又是如何管理我们 new 的对象的?这一讲我们就来看看关于内存的这两个重要话题。

阅读全文 »

Linux 系统中 IO 的概念是非常有趣的,结合『所有东西都是文件』这个抽象,无论是输入输出重定向,还是挂载不同的设备,甚至是网络编程,都可以由系统输入输出这个统一的模型来进行描述。这一讲我们就来了解一下以 stdin, stdout 等为代表的系统输入输出。

阅读全文 »

异常控制流可能是很多人知道却说不清楚具体发生了什么的『著名』概念,什么是异常?系统又是怎么处理这个看起来『不一样』的机制的呢?信号在这里扮演了什么角色?这一讲我们就来讲讲异常与信号到底是怎么回事儿。

阅读全文 »

不同的代码是如何被拼到一起协同工作的呢?所谓的静态库,动态库又是什么?编译和链接的不同在哪里?这一讲我们结合一丁点编译原理的内容,来说说链接那点事儿。

阅读全文 »

我们知道,速度越快的存储,价格也就越贵。计算机作为工程的结晶,是如何从一条规则出发,做到『物美价廉』的呢?这条规则又是什么呢?这一讲我们从不同的存储讲起,看看『带着镣铐跳舞』的最高境界。

阅读全文 »

计算机能读懂的只有零和一,而我们用汇编去和计算机『感同身受』。接近硬件底层,很多代码中再平常不过的概念,具体实现起来则并没有看起来那么『理所当然』。这一讲我们会了解程序到底是如何执行的,在知其所以然后,自然可以发现高效代码的秘密。

阅读全文 »