【技术研究】并行和并发
突然由TEB转向并行和并发是因为在研究线程和进程的时候,在研究切换线程的问题的时候,不明白在计算机当中,是怎么样在同样进程的不同线程,不同进程的不同线程当中切换的,特此再学习并行和并发。
我的定义:
并发:一个CPU在面对多个任务的时候,将任务分成多个碎块,给每个碎块一定的时间,然后执行第一个碎片,执行完它的时间后根据一定的调度原则去执行下一个碎块。
并行:多个CPU在面对多个任务,不同的CPU处理不同的任务。
而这两者并非互斥概念,在一台计算机的多核处理器,也就是拥有多个处理单元,每个处理单元都会采用并发策略。
。
着重学一下并发
主要是解决一下我上面的问题,如何在不同的进程的不同线程当中切换。
- 现在执行进程A的线程1,CPU的控制权,包括PC指针,栈指针,程序状态字等,全在这个线程上面。
- 在计算机的硬件时钟当中不停地出发时钟中断,每次时钟中断都会将控制权交给操作系统内核的定时器中断处理程序,这是一个特殊的中断处理程序,他负责处理时间相关的操作,比如任务切换和时间片的管理。
- 如果查到已经用完了,调度器就会从就绪队列中找到合适的线程来执行。现在选择了进程B
- 现在需要进行上下文切换了,先将线程1的上下文先存到这个线程的TCB(线程控制块是存放在内核的数据结构当中的,每个线程都有)中,包括PC指针等寄存器值。
- 加载进程B的线程4的上下文信息(也是从TCB当中)。
- 更新线程或者进程的状态信息,标记进程B位运行态,线程4正在运行(这里的更新不止是更新当下寄存器的值,也是更新TCB当中的值)
- CPU控制给这个线程4,开始执行
- 后面重复
在学习过程当中,遇到了不少问题
关于当下上下文信息是和TCB和所在栈区有什么关系
TEB和TCB被存放在哪里
定时器中断处理程序是如何检查当下时间片用完没
关于时间片分配和浪费(时间片的分配尽量和时钟中断的频率相匹配)
关于时钟中断资源造成浪费