昨天又有Linux Kernel Club!我们花了大约一半的时间解释进程和线程之间的区别,这使我的大脑更加清楚。这是我的理解:

每个进程都有自己的PID和地址空间,线程共享单个进程的PID和地址空间。

什么是地址空间?

每个进程都有一块允许使用的内存,因此进程无法踩到彼此的脚趾。

这包括

  • 该代码或文本的程序

  • 程序的数据(字符串和常量)

  • 在堆(动态,其中使用所述存储器中分配生长malloc生活)

  • 堆栈(固定大小,实时调用局部变量和函数。相关术语:堆栈溢出,堆栈跟踪)

  • 环境变量

  • 命令行参数

我不确定它们中的大多数是什么意思,但是请参见以“此可伸缩结构中每个字段的含义如下:”开头的列表。

为什么要穿线?

好东西:

  • 它们之间可以更轻松地进行通信,因为它们可以只写入同一内存

  • 不需要为每个新线程制作地址空间的副本

坏事:

  • 因为它们写入相同的内存,所以您可以拥有各种竞争条件。因此,您需要使用互斥对象。

内核模块

我们还讨论了内核模块。共识是编写内核模块是开始Linux内核开发的一种非常好的方法,所以我想我将在周一尝试编写一个!

我们讨论了一些漏洞利用和rootkit,以及内核模块可以做的令人毛骨悚然的事情。