亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
123下一頁
最近訪問板塊 發(fā)新帖
查看: 13758 | 回復(fù): 23
打印 上一主題 下一主題

[內(nèi)核同步] 用戶態(tài)自旋鎖和內(nèi)核態(tài)自旋鎖的區(qū)別? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2015-01-30 16:18 |只看該作者 |倒序?yàn)g覽
如題,小弟內(nèi)核菜鳥,最近研究自旋鎖,發(fā)現(xiàn)用戶態(tài)也有自旋鎖實(shí)現(xiàn)(如pthread),不知道用戶態(tài)下的自旋鎖和內(nèi)核態(tài)的區(qū)別是什么?
或者說用戶態(tài)下的自旋鎖實(shí)現(xiàn)原理是什么?還望大神賜教。

論壇徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16賽季CBA聯(lián)賽之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金雞報(bào)曉
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年紀(jì)念徽章
日期:2016-11-09 13:19:1015-16賽季CBA聯(lián)賽之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-12-03 06:20:002015七夕節(jié)徽章
日期:2015-08-21 11:06:17IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-09 06:20:002015亞冠之吉達(dá)阿赫利
日期:2015-07-03 08:39:42
2 [報(bào)告]
發(fā)表于 2015-01-30 17:07 |只看該作者
不負(fù)責(zé)任的回答,用戶的鎖最后也用的內(nèi)核里面的。

論壇徽章:
9
辰龍
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辭舊歲徽章
日期:2015-03-03 16:54:1515-16賽季CBA聯(lián)賽之青島
日期:2016-03-13 23:37:1915-16賽季CBA聯(lián)賽之深圳
日期:2016-03-29 18:52:38
3 [報(bào)告]
發(fā)表于 2015-01-31 08:22 |只看該作者
回復(fù) 1# DVD0423

我有點(diǎn)不同意amarant的解析,有點(diǎn)以偏概全。

其實(shí)這個(gè)問題的核心就是什么才叫spinlock?只要符合拿不到鎖時(shí)自旋等待而是不去睡眠這個(gè)條件,就符合自旋鎖的定義,它的實(shí)現(xiàn)就是一個(gè)自旋鎖的!不管在那實(shí)現(xiàn),不管最終的實(shí)現(xiàn)會(huì)有什么其它的效果。
跟拿到鎖以后是否還會(huì)被調(diào)度走沒有關(guān)系,其實(shí)內(nèi)核的spinlock實(shí)現(xiàn)在打開內(nèi)核搶占時(shí),拿不到鎖,也會(huì)被調(diào)度出去。

http://www.unix.com/man-page/freebsd/3/pthread_spin_lock/
The pthread_spin_lock() function will acquire lock if it is not currently owned by another
     thread.  If the lock cannot be acquired immediately, it will spin attempting to acquire the
     lock (it will not sleep) until it becomes available.



   

論壇徽章:
2
寅虎
日期:2014-11-25 21:47:342015小元宵徽章
日期:2015-03-06 15:58:18
4 [報(bào)告]
發(fā)表于 2015-01-31 08:37 |只看該作者
回復(fù) 3# Tinnal

有個(gè)疑問請(qǐng)教下:
內(nèi)核的spinlock實(shí)現(xiàn)在打開內(nèi)核搶占時(shí),拿不到鎖,也會(huì)被調(diào)度出去。
疑問:內(nèi)核開搶占時(shí),拿不到鎖就被調(diào)度,就違背自旋的本意了吧?
   

論壇徽章:
9
辰龍
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辭舊歲徽章
日期:2015-03-03 16:54:1515-16賽季CBA聯(lián)賽之青島
日期:2016-03-13 23:37:1915-16賽季CBA聯(lián)賽之深圳
日期:2016-03-29 18:52:38
5 [報(bào)告]
發(fā)表于 2015-01-31 08:41 |只看該作者
本帖最后由 Tinnal 于 2015-01-31 08:42 編輯

回復(fù) 4# 鎮(zhèn)水鐵牛


    沒有違背呀。1. 從代碼來說,它還在自我的循環(huán)里;2.它的狀態(tài)還是running的狀態(tài),沒有去睡眠等待。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2015-01-31 10:25 |只看該作者
回復(fù) 3# Tinnal

