I can do all things...
32.Common Concurrency Problems 32.Common Concurrency Problems
32. Common Concurrency Problems32.1 What Types Of Bugs Exist? 并发中有哪些类型的bug?大致分为两种:non-deadlock bugs和deadlock bugs。
31.Semaphores 31.Semaphores
31. Semaphores 前面已经学习了使用lock和condition varivable来实现并发,这一节学习semaphore信号量。有了semaphore,就只有统一的原语操作了,可以用semaphore来实现lock和cond
30.Condition Variables 30.Condition Variables
30. Condition Variables 之前介绍了lock,以及使用lock构建的一些线程安全的数据结构。但是那并不是所有并发的内容,说到并发,怎么能不谈谈同步呢?并发中,一个线程等待另一个线程是很常见的事情。举个栗子,父线程要等待
29.Lock-based Concurrent Data Structures 29.Lock-based Concurrent Data Structures
29. Lock-based Concurrent Data Structures 有了lock之后,就可以用在一些数据结构中,使其变得thread safe线程安全。问题来了:给定一个数据结构时,如何加入lock使其能够正常工作?如何加入
28.Locks 28.Locks
28. Locks 并发中最基本的问题就是如何保证一段代码执行的原子性,这一章的lock就是用来解决这个问题的。
26.Concurrency:An Introduction 26.Concurrency:An Introduction
26. Concurrency: An Introduction 在前面很长的部分里我们讨论了虚拟化的问题,主要是对CPU和内存的虚拟化。在接下来的部分里,我们将学习一个进程(process)的抽象,那就是线程(thread)。一个进程可以
22.Beyond Physical Memory:Policies 22.Beyond Physical Memory:Policies
22. Beyond Physical Memory: Policies 接着上一节的内容来学习replacement policy,问题:OS如何决定从内存中替换哪些page?
21.Beyond Physical Memory:Mechanisms 21.Beyond Physical Memory:Mechanisms
21. Beyond Physical Memory: Mechanisms 目前为止,我们一直假设page是全部保存在内存中的。但是,由于内存有限的原因,再加上可能运行的进程数很多导致有许多page,实际上内存往往还保存在 hard di
20.Paging:Smaller Tables 20.Paging:Smaller Tables
20. Paging: Smaller Tables 继续之前的问题,page table可能过大,上一节采用了TLB缓存的方法,这一节来看看不同的方法。问题来了,如何让page table 变小呢?有哪些方法?这些方法又会带来哪些问题?
19.Paging:Faster Translations(TLBs) 19.Paging:Faster Translations(TLBs)
19. Paging: Faster Translations (TLBs) Page table存在内存中,因此使用paging的方法需要额外的内存访问,因此比较耗时。问题:如何加速地址翻译并且避免额外的内存访问?需要哪些硬件支持?OS又
18.Paging:Introduction 18.Paging:Introduction
18. Paging: Introduction 内存管理有两种,一种是采用变长的chunk,也就是之前讲的segmentation。这章来讲一讲第二种方法,采用定长的chunk,这种方法叫做paging。我们把地址空间分成大小相等unit
17.Free-Space Management 17.Free-Space Management
17. Free-Space Management 这节就接着上节来讲讲怎么进行内存管理。具体来说,我们要讨论的就是paging的概念。简单点的话,把内存分成固定大小的块,管理这些块即可。复杂点来说,当这些块的大小不固定时,变长时该如何管理
3 / 4