进程(线程 + 内存 + 文件/网络句柄)
- 内存:逻辑内存
- 文件/网络句柄:为所有线程所共有
- 线程:进程所创建的,进程是线程的容器
孤儿进程
指的是父进程死掉的子进程,这些孤儿进程会被init进程(进程号为1)所收养,由init 进程对它们完成状态收集工作
僵尸进程
一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait() 或 waitpid(),那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。
线程(栈 + PC + TLS)
- 栈
- PC(程序计数器):PC就是指向当前的指令,而这个指令是放在内存中。 每个线程都有一串自己的指针,去指向自己当前所在内存的指针
- TLS(Thead Local Storage): 存储线程所独有的数据
进程与线程的区别
- 进程是资源调度的最小单位,线程是系统调用的最小单位
- 进程有自己独立的内存空间,线程可以共享进程的内存空间
死锁
原因
- 系统资源不足
- 进程推进的顺序不合适
- 资源分配不当
导致死锁的四个必要条件
- 一个进程一次只能访问一个资源,其它进程不能访问已经分配的资源
- 一个进程在等待其它资源的时候,继续占有已经抢占到的资源
- 一个进程不能强行抢占另一个进程的资源
- 存在一个封闭的进程链,导致每一个进程都在等待下一个进程的资源