下面是linux-2.6.10的代碼:
  1. #define spin_lock(lock)                _spin_lock(lock)

  2. void __lockfunc _spin_lock(spinlock_t *lock)
  3. {
  4.         [color=Red]preempt_disable();
  5. [/color]        if (unlikely(!_raw_spin_trylock(lock)))
  6.                 __preempt_spin_lock(lock);
  7. }

  8. static inline void __preempt_spin_lock(spinlock_t *lock)
  9. {
  10.         if (preempt_count() > 1) {
  11.                 _raw_spin_lock(lock);
  12.                 return;
  13.         }

  14.         do {
  15.                 [color=Red]preempt_enable();
  16. [/color]                while (spin_is_locked(lock))
  17.                         cpu_relax();
  18.                 [color=Red]preempt_disable();
  19. [/color]        } while (!_raw_spin_trylock(lock));
  20. }
復(fù)制代碼
=============================================================
下面是linux-3.10.0的代碼:
  1. static inline void spin_lock(spinlock_t *lock)
  2. {
  3.         raw_spin_lock(&lock->rlock);
  4. }

  5. #define raw_spin_lock(lock)        _raw_spin_lock(lock)


  6. void __lockfunc _raw_spin_lock(raw_spinlock_t *lock)
  7. {
  8.         __raw_spin_lock(lock);
  9. }


  10. static inline void __raw_spin_lock(raw_spinlock_t *lock)
  11. {
  12.         [color=Red]preempt_disable();   
  13. [/color]        spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
  14.         LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock);
  15. }


  16. static inline void do_raw_spin_lock(raw_spinlock_t *lock) __acquires(lock)
  17. {
  18.         __acquire(lock);
  19.         arch_spin_lock(&lock->raw_lock);
  20. }

  21. static __always_inline void arch_spin_lock(arch_spinlock_t *lock)
  22. {
  23.         register struct __raw_tickets inc = { .tail = TICKET_LOCK_INC };

  24.         inc = xadd(&lock->tickets, inc);
  25.         if (likely(inc.head == inc.tail))
  26.                 goto out;

  27.         inc.tail &= ~TICKET_SLOWPATH_FLAG;
  28.         for (;;) {
  29.                 unsigned count = SPIN_THRESHOLD;

  30.                 do {
  31.                         if (ACCESS_ONCE(lock->tickets.head) == inc.tail)
  32.                                 goto out;
  33.                         cpu_relax();
  34.                 } while (--count);
  35.                 __ticket_lock_spinning(lock, inc.tail);
  36.         }
  37. out:        barrier();        /* make sure nothing creeps before the lock is taken */
  38. }
復(fù)制代碼
新版本取消了自旋等待過程中的搶占使能。
   

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2015-02-02 09:00 |只看該作者
我知道你的意思,可能我沒表述清楚,我想說的是他們的底層是不是一樣的,比如X86架構(gòu),他們的實(shí)現(xiàn)是不是用的相同的指令。因?yàn)槲易罱龅膶?shí)驗(yàn)是檢測(cè)自旋鎖時(shí)間,這樣就出現(xiàn)一個(gè)問題,到底是只檢測(cè)內(nèi)核中的還是也要檢測(cè)用戶層下的?回復(fù) 3# Tinnal


   

論壇徽章:
9
辰龍
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辭舊歲徽章
日期:2015-03-03 16:54:1515-16賽季CBA聯(lián)賽之青島
日期:2016-03-13 23:37:1915-16賽季CBA聯(lián)賽之深圳
日期:2016-03-29 18:52:38
8 [報(bào)告]
發(fā)表于 2015-02-02 13:53 |只看該作者
回復(fù) 7# DVD0423


    代碼肯定是不一樣的呀,而且用戶態(tài)和內(nèi)核態(tài)沒有可比性。

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2015-02-02 18:48 |只看該作者
回復(fù) 8# Tinnal 我的關(guān)鍵問題就是想知道這兩個(gè)不一樣的地方。比如一個(gè)帶有自旋鎖的程序到底在指令層是不是調(diào)用了內(nèi)核的自旋鎖?這涉及到我的自旋鎖檢測(cè)的實(shí)驗(yàn)是不是只需要檢測(cè)內(nèi)核層,請(qǐng)問您了解嗎?求指導(dǎo)。


   

論壇徽章:
9
辰龍
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辭舊歲徽章
日期:2015-03-03 16:54:1515-16賽季CBA聯(lián)賽之青島
日期:2016-03-13 23:37:1915-16賽季CBA聯(lián)賽之深圳
日期:2016-03-29 18:52:38
10 [報(bào)告]
發(fā)表于 2015-02-03 00:46 |只看該作者
pthread_spin_lock應(yīng)該是沒有調(diào)用內(nèi)核的Spinlock實(shí)現(xiàn)的。內(nèi)核的spinlock不是一個(gè)系統(tǒng)調(diào)用。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP