进程
进程与线程
在未配置 OS 的系统中,程序的执行方式是顺序执行,即必须在一个程序执行完后,才允许另一个程序执行;在多道程序环境下,则允许多个程序并发执行。程序的这两种执行方式间有着显著的不同。也正是程序并发执行时的这种特征,才导致了在操作系统中引入进程的概念。进程是资源分配的基本单位,线程是资源调度的基本单位。
进程是一种操作系统概念,用于描述具有单独的内存空间和资源的任务。在 Linux 中,使用 clone() 系统调用创建进程,该系统调用会克隆现有进程以创建新进程。clone() 调用接受各种标志,这些标志告诉 Linux 与原始进程共享/复制哪些资源。通常,不直接使用 clone() 系统调用。取而代之的是,我们使用在 glibc(用户空间)中实现的 POSIX 调用(如 fork())。实际上,我们使用的大多数 Linux 和 POSIX 接口都是在 glibc 中实现的,而不是在内核中实现的。
我们知道 fork() 调用通过使用带有一堆标志的 clone() 创建一个进程。使用 pthread_create() 调用创建线程。在后台,线程和进程都是任务,并由称为 task_struct 的结构表示。task_struct 大约有 170 个字段,大小约为 1k。一些值得注意的字段是:user,pid,tgid,files,fs,nsproxy
- fs_struct
* fs
包含有关当前根目录,工作目录,umask 等的信息。 - pid 结构将进程映射到一个或多个任务