线程管理
线程控制块 TCB
类似PCB
线程优点
一个进程可以同时存在多个线程,各个线程之间可以并发执行,各个线程之间可以恭喜那个地址空间和文件资源。
线程缺点
一个线程崩溃会导致所属进程的所有线程崩溃。
进程与线程
进程是资源分配单位,线程是CPU调度单位
进程拥有完整的资源平台,线程只独享其中的寄存器和栈
线程也有就绪阻塞执行三种状态和状态转化关系
线程能减少并发执行的时间和空间开销,线程创建终止块,切换快,共享资源可直接进行不依赖内核通信。
用户线程和内核线程
用户线程操作系统看不到,内核线程操作系统看得到
用户线程
线程的创建终止同步和调度都是线程库实现的。TCB在进程内部
用户线程的缺点
当一个线程阻塞以后,整个进程都阻塞了,因为操作系统看不到用户心线程,只能看到进程。
内核线程
内核线程是操作系统看得到的,他的TCB在和PCB放在一起
内核线程的创建终止等都是通过系统调用或内核函数的方式来进行,有内核完成,开销较大,如果内核线程阻塞了,不会影响其他内核线程。时间片分给线程,多线程的进程可以获得更多的CPU时间。
轻量级进程
一个进程可以有多个轻量级进程,每个轻量级进程由一个单独的内核线程来支持。
上下文切换
把进程的资源的上下文(CPU状态)放入PCB中,然后才能安全的调度
exec()
加载程序取代当前进程。
fork()
完全拷贝一份进程,pid不同, 99%的情况,fork()后马上exec()
vfork()
轻量级fork,不创建内存映像,然后调用用exec的时候就比fork+exec快多了。
cow技术 copy on write
当fork的时候不拷贝内存,只有当写的时候才拷贝内存
wait()
常常父进程需要等待子进程结束。wait()等待子进程的exit()的返回值,然后回收子进程的PCB。
exit()
当子进程exit,但是父进程没有做完wait的时候,他就成了僵尸态。
父进程比子进程先死掉怎么办
root进程会在定期扫描进程,寻找僵尸态进程,并终结他们。
- 本文作者: fightinggg
- 本文链接: http://fightinggg.github.io/yilia/yilia/Q8435C.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!