20、内存管理(上):为客户保密,规划进程内存空间布局平时我们说计算机的“计算”两个字,其实说的就是两方面,第一,进程和线程对于CPU的使用;第二,对于内存的管理。所以从这一节开始,我们来看看内存管理的机制。 我之前说把内存管理比喻为一个项目组的“封闭开发的会议室”。很显然,如果不隔离,就会不安全、就会...2025-10-31
19、线程的创建:如何执行一个新子项目?上一节,我们了解了进程创建的整个过程,今天我们来看线程创建的过程。 我们前面已经写过多线程编程的程序了,你应该都知道创建一个线程调用的是pthread_create,可你知道它背后的机制吗? 用户态创建线程你可能会问,咱们之前不是讲过了吗?无论是进程...2025-10-31
18、进程的创建:如何发起一个新项目?前面我们学习了如何使用fork创建进程,也学习了进程管理和调度的相关数据结构。这一节,我们就来看一看,创建进程这个动作在内核里都做了什么事情。 fork是一个系统调用,根据咱们讲过的系统调用的流程,流程的最后会在sys_call_table中找到相应...2025-10-31
17、调度(下):抢占式调度是如何发生的?上一节,我们讲了主动调度,就是进程运行到一半,因为等待I/O等操作而主动让出CPU,然后就进入了我们的“进程调度第一定律”。所有进程的调用最终都会走__schedule函数。那这个定律在这一节还是要继续起作用。 抢占式调度上一节我们讲的主动...2025-10-31
16、调度(中):主动调度是如何发生的?上一节,我们为调度准备了这么多的数据结构,这一节我们来看调度是如何发生的。 所谓进程调度,其实就是一个人在做A项目,在某个时刻,换成做B项目去了。发生这种情况,主要有两种方式。 方式一:A项目做着做着,发现里面有一条指令sleep,也就是要休息一下,...2025-10-31