12、进程数据结构(上):项目多了就需要项目管理系统

前面两节,我们讲了如何使用系统调用,创建进程和线程。你是不是觉得进程和线程管理,还挺复杂的呢?如此复杂的体系,在内核里面应该如何管理呢? 有的进程只有一个线程,有的进程有多个线程,它们都需要由内核分配CPU来干活。可是CPU总共就这么几个,应该怎么管...

趣谈Linux操作系统

13、进程数据结构(中):项目多了就需要项目管理系统

上一节我们讲了,task_struct这个结构非常长。由此我们可以看出,Linux内核的任务管理是非常复杂的。上一节,我们只是讲了一部分,今天我们接着来解析剩下的部分。 运行统计信息作为项目经理,你肯定需要了解项目的运行情况。例如,有的员工很长时间都...

趣谈Linux操作系统

14、进程数据结构(下):项目多了就需要项目管理系统

上两节,我们解读了task_struct的大部分的成员变量。这样一个任务执行的方方面面,都可以很好地管理起来,但是其中有一个问题我们没有谈。在程序执行过程中,一旦调用到系统调用,就需要进入内核继续执行。那如何将用户态的执行和内核态的执行串起来呢? 这...

趣谈Linux操作系统

15、调度(上):如何制定项目管理流程?

前几节,我们介绍了task_struct数据结构。它就像项目管理系统一样,可以帮项目经理维护项目运行过程中的各类信息,但这并不意味着项目管理工作就完事大吉了。task_struct仅仅能够解决“看到”的问题,咱们还要解决如何制定流程,进行项目调度的问...

趣谈Linux操作系统

16、调度(中):主动调度是如何发生的?

上一节,我们为调度准备了这么多的数据结构,这一节我们来看调度是如何发生的。 所谓进程调度,其实就是一个人在做A项目,在某个时刻,换成做B项目去了。发生这种情况,主要有两种方式。 方式一:A项目做着做着,发现里面有一条指令sleep,也就是要休息一下,...

趣谈Linux操作系统

17、调度(下):抢占式调度是如何发生的?

上一节,我们讲了主动调度,就是进程运行到一半,因为等待I/O等操作而主动让出CPU,然后就进入了我们的“进程调度第一定律”。所有进程的调用最终都会走__schedule函数。那这个定律在这一节还是要继续起作用。 抢占式调度上一节我们讲的主动...

趣谈Linux操作系统
1234512