10、进程:公司接这么多项目,如何管?

有了系统调用,咱们公司就能开始批量接项目啦!对应到Linux操作系统,就是可以创建进程了。 在[命令行]那一节,我们讲了使用命令创建Linux进程的几种方式。现在学习了系统调用,你是不是想尝试一下,如何通过写代码使用系统调用创建一个进程呢?我们一起来...

趣谈Linux操作系统

11、线程:如何让复杂的项目并行执行?

上一节我们讲了如何创建进程,这一节我们来看如何创建线程。 为什么要有线程?其实,对于任何一个进程来讲,即便我们没有主动去创建线程,进程也是默认有一个主线程的。线程是负责执行二进制指令的,它会根据项目执行计划书,一行一行执行下去。进程要比线程管的宽多了...

趣谈Linux操作系统

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操作系统

18、进程的创建:如何发起一个新项目?

前面我们学习了如何使用fork创建进程,也学习了进程管理和调度的相关数据结构。这一节,我们就来看一看,创建进程这个动作在内核里都做了什么事情。 fork是一个系统调用,根据咱们讲过的系统调用的流程,流程的最后会在sys_call_table中找到相应...

趣谈Linux操作系统

19、线程的创建:如何执行一个新子项目?

上一节,我们了解了进程创建的整个过程,今天我们来看线程创建的过程。 我们前面已经写过多线程编程的程序了,你应该都知道创建一个线程调用的是pthread_create,可你知道它背后的机制吗? 用户态创建线程你可能会问,咱们之前不是讲过了吗?无论是进程...

趣谈Linux操作系统
12347