操作系统思考 第十章 条件变量

2016-07-12
阅读 7 分钟
2.5k
像上一章所展示的那样,许多简单的同步问题都可以用互斥体解决。这一章中我会介绍一个更大的挑战,著名的“生产者-消费者”问题,以及一个用于解决它的新工具,条件变量。

操作系统思考 第十一章 C语言中的信号量

2016-07-11
阅读 5 分钟
3.8k
这一章展示了C语言用于处理信号量的API,以及我用于使它更加容易使用的代码。而且它展示了一个终极挑战:你能不能使用互斥体和条件变量来实现一个信号量?

操作系统思考 第九章 线程

2016-07-11
阅读 5 分钟
2k
当你创建进程时,操作系统会创建一块新的地址空间,它包含text段、static段、和堆区。它也会创建新的“执行线程”,这包括程序计数器和其它硬件状态,以及运行时栈。

操作系统思考 第八章 多任务

2016-07-10
阅读 3 分钟
2k
在当前的许多系统上,CPU包含多个核心,也就是说它可以同时运行多个进程。而且,每个核心都具有“多任务”的能力,也就是说它可以从一个进程快速切换到另一个进程,创造出同时运行许多进程的幻象。

操作系统思考 第七章 缓存

2016-07-09
阅读 7 分钟
2.8k
当程序启动时,代码(或者程序文本)通常位于硬盘上。操作系统创建新的进程来运行程序,之后“加载器”将代码从存储器复制到主存中,并且通过调用main来启动程序。

操作系统思考 第零章 前言

2016-07-07
阅读 2 分钟
4.7k
在许多计算机科学的课程中,操作系统都是高级话题。学生在上这门课之前,它们已经知道了如何使用C语言编程,他们也可能上过计算机体系结构(组成原理)的课程。通常这门课的目标是让学生们接触操作系统的设计与实现,并带有一些他们未来在该领域所研究的隐含假设,或者让他们手写OS的一部分。

操作系统思考 第六章 内存管理

2016-07-07
阅读 4 分钟
2.5k
malloc,它接受表示字节单位的大小的整数,返回指向新分配的、(至少)为指定大小的内存块的指针。如果不能满足要求,它会返回特殊的值为NULL的指针。

操作系统思考 第五章 更多的位与字节

2016-07-06
阅读 4 分钟
1.8k
对于负数,最清晰的表示法使用符号位来表明一个数是正数还是负数。但是还有另一种表示法,叫做“补码”(two's complement),它更加普遍,因为它和硬件配合得更好。

操作系统思考 第四章 文件和文件系统

2016-07-05
阅读 4 分钟
2.9k
当一个进程运行完毕(或崩溃)时,任何储存在主存的数据都会丢失。但是储存在机械硬盘(HDD)或固态硬盘(SSD)的数据是“持久”的。也就是说,它在进程结束之后,甚至关机之后仍旧存在。

操作系统思考 第三章 虚拟内存

2016-07-02
阅读 5 分钟
2.2k
比特是二进制的数字,也是信息的单位。一个比特有两种可能的情况,写为0或者1。如果是两个比特,那就有四种可能的组合,00、01、10和11。通常,如果你有b个比特,你就可以表示2 ** b个值之一。一个字节是8个比特,所以它可以储存256个值之一。

操作系统思考 第二章 进程

2016-06-30
阅读 3 分钟
2k
抽象(Abstraction):抽象是复杂事物的简单表示。例如,如果你开车的话,应该知道车轮向左转的时候车也会向左行驶,反之亦然。当然,方向盘由一系列机械和传动系统所连接,用于使轮子转向,并且轮子和路面的相互作用方式也很复杂。但是作为一个司机,你通常不需要考虑这些细节。你可以仅仅建立方向盘的心智模型,这种心...

操作系统思考 第一章 编译

2016-06-29
阅读 4 分钟
2.4k
人们通常把编程语言描述为编译语言或者解释语言。前者的意思是程序被翻译成机器语言,之后由硬件执行;而后者的意思是程序被软件解释器读取并执行。例如,C被认为是编译语言,而Python被认为是解释语言。但是二者之间的界限并不总是那么明显。