进程与线程的概念一样吗

一、进程和线程概述
进程是计算机中的程序运行的实例,它包含了程序的代码、运行时的环境以及系统资源等。线程则是进程中的一个执行序列,是CPU调度的最小单位。每个进程可以拥有多个线程。
进程和线程的主要差异在于它们的管理方式。进程是资源分配的基本单位,而线程则是独立运行和调度的基本单位。由于线程通常不拥有系统资源,对它的调度开销较小,能更高效地提高系统并发执行的程度。
在Linux系统中,进程和线程的主要区别在于是否拥有独立的地址空间。
二、进程描述符和任务结构
进程描述符是描述进程状态和信息的数据结构,它在32位机器上大约占据1.7KB的空间。任务队列是一种双向循环链表,用于管理进程。
进程描述符的主要结构包括:状态(表示进程是否在运行、是否阻塞等)、锁的深度、调度策略、进程标识符、父进程的标识、子进程的标识、兄弟进程的标识等。
三、进程创建和线程创建
进程创建主要通过fork()和exec()两个系统调用完成。fork()用于复制当前进程创建一个子进程,exec()则负责读取可执行文件并载入地址空间。写时拷贝(copy-on-write)是一种优化技术,可以推迟地址空间页的复制,直到实际发生写入操作。
线程创建与进程创建类似,通过clone()函数传递参数标志来指明需要共享的资源。内核线程只在内核空间执行,没有独立的地址空间,只能由其他内核线程创建。
四、进程终结
进程终结时,会释放所占用的资源,并告知父进程。进程调用exit()系统调用时进入终结流程。do_exit()函数是负责执行这一流程的关键函数,包括释放资源、发送信号给父进程等。wait族函数则是用于等待子进程退出的系统调用。
