Crash 實例

1.spinlock原理

為了解決這個spinlock的不公平問題,linux 2.6.25內核以后,spinlock采用了一種"FIFO ticket-based"算法的spinlock機制,可以很好的實現先來先搶占的思想。具體的做法如下:

(1)、spinlock的核心字段有owner和next,在初始時,owner=next=0
(2)、當第一個進程搶占spinlock時,會在進程函數本地保存下next的值,也就是next=0,并將spinlock的next字段加1;
(3)、當獲取spinlock的進程的本地next和spinlock的owner相等時,該進程就獲取到spinlock;
(4)、由于第一個進程本地的next=0,并且spinlock的owner為0,所以第一個CPU獲取到spinlock;
(5)、接著當第二個進程搶占spinlock,此時spinlock的next值為1,保存到本地,然后將spinlock的next字段加1。而spinlock的owner字段依然為0,第二個進程的本地next 不等于spinlock的owner,所以一直自旋等待spinlock;
(6)、第三個進程搶占spinlock,得到本地next值為2,然后將spinlock的next字段加1。此時spinlock的owner字段還是為0,所以第三個進程自旋等待。
(7)、當第一個進程處理完臨界區以后,就釋放spinlock,執行的操作是將spinlock的owner字段加1;
(8)、由于第二個進程和第三個進程都還在等待spinlock,他們會不停第獲取spinlock的owner字段,并和自己本地的next值進行比較。當第二個進程發現自己的next值和spinlock的owner字段相等時(此時next == owner == 2),第二個進程就獲取到spinlock。第三個進程的本地next值是3,和spinlock的owner字段不相等,所以繼續等待;
(9)、只有在第二個進程釋放了spinlock,就會將spinlock的owner字段加1,第三個進程才有機會獲取spinlock。

crash
whatis因為mm_struct的mmap_sem成員的offset就是104(0x68),
用whatis命令可以查看結構體的聲明,如
whatis -o mm_struct
machcrash> mach | grep SIZE
??????? MEMORY SIZE: 1 GB
????????? PAGE SIZE: 4096
? KERNEL STACK SIZE: 16384
???? IRQ STACK SIZE: 16384
OVERFLOW STACK SIZE: 4096
task -R stackPID: 128????? TASK: ffff0000034f9b80? CPU: 1??? COMMAND: "insmod"
? stack = 0xffff800012b20000,
setset 128 進程128 上下文
bt -sS 0x11給一個錯誤地址,會打印出進程128的實際棧地址
bt -T將內核棧的內容都打印出來
bt -f/-p(-p) 只打印panic的內核棧,-f 列出堆棧中的所有數據
bt -lf(-l)顯示每層棧的源碼和所在的行數
rd打印指針范圍的棧內容 rd ffffff8990 -e fffff9ffff > mm.txt
task <pid>打印進程的task_struct 內容
dis <sym|addr>參數可以使地址、符號(函數名、變量名),對其反匯編得到該地址

對應的匯編源碼
mod -s <module>加載指定安裝模塊的符號調試信息
mod -d xxxmodule刪除指定模塊的符號表和調試信息
例如 insmod modules_list.ko后,dis 模塊中的函數,發現沒有反匯編
出源碼
要先加載符號表 mod -s module_list.ko,后 dis <function>
vm [pid]?進程虛擬地址空間
help -m查看每個cpu的中斷棧
irq_stack_size: 16384
???????? irq_stacks[0]: ffff800010000000
???????? irq_stacks[1]: ffff800010008000
???????? irq_stacks[2]: ffff800012688000
???????? irq_stacks[3]: ffff800012690000
普通的全局變量普通的全局變量的值很好查看,直接p后面接函數名即可? >p jiffies_64
percup全局變量>struct rq.clock,nr_running,cfs.h_nr_running runqueues:0,2,6? 冒號后指定
CPU
局部變量ATPCS規則可知:函數調用時傳遞的參數,當參數數量小于等于8個時,
使用x0~x7傳遞,大于8個時,多余的參數使用棧傳遞;
函數返回時返回值保存在x0中
下面命令對父函數cpu_stopper_thread函數進行反匯編,
其中"/s"參數表示顯示匯編在C文件中的行數
disassemble /s cpu_stopper_thread
哪些線程正在訪問/訪問過
指定的變量/內存/鎖
哪些線程正在訪問/訪問過指定的變量

再介紹最后一個實用技巧,有時候我們在分析dump的時候經常會有這樣的需求:

已經知道某一把鎖在內存中的地址,我們想知道有哪些線程在等這把鎖;

