b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

tls Linux进程切换(1) 基本框架(5)

电脑杂谈  发布时间:2018-02-14 07:31:13  来源:网络整理

(2)概念同上,不过是处理tls(thread local storage)的切换。这里硬件寄存器涉及tpidr_el0和tpidrro_el0,涉及的内存是task.thread.tp_value。具体的应用场景是和线程库相关,具体大家可以自行学习了。

(3)具体的切换发生在arch/arm64/kernel/entry.S文件中的cpu_switch_to,代码如下:

ENTRY(cpu_switch_to) -------------------(1)

mov x10, #THREAD_CPU_CONTEXT ----------(2)

add x8, x0, x10 --------------------(3)

mov x9, sp

stp x19, x20, [x8], #16----------------(4)

stp x21, x22, [x8], #16

stp x23, x24, [x8], #16

stp x25, x26, [x8], #16

stp x27, x28, [x8], #16

stp x29, x9, [x8], #16

str lr, [x8] ---------A

add x8, x1, x10 -------------------(5)

ldp x19, x20, [x8], #16----------------(6)

ldp x21, x22, [x8], #16

ldp x23, x24, [x8], #16

ldp x25, x26, [x8], #16

ldp x27, x28, [x8], #16

ldp x29, x9, [x8], #16

ldr lr, [x8] -------B

mov sp, x9 -------C

ret -------------------------(7)

ENDPROC(cpu_switch_to)

(1)进入cpu_switch_to函数之前,x0,x1用做参数传递,x0是prev task,就是那个要挂起的task,x1是next task,就是马上要切入的task。cpu_switch_to和其他的普通函数没有什么不同,尽管会走遍万水千山,但是最终还是会返回调用者函数__switch_to。

在进入细节之前,先想一想这个问题:cpu_switch_to要如何保存现场?要保存那些通用寄存器呢?其实上一小段描述已经做了铺陈:尽管有点怪异,本质上cpu_switch_to仍然是一个普通函数,需要符合ARM64标准过程调用文档。在该文档中规定,x19~x28是属于callee-saved registers,也就是说,在__switch_to函数调用cpu_switch_to函数这个过程中,cpu_switch_to函数要保证x19~x28这些寄存器值是和调用cpu_switch_to函数之前一模一样的。除此之外,pc、sp、fp当然也是必须是属于现场的一部分的。

(2)得到THREAD_CPU_CONTEXT的偏移,保存在x10中

(3)x0是pre task的进程描述符,加上偏移之后就获取了访问cpu context内存的指针(x8寄存器)。所有context的切换的原理都是一样的,就是把当前cpu寄存器保存在内存中,这里的内存是在进程描述符中的 thread.cpu_context中。

(4)一旦定位到保存cpu context(各种通用寄存器)的内存,那么使用stp保存硬件现场。这里x29就是fp(frame pointer),x9保存了stack pointer,lr是返回的PC值。到A代码处,完成了pre task cpu context的保存动作。

(5)和步骤(3)类似,只不过是针对next task而言的。这时候x8指向了next task的cpu context。

(6)和步骤(4)类似,不同的是这里的操作是恢复next task的cpu context。执行到代码B处,所有的寄存器都已经恢复,除了PC和SP,其中PC保存在了lr(x30)中,而sp保存在了x9中。在代码C出恢复了sp值,这时候万事俱备,只等PC操作了。

(7)ret指令其实就是把x30(lr)寄存器的值加载到PC,至此现场完全恢复到调用cpu_switch_to那一点上了。

参考文献:

1、ARM标准过程调用文档(IHI0056C_beta_aaelf64.pdf)

2、Linux 4.4.6内核源代码


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-76979-5.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...