1.进程和线程的区别
进程是资源分配以及调度的独立单元, 而线程是CPU调度的基本单元
同一个进程可以包括多个线程, 并且线程共享整个进程的地址空间, 以及进程的资源
线程是轻量级进程, 它的创建, 销毁所需要的时间比进程小很多, 所有操作系统中执行的功能都是创建线程来完成的
进程的创建用 fork 或者 vfork, 而线程的创建却是用 pthread_create 来实现, 进程结束后, 它拥有的所有的资源, 所有的线程将会被销毁, 但线程的结束不会影响同一个进程中的其他先后线程结束
线程的执行需要进行同步互斥, 因为线程共享进程资源
线程拥有自己的私有 TCP, 线程 id, 寄存器, 硬件上下文, 栈, 进程也有自己的PCB. 注意私有属性不能被共享, 因为它是用来标识该线程的或者进程的唯一标识
2. 进程的状态
(1)run:运行状态
(2)S(可中断休眠)
(3)D(不可中断休眠)
(4)T(停止状态)
(5)Z(僵尸状态)
3. IPC通信方式
(1)管道(pipe, mkfifo, mknod)
(2)消息队列(msgget, msgsend, msgrecv, msgctl)
(3)共享内存(shmget, shmat, shmctl)
(4)信号量(PV操作, semget, semop, semctl)
4. 死锁
(1)什么是死锁
死锁是进程之间相互等待资源所产生的一种僵持的状态, 如果没有外力的干预将会一直处于这种僵持状态
(2)死锁产生的原因
系统资源不足, 相互竞争资源, 请求资源顺序不当
(3)死锁产生的四个必要条件
1) 互斥条件
2) 资源不可抢占
3) 循环等待
4) 请求与保持条件
(4)死锁的处理方法
因为互斥是不可避免的, 所以只能破坏其他三个条件中的一个解除死锁.如剥夺资源, 杀死其中一个进程