NOTE

2.1 线程

1. 什么是线程 进程内的执行流 线程是进程的执行流。多线程指进程有多个执行流。 如果线程是在user level实现的,那么叫做用户态线程。如果是在kernel level实现的,那么叫做内核级线程。区别在于前者内核无法感知到线程的运行。 在Linux中,用的是内核级线程(LWP)。每个线程在内核

Operating System / Linux创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 什么是线程

进程内的执行流 线程是进程的执行流。多线程指进程有多个执行流。 如果线程是在user level实现的,那么叫做用户态线程。如果是在kernel level实现的,那么叫做内核级线程。区别在于前者内核无法感知到线程的运行。 在Linux中,用的是内核级线程(LWP)。每个线程在内核看来都是单独的进程 使用clone调用可以创建一个线程

2. 线程调度

2.1. 有谁调度

操作系统内核

2.2. 什么时候发生调度

  • 用户程序使用系统调用进入操作系统内核;
  • 硬件中断。硬件中断处理程序由操作系统提供,所以当硬件发生中断时,就会执行操作系统代码。硬件中断有个特别重要的时钟中断,这是操作系统能够发起抢占调度的基础。

2.3. 怎么调度

  • 保存上下文
    • 一组通用寄存器的值
    • 将要执行的下一条指令的地址

3. 线程本地存储(TLS)

3.1. 是什么

Thread Local Storage。 普通的全局变量在多线程是共享的,一个线程修改了那么其他线程可以看到这个修改。 TLS的话每个线程都有一个副本,一个线程修改了,不会影响到其他线程