9.1 实现内核线程
9.1.1 执行流
多任务操作系统采用了一种称为多道程序设计的方式,使处理器在所有任务之间来回切换。
任务调度器是操作系统中用于把任务轮流调度上处理器运行的一个软件模块。
调度器在内核中维护一个任务表(也称进程表、线程表或调度表),然后按照一定的算法,从任务表中选择一个任务,然后把该任务放到处理器上运行,当任务运行的时间片到期后,再从任务表中找另外一个任务放到处理器上运行。
执行流是独立的,它的独立性体现在每个执行流都有自己的栈、一套自己的寄存器映像和内存资源。
9.1.2 线程到底是什么
在线程中调用函数是让所运行的函数能够以调度单元的身份独立上处理器运行,当函数可以独立运行时,就会有更大的好处,就是可以让程序中的多个函数(执行流)以并行的方式运行。
9.1.3 进程与线程的关系、区别简述
线程:具有能动性、执行力、独立的代码块
进程:进程=线程+资源
9.1.4 进程、线程的状态
9.1.5 进程的身份证 ---- PCB
操作系统为每个进程提供了一个 PCB,即进程控制块。
9.1.6 实现线程的两种方式 ---- 内核或用户进程
- 在用户空间中实现线程
- 可移植性强
- 调度算法由用户自己实现
- 将线程的寄存器映像装载到 CPU 时,可以在用户空间完成,不需要陷入内核态,免去了进入内核时的入栈及出栈操作
- 如果某个线程出现阻塞,操作系统会将整个进程挂起
- 每个线程执行的时间片非常短暂,再加上进程内线程调度器维护线程表、运行调度算法的时间片消耗,反而抵消了内部调度带来的提速
- 在内核空间中实现线程
- 相比在用户空间中实现线程,内核提供的线程相当于让进程多占了处理器资源
- 当进程中的某一线程阻塞后,其它线程不受影响
9.2 在内核空间实现线程
9.2.1 简单的 PCB 及线程栈的实现
ABI 是 Application Binary Interface,即应用程序二进制接口。API 是 Application Programming Interface,即应用程序可编程接口,不过这是库函数和操作系统的系统调用之间的接口。ABI 与此不同,ABI 规定的是更加底层的一套规则,属于编译方面的约定,比如参数如何传递,返回值如何存储,系统调用的实现方式,目标文件格式或数据类型等。只要操作系统和应用程序都遵守同一套 ABI 规则,编译好的应用程序可以无需修改直接在另一套操作系统上运行。