linux进程空间、线程、协程
1.
各种寄存器的介绍:参考
软中断、硬中断:参考
"硬中断是外部设备对CPU的中断","软中断通常是硬中断服务程序对内核的中断","信号则是由内核(或其他进程)对某个进程的中断"。
golang 的 gmp 原理: 参考
六种内存序的总结:参考
锁机制:参考
linux上下文切换:参考(结合进程空间,搞清楚发生cpu切换的时机,进程上下文切换和系统调用有什么区别,进程切换和线程切换、中断切换的区别)
进程是由内核管理的,进程切换只能发生在内核态。因此,进程上下文不仅包括虚拟内存、栈和全局变量等用户空间资源,还包括内核栈和寄存器等内核空间的状态。 所以进程上下文切换比系统调用要多出一步: 在保存当前进程的内核状态和 CPU 寄存器之前,需要保存进程的虚拟内存、栈等;并加载下一个进程的内核状态。 根据 Tsuna 的测试报告,每次上下文切换需要几十纳秒至微秒的 CPU 时间。这个时间是相当可观的,尤其是在大量进程上下文切换的情况下,很容易导致 CPU 花费大量时间来保存和恢复寄存器、内核栈、虚拟内存等资源。这正是我们在上一篇文章中谈到的,一个导致平均负载上升的重要因素。
线程的上下文切换其实可以分为两种情况: 首先,前后两个线程属于不同的进程。此时,由于资源不共享,切换过程与进程上下文切换相同; 其次,前后两个线程属于同一个进程。此时,由于虚拟内存是共享的,所以切换时虚拟内存的资源保持不变,只需要切换线程的私有数据、寄存器等未共享的数据。 显然,同一个进程内的线程切换比切换多个进程消耗的资源要少。这也是多线程替代多进程的优势。