본문 바로가기

Kernel64

[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.
락 (lock)이란 무엇인가 Lock 락은 여러 스레드 간에 자원을 접근하는 매커니즘을 제공한다. 일반적으로 상호 배제 정책을 통해, 하나의 스레드가 특정 자원에 접근중인 경우에는 다른 스레드가 접근하지 못하도록 제한한다. 락이 없다면 두 개 이상의 스레드가 동시에 자원에 접근할 수 있으므로, 데이터의 무결성이 보장되지 않는다. 락의 개념은 멀티스레드를 사용하는 환경이라면 어디든 사용될 수 있다. ex)데이터베이스 락이 필요한 예시 - 여러 스레드가 동시에 공유 자원에 접근하는 경우 이해를 돕기 위해 간단한 예시를 들어보자. 스레드 A, B가 다음의 작업을 동시에 수행한다고 해보자. A, B는 변수 x를 공유한다. 스레드 A: x를 1 증가시킨다 스레드 B: x를 1 증가시킨다 그런데 'x를 1 증가시킨다'라는 작업은 기계어 상으로.. 2021. 3. 16.
리눅스 커널에 커밋 해보자 리눅스 커널에 커밋해보자! 리눅스 커널에 커밋한다는 건 정말 멋진 일이다. 하지만 나는 아직 쪼렙이기 때문에 커널의 중요한 파트에 기여할 수는 없다. 하지만 리눅스 커널에 커밋하기 위해서 항상 엄청난 일을 해야하는 건 아니다. 대신 나는 아주 작고 귀여운, 코딩 스타일 고치기를 해보기로 했다. 코딩 스타일을 점검해주는 checkpatch.pl 스크립트의 warning을 고쳐보자. 우선 git 저장소를 클론한다. git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git drivers/staging 폴더에는 TODO 파일이 있는데, 코딩 스타일을 고쳐야 할 경우에는 "fix checkpatch.pll warning"이라고 보통 쓰여.. 2021. 3. 14.
리눅스 커널 입문에 도움이 될만한 것들 리눅스 커널 1도 모르는 학생이 쓴 거라 도움이 안 될 수도 있습니다 어렸을 때부터 리눅스 커널을 공부하는 데에 로망이 있었는데, 당시에 중딩이던 나는 엄청난 진입 장벽에 좌절하고 이론 책만 조금 공부했던 기억이 있다. (그리고 이것도 제대로 이해 못했다 ㅋㅋㅋ) 그래도 한 5년 동안 머리가 자랐으니, 다시 도전해보고 싶어서 며칠 전부터 구글링을 엄청나게 했다. 아, 물론 리눅스 커널의 대략적인 작동 방식, 자료구조를 정리한 책은 많다. 그런데 그것도 중요하지만 직접 소스코드를 분석해보고 싶었다. 물론 5년 전이나 지금이나 진입 장벽은 높은 것 같다 아무튼 간에, 내가 느낀 리눅스 커널 입문의 어려운 점은 : 1. 우선 어디서부터 시작해야 할지 모른다. 내가 "프로세스 관리"에 관심이 있어서 소스를 찾아.. 2020. 1. 2.