22、进程空间管理:项目组还可以自行布置会议室上两节,我们讲了内存管理的三个方面,虚拟内存空间的管理、物理内存的管理以及内存映射。你现在对进程内存空间的整体布局应该有了一个大致的了解。今天我们就来详细看看第一个方面,进程的虚拟内存空间是如何管理的。 32位系统和64位系统的内存布局有的地方相似,...2025-10-31趣谈Linux操作系统
21、内存管理(下):为客户保密,项目组独享会议室封闭开发上一节,我们讲了虚拟空间的布局。接下来,我们需要知道,如何将其映射成为物理地址呢? 你可能已经想到了,咱们前面讲x86 CPU的时候,讲过分段机制,咱们规划虚拟空间的时候,也是将空间分成多个段进行保存。 那就直接用分段机制呗。我们来看看分段机制的原理...2025-10-31趣谈Linux操作系统
20、内存管理(上):为客户保密,规划进程内存空间布局平时我们说计算机的“计算”两个字,其实说的就是两方面,第一,进程和线程对于CPU的使用;第二,对于内存的管理。所以从这一节开始,我们来看看内存管理的机制。 我之前说把内存管理比喻为一个项目组的“封闭开发的会议室”。很显然,如果不隔离,就会不安全、就会...2025-10-31趣谈Linux操作系统
19、线程的创建:如何执行一个新子项目?上一节,我们了解了进程创建的整个过程,今天我们来看线程创建的过程。 我们前面已经写过多线程编程的程序了,你应该都知道创建一个线程调用的是pthread_create,可你知道它背后的机制吗? 用户态创建线程你可能会问,咱们之前不是讲过了吗?无论是进程...2025-10-31趣谈Linux操作系统
18、进程的创建:如何发起一个新项目?前面我们学习了如何使用fork创建进程,也学习了进程管理和调度的相关数据结构。这一节,我们就来看一看,创建进程这个动作在内核里都做了什么事情。 fork是一个系统调用,根据咱们讲过的系统调用的流程,流程的最后会在sys_call_table中找到相应...2025-10-31趣谈Linux操作系统
17、调度(下):抢占式调度是如何发生的?上一节,我们讲了主动调度,就是进程运行到一半,因为等待I/O等操作而主动让出CPU,然后就进入了我们的“进程调度第一定律”。所有进程的调用最终都会走__schedule函数。那这个定律在这一节还是要继续起作用。 抢占式调度上一节我们讲的主动...2025-10-31趣谈Linux操作系统
16、调度(中):主动调度是如何发生的?上一节,我们为调度准备了这么多的数据结构,这一节我们来看调度是如何发生的。 所谓进程调度,其实就是一个人在做A项目,在某个时刻,换成做B项目去了。发生这种情况,主要有两种方式。 方式一:A项目做着做着,发现里面有一条指令sleep,也就是要休息一下,...2025-10-31趣谈Linux操作系统
15、调度(上):如何制定项目管理流程?前几节,我们介绍了task_struct数据结构。它就像项目管理系统一样,可以帮项目经理维护项目运行过程中的各类信息,但这并不意味着项目管理工作就完事大吉了。task_struct仅仅能够解决“看到”的问题,咱们还要解决如何制定流程,进行项目调度的问...2025-10-31趣谈Linux操作系统
14、进程数据结构(下):项目多了就需要项目管理系统上两节,我们解读了task_struct的大部分的成员变量。这样一个任务执行的方方面面,都可以很好地管理起来,但是其中有一个问题我们没有谈。在程序执行过程中,一旦调用到系统调用,就需要进入内核继续执行。那如何将用户态的执行和内核态的执行串起来呢? 这...2025-10-31趣谈Linux操作系统
13、进程数据结构(中):项目多了就需要项目管理系统上一节我们讲了,task_struct这个结构非常长。由此我们可以看出,Linux内核的任务管理是非常复杂的。上一节,我们只是讲了一部分,今天我们接着来解析剩下的部分。 运行统计信息作为项目经理,你肯定需要了解项目的运行情况。例如,有的员工很长时间都...2025-10-31趣谈Linux操作系统