SpinLock2 [kernel/locking] spinlock (2) - Test And Set, Ticket, ABQL, MCS [kernel/locking] - spinlock(1) 앞선 글에서, 아키텍처에 종속적인 부분을 제외하고 spinlock을 어떻게 사용하는지 이야기해보았다. 실제 아키텍처별로 구현된 spinlock 구현체를 보려면 일단 spinlock에 대한 개념들이 더 필요하므로 개념을 짚고 넘어가겠다. Test And Set (TAS) spinlock의 기본적인 구현은 lock을 획득할 수 있을 때까지 loop를 도는 Test And Set lock이라고 할 수 있다 // Test and Set lock pseudocode while (test_and_set(lock) == FAILED) { // spin } // 위의 while문이 끝나면 lock을 획득했다는 것이 보장된다. 여기서 test_and_set이란, 현.. 2021. 3. 28. [kernel/locking] spinlock (1) - spinlock 사용법 앞선 글에서 lock이란 무엇이고, lock의 필요성에 대해서 알아보았다. 이번 글에서는 가장 기본적인 spinlock을 리눅스 커널에서 어떻게 구현했는지 알아볼 것이다. 우선 관련된 개념을 몇 가지 살펴보자. 참고로, 이 문서에서 다루는 spinlock은 커널에서 사용하는 spinlock에 대해 다루고 있다. userspace에서의 spinlock은 pthread spinlock을 사용해야 한다. 자료구조 spinlock은 include/linux/spinlock_types.h에 spinlock_t로 정의되어있다. 한 번 살펴보자. /* include/linux/spinlock_types.h */ typedef struct spinlock { union { struct raw_spinlock rlock.. 2021. 3. 27. 이전 1 다음