线程
进程是资源分配的基本单位,线程是任务调度的基本单位。引入进程是为了使多道程序有条不紊的并发执行,提高资源利用率和系统吞吐量;引入进程是为了减少程序在并发执行时所付出的时空开销。
线程间的同步和通信
1、互斥锁:共享多个资源时导致死锁。
2、互斥锁+条件变量:解决共享一个临界资源时的死锁问题。
3、信号量:①私用信号量:存放于应用程序的地址空间中,OS并不知道其存在,用于同一进程中各线程之间的同步;②公用信号量:存放于受保护的系统存储区中,由OS为它分配空间并进行管理,用于不同进程间或不同进程的线程之间的同步。
线程的实现方式
1、内核支持线程KST:无论是用户进程中的线程,还是系统进程中的线程,他们的创建、撤消、切换以及要求由系统设备完成的I/O操作,都是在内核空间中实现的。
2、用户级线程ULT:创建、撤消、切换以及同步和通信,都无需内核的支持。内核完全不知道用户级线程的存在。
3、KST/ULT组合方式
线程的实现
1、内核支持线程的实现:系统在创建一个新进程时,便为它分配一个任务数据区PDTA,其中包含若干个线程控制块TCB空间。在每一个TCB中可保存线程标识符、优先级、线程运行的CPU状态信息等。虽然这些信息与用户级线程TCB中的信息相同,但现在却是被保存在内核空间中。
2、用户级线程的实现:采用中间系统①运行时系统;②内核支持线程(如下图)