目录

操作系统 CPU

常见的寄存器种类

  1. 通用寄存器,用来存放进行运算的数据,比如需进行加和运算的两个数据。
  2. 程序计数器,⽤来存储 CPU 要执⾏下⼀条指令「所在的内存地址」,注意不是存储了下⼀条要执⾏的指令,此时指令还在内存中,程序计数器只是存储了下⼀条指令的地址。
  3. 指令寄存器,⽤来存放程序计数器指向的指令,也就是指令本身,指令被执⾏完成之前,指令都存储在这⾥。

在 Linux 系统,查看 CPU ⾥的 L1 Cache 缓存的容量⼤⼩的命令:

cat /sys/devices/system/cpu/cpu0/cache/index0/size

L1 Cache 分为指令缓存根数据缓存,index0 代表 L1 Cache 数据缓存, index1 代表 L1 Cache 指令缓存;

index2 代表 L2 缓存, index3 代表 L3 缓存。

  • 每个 CPU 核⼼都有⼀块属于⾃⼰的 L1 ⾼速缓存 和 L2 高速缓存,指令和数据在 L1 是分开存放的,所以 L1 ⾼速缓存通常 分成指令缓存和数据缓存。

cpu内存分布

总结一下CPU缓存一致性,基于总线嗅探的MESI协议

Linux内核中线程和进程的底层表示

在 Linux 内核中,进程和线程都是⽤ tark_struct 结构体表示的,区别在于线程的 tark_struct 结构体⾥部分资源是共享了进程已创建的资源,⽐如内存地址空间、代码段、⽂件描述符等,所以 Linux 中的线程也被称为轻量级进程。⼀般来说,没有创建线程的进程,是只有单个执⾏流,它被称为是主线程。如果想让进程处理更多的事情,可以创建多个线程分别去处理,但不管怎么样,它们对应到内核⾥都是 tark_struct 。

所以,Linux 内核⾥的调度器,调度的对象就是 tark_struct ,接下来我们就把这个数据结构统称为任务:

  • 实时任务,对系统的响应时间要求很⾼,也就是要尽可能快的执⾏实时任务,优先级在 0~99 范围内的就算实时任务;
  • 普通任务,响应时间没有很⾼的要求,优先级在 100~139 范围内都是普通任务级别;