已經知道某個全局變量的地址或名稱,我們想知道有哪些任務正在訪問這個全局變量;

已經知道某個函數名稱,我們想知道有哪些任務的調用棧中會調用到這個函數;

這時候我們就可以使用下面命令格式,來對系統中所有的任務的調用棧進行搜索了,其中-t是對所有的任務進行搜索,不區分任務的狀態。而-T則表示只對系統中正在running的任務的調用棧進行搜索

search -t/T <變量名|變量地址|函數名|函數地址|內存地址>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718208.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718208.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718208.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言-柔性數組成員的使用

文章目錄 摘要柔性數組成員基本使用細節探究 零長度數組-定長數組-變長數組 摘要 本文先介紹柔性數組成員(flexible array member)的基本使用&#xff0c;然后介紹其內存結構。最后&#xff0c;補充了一些數組相關的其他概念。 柔性數組成員 基本使用 參考: 【C語言內功修煉…

[項目設計] 從零實現的高并發內存池(一)

&#x1f308; 博客個人主頁&#xff1a;Chris在Coding &#x1f3a5; 本文所屬專欄&#xff1a;[高并發內存池] ?? 前置學習專欄&#xff1a;[Linux學習] ? 我們仍在旅途 ? 目錄 前言 項目介紹 1.內存池 1.1 什么是內存池 池化技術 內存池 1.2 為什…

word使用bib添加參考文獻

文章目錄 安裝TexLive安裝bibtex4word使用在word中添加參考文獻使用bibtex4word在word中添加參考文獻設置參考文獻格式為畢業論文格式 參考 安裝TexLive 從下載地址下載鏡像iso文件texlive2023.iso雙擊打開iso鏡像文件運行 install-tl-windows.bat點擊安裝非常非常非常耐心地安…

Shell學習 - 2.20 Shell exit命令:退出當前進程

exit 是一個 Shell 內置命令&#xff0c;用來退出當前 Shell 進程&#xff0c;并返回一個退出狀態&#xff1b;使用$?可以接收這個退出狀態&#xff0c;這一點已在《Shell $?》中進行了講解。 exit 命令可以接受一個整數值作為參數&#xff0c;代表退出狀態。如果不指定&…

Linux命令-clock命令(用于調整 RTC 時間)

說明 clock命令用于調整 RTC 時間。 RTC 是電腦內建的硬件時間&#xff0c;執行這項指令可以顯示現在時刻&#xff0c;調整硬件時鐘的時間&#xff0c;將系統時間設成與硬件時鐘之時間一致&#xff0c;或是把系統時間回存到硬件時鐘。 語法 clock [--adjust][--debug][--dir…

客戶端/服務器協議是啥意思?

客戶端/服務器協議是指在網絡通信中&#xff0c;客戶端和服務器之間進行數據傳輸時所使用的規定。簡單來說&#xff0c;客戶端是用戶使用的設備&#xff0c;如電腦或手機&#xff0c;而服務器則是提供數據或服務的遠程計算機。當客戶端需要獲取數據或服務時&#xff0c;它會向服…

【RT-DETR有效改進】結合SOTA思想利用雙主干網絡改進RT-DETR(全網獨家創新,重磅更新)

一、本文介紹 本文給大家帶來的改進機制是結合目前SOTAYOLOv9的思想利用雙主干網絡來改進RT-DETR&#xff08;本專欄目前發布以來改進最大的內容&#xff0c;同時本文內容為我個人一手整理全網獨家首發 | 就連V9官方不支持的模型寬度和深度修改我都均已提供&#xff0c;本文內…

【活動】金三銀四,前端工程師如何把握求職黃金期

隨著春意盎然的氣息彌漫大地&#xff0c;程序員群體中也迎來了一年一度的“金三銀四”求職熱潮。這個時間段對于廣大前端工程師而言&#xff0c;不僅象征著生機勃發的新起點&#xff0c;更是他們職業生涯中至關重要的轉折點。眾多知名公司在這一時期大規模開啟招聘通道&#xf…

ChatGPT 4.0使用之論文閱讀

文章目錄 閱讀環境準備打開AskYourPDF進入主站 粗讀論文直接通過右側邊框進行提問選中文章內容翻譯或概括插圖的理解 總結 擁有了GPT4.0之后&#xff0c;最重要的就是學會如何充分發揮它的強大功能&#xff0c;不然一個月20美元的費用花費的可太心疼了&#xff08;家境貧寒&…

WP外貿營銷型網站模板

