switch_to.h中
define switch_to(prev, next, last) \
do while (0)
會切換將切換前的程序核心堆疊指標用彙編movl %%esp,%[prev_sp] 儲存。其中被儲存的位址%[prev_sp]是prev->thread.sp ,切換後的程序esp從儲存中恢復使用彙編」movl %[next_sp],%%esp,其中%[next_sp]就是儲存到next->thread.sp中的。
即使乙個程序切換到使用者態,它對應的核心態棧被彈出,但是這部分記憶體不會被其他**修改,因此可以在其他cpu上列印該程序在cpu的前一次核心堆疊。
注意: 只在程序切換的時候儲存到thread.sp中,如果是中斷、系統呼叫進出核心,不會儲存,由彙編儲存到堆疊中
每次重新進入核心時,sp通過
movq per_cpu_var(cpu_current_top_of_stack), %rsp 重新設定
x86 64彙編 控制
跳轉指令 條件分支 迴圈switch語句 總結自 深入理解計算機系統 第三版 cpu還維護一組單個位的條件碼暫存器,用來描述最近的算術和邏輯操作的屬性。常用 cf 無符號溢位 of 有符號溢位 zf 零標誌 sf 符號標誌 注意 test指令與and指令一樣,而不改變dest暫存器 用法 兩個運算元...
如何查詢x86 64平台上的核心堆疊位置
current巨集在linux 核心中負責獲取當前cpu上的task struct,通常是借助thread info和核心棧實現 我們需要先找到對應的核心棧,核心棧的棧底位置就是thread info結構體 對於x86 64bit平台來說 declare per cpu unsigned long ...
linux 啟動 過程 學習 (x86 64
1.arch x86 boot header.s kernel setup 從 start開始。設定 stack,bss,最後跳轉到 arch x86 boot main.c。2.在main函式中,把kernel setup header 拷貝到 struct setup header,之後初con...