日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux kernel的问与答

發布時間:2025/3/21 linux 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux kernel的问与答 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • 一、內存
        • 1、kmalloc、valloc、kzalloc、devm_kmalloc的區別
      • 二、同步機制
        • 1、spinlock
        • 2、信號量semaphore

一、內存

1、kmalloc、valloc、kzalloc、devm_kmalloc的區別

  • kmalloc和valloc的區別:

kmalloc是在線性映射區分配內存,它的物理地址是連續的; vmalloc是在高端內存區(非線性區/valloc區)分配內存,它的虛擬地址是連續的、物理地址非連續;
kmalloc在分配內存的時候,通過傳入GFP_ATOMIC可以進行原子操作;

  • kmalloc kzalloc的區別

kzalloc申請內存后,并將這段內存清0

  • kmalloc devm_kmalloc的區別

kmalloc申請的內存,在不使用時需要主動free釋放
devm_kmalloc申請的內存,在不使用時無需主動free釋放.

二、同步機制

1、spinlock

(1)、請問自旋鎖spinlock中都干了哪些事?
在spin_lock中,先關閉搶占preempt_disable、再加入排隊序列(有ower和next兩個變量,排隊就是next++)、再進入低功耗模式等到wfe
在spin_unlock中,先讓cpu退出低功耗模式(armv7使用sev指令,armv8使用staddlh指令),更新排隊序列(onwer++),在打開搶占preempt_enable

(2)、spin_lock中,為何要關閉搶占preempt_disable ?
如果不關閉搶占,單核的情況下, 進程A獲取spinlock后,在臨界區干活,發生了搶占,進程B嘗試獲取spinlock,進程B拿不到,就會自旋等待那里.
等到B的時間片耗完,再次調度到進程A,且A釋放了該鎖,然后再調用B,B才能拿到該鎖.
在B自旋的時候,造成cpu資源很大的浪費; 因為那個時候:A拿著鎖,A并沒有在執行,CPU在B上自旋等待

(3)、cpu0調用的A進程,剛獲取lock->next值后,正準備給該變量+1計數、此時cpu1調用的B進程,也獲取了lock->next值; 這樣A和B進程都能拿到該鎖? 請問linux是怎樣解決這個問題的?

在ARMV8上使用了exclusive機制,是一種獨占訪問的狀態,在A進程操作lock->next值時,在讀取時,使用了ldaxr指令,將global monitor狀態從open切換成exclusive狀態, 然后寫入數據到變量時使用stxr指令,將global monitor狀態從exclusive切換成open狀態。
在global monitor狀態未exclusive時,B是再去使用ldaxr指令讀取數據時,會返回錯誤,然后B會再繼續讀取該數據。

而在ARMv7上,雖然沒有exclusive機制,但是提供了類似的指令,ldrex和strex;

2、信號量semaphore

(1)、在信號量semaphore的down()中,都干了哪些事情?
檢查count值,大于0則獲得該鎖,進入臨界區;
否則的話,未獲得該鎖,先將task加入到wait_list,再調用schedule_timeout進入睡眠

(2)、信號量的實現為何要依賴spinlock ?
在信號量的實現中,要對count值進行加加或減減操作,使用spinlock防止該變量產生競爭;

總結

以上是生活随笔為你收集整理的linux kernel的问与答的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。