WordPress外貿獨立站主題 簡潔實用的WordPress外貿獨立站主題&#xff0c;適合時尚服裝行業搭建wordpress企業官網使用。 零件配件WordPress外貿建站模板 汽車行業零配件WordPress外貿建站模板&#xff0c;賣配件、零件的外貿公司可以使用的WordPress主題。 https://www.jia…

RocketMQ—消費者的兩種消費模式

RocketMQ—消費者的兩種消費模式 RocketMQ消息消費的模式分為兩種&#xff1a;負載均衡模式和廣播模式&#xff0c;負載均衡模式表示多個消費者交替消費同一個主題里面的消息&#xff1b;廣播模式表示每個每個消費者都消費一遍訂閱的主題的消息。 負載均衡模式 CLUSTERING 集…

vue2 element 實現表格點擊詳情,返回時保留查詢參數

先直觀一點&#xff0c;上圖 列表共5條數據&#xff0c;準備輸入Author過濾條件進行查詢 進入查看詳情頁&#xff0c;就隨便搞了個按鈕 啥都沒調啦 點擊返回后 一開始準備用vuex做這個功能&#xff0c;后來放棄了&#xff0c;想到直接用路由去做可能也不錯。有時間再整一套…

一篇文章了解和使用Map和Set(HashMap/TreeMap/HashSet/TreeSet)

[本節目標] *掌握HashMap/TreeMap/HashSet/TreeSet的使用 *掌握了解HashSet和HashSet背后的哈希原理和簡單的實現 1. 搜索樹 1.1 概念 二叉搜索樹又稱二叉排序樹,它或者是一顆空樹,或者是具有以下性質的二叉樹: 1.若它的左子樹不為空&#xff0c;則左子樹上所有節點的值都…

【一起學習Arcade】(2):Geometry函數

第二篇記錄下Geometry函數&#xff0c;相對于其它語言&#xff0c;Arcade對Geometry的支持是一大亮點&#xff0c;這使得它的上限被大大提高了。 三、Geometry函數 1、Angle【角度】 單位為度&#xff08;0-360&#xff09;&#xff0c;正北為90度&#xff0c;只考慮x-y平面。…

07OpenCV 圖像模糊

文章目錄 圖像掩膜操作模糊原理均值濾波高斯濾波中值濾波雙邊濾波算子代碼 圖像掩膜操作 圖像掩膜操作 模糊原理 Smooth/Blur是圖像處理中最簡單和常用的操作之一 使用操作的原因之一就是為了給圖像預處理時候減低噪聲 圖像噪聲是指存在于圖像數據中的不必要的或多余的干擾信…

RK3568開發筆記-qt程序運行報錯Failed to move cursor on screen

目錄 前言 一、qt程序運行報錯 二、異常解決 總結 前言 最近在進行 RK3568 平臺上的 Qt 程序開發時&

使用 Docker 部署 MrDoc 在線文檔管理系統

1&#xff09;MrDoc 介紹 MrDoc 簡介 MrDoc 覓思文檔&#xff1a;https://mrdoc.pro/ MrDoc 使用手冊&#xff1a;https://doc.mrdoc.pro/p/user-guide/ MrDoc 可以創建各類私有化部署的文檔應用。你可以使用它進行知識管理、構建團隊文庫、制作產品手冊以及在線教程等。 Mr…

在Java中如何使用Lambda表達式進行函數式編程

在Java中如何使用Lambda表達式進行函數式編程 在Java中&#xff0c;使用Lambda表達式進行函數式編程主要涉及以下幾個步驟&#xff1a; 理解函數式接口&#xff1a; 函數式接口是一個只有一個抽象方法的接口。Java 8引入了FunctionalInterface注解&#xff0c;用于標記這樣的接…

linux安全--DNS欺騙,釣魚網站搭建

目錄 一&#xff0c;實驗準備 首先讓client能上網 1&#xff09;實現全網互通&#xff0c;實現全網互通過程請看 2&#xff09;SNAT源地址轉換 3&#xff09;部署DHCP服務 4)配置DHCP服務 5&#xff09;啟動服務 6&#xff09;安裝DNS服務 7&#xff09;DNS配置 8)啟動DNS…

【Python筆記-設計模式】策略模式

一、說明 策略模式是一種行為設計模式&#xff0c;它定義了一系列算法&#xff0c;將每個算法封裝起來&#xff0c;并使它們可以互相替換。 (一) 解決問題 在需要根據不同情況選擇不同算法或策略&#xff0c;規避不斷開發新需求后&#xff0c;代碼變得非常臃腫難以維護管理。…