昨天又有Linux Kernel Club!我们花了大约一半的时间解释进程和线程之间的区别,这使我的大脑更加清楚。这是我的理解:
每个进程都有自己的PID和地址空间,线程共享单个进程的PID和地址空间。
什么是地址空间?
每个进程都有一块允许使用的内存,因此进程无法踩到彼此的脚趾。
这包括
该代码或文本的程序
程序的数据(字符串和常量)
在堆(动态,其中使用所述存储器中分配生长malloc
生活)
堆栈(固定大小,实时调用局部变量和函数。相关术语:堆栈溢出,堆栈跟踪)
环境变量
命令行参数
我不确定它们中的大多数是什么意思,但是请参见以“此可伸缩结构中每个字段的含义如下:”开头的列表。
好东西:
它们之间可以更轻松地进行通信,因为它们可以只写入同一内存
不需要为每个新线程制作地址空间的副本
坏事:
因为它们写入相同的内存,所以您可以拥有各种竞争条件。因此,您需要使用互斥对象。
我们还讨论了内核模块。共识是编写内核模块是开始Linux内核开发的一种非常好的方法,所以我想我将在周一尝试编写一个!
我们讨论了一些漏洞利用和rootkit,以及内核模块可以做的令人毛骨悚然的事情。