1. fs gs 寄存器
    1. FS 寄存器
    2. GS 寄存器
  2. xv6:Multithreading
    1. sleep and wake up

fs gs 寄存器

在 gdb 中查看 fs gs

FS 寄存器

在多数现代的x86_64 Linux系统中,FS寄存器用于指向线程特定数据(Thread Local Storage, TLS)。每个线程都有其自己的TLS区域,用于存储线程内部变量等线程私有数据。这样,即使多个线程执行相同的代码,它们也能保持各自的状态信息,因为每个线程都通过FS寄存器访问其自己的数据。这对于编写可重入代码和线程安全的应用程序非常重要。

GS 寄存器

在x86_64 Linux系统中,GS寄存器的使用相对较少,但在某些情况下,它被用于类似的目的,比如访问特定于线程或CPU的数据结构。有的实现可能会用它来存储指向内核数据结构的指针,如内核的per-cpu变量等。

不过,具体到每个操作系统版本或特定的场景,FSGS寄存器的确切用途可能有所不同。操作系统内核开发者可能会根据需要调整这些寄存器的用途以优化性能或实现特定的功能。

xv6:Multithreading

进程加上楽锁之后就不会在多个 cpu 上运行

swtch 在 swtch.S 文件中,用于交换 context 里面的寄存器。将 cpu context 和 proc context 置换

sched sched 将某一个进程从 cpu 上移出,换成 scheduler 进程

yield 调用 sched

sleep and wake up