[라즈베리파이] 동기화 - 스핀락(spinlock): spin_lock() 함수 분석
By Guillermo Austin Kim | 2018년 12월 23일 |
스핀락을 획득할 때 쓰는 spin_lock()와 함수의 선언부를 봅시다.static __always_inline void spin_lock(spinlock_t *lock); 입력 인자는 포인터 타입 lock 변수이며 spinlock_t 구조체입니다. lock이란 변수가 가르키는 메모리 공간에 스핀락 인스턴스가 있는 겁니다. 함수 선언부가 void이니 반환 값은 없습니다. __always_inline 매크로로 선언했으니 커널 함수 내에서 자주 호출되는 함수임을 알 수 있습니다. 다음은 스핀락을 해제할 때 쓰는 spin_unlock()와 함수의 선언부를 봅시다.static __always_inline void spin_unlock(spinlock_t *lock); spin_lock() 함수와 마찬가지로
[리눅스커널] 워크큐(workqueue): Trace32로 워크큐 자료 구조 디버깅하기
By Guillermo Austin Kim | 2019년 2월 21일 |
이번 시간에는 임베디드 디버깅 프로그램인 Trace32를 써서 워크큐 자료구조를 점검합니다. 리눅스 커널 시스템에서 커널 크래시가 나면 생성되는 vmcore를 올려 확인한 내용입니다. 참고로, vmcore는 라즈베리파이가 아니라 다른 ARM64비트 아키텍처를 적용한 시스템에서 받았습니다. 먼저 시스템 워크큐 전역 변수를 확인합니다.var.view %type %string system_wq1 (static struct workqueue_struct *) system_wq = 0xFFFFFFC632C15080 -> (2 (struct list_head) pwqs = ((struct list_head *) next = 0xFFFFFFC63A3B2870 3 (struct list_head)
[라즈베리파이] 시스템 콜 소개
By Guillermo Austin Kim | 2018년 11월 5일 |
리눅스에서는 실행 공간을 메모리 접근과 실행 권한에 따라 유저 공간과 커널 공간으로 분류합니다. 먼저 커널 공간이 무엇인지 알아봅시다. 커널 코드가 실행할 때는 모든 커널 함수 호출이 가능하며 제약 없이 메모리 공간에 접근해서 하드웨어를 제어할 수 있습니다. 이런 시스템 상태와 메모리 접근을 커널 공간이라고 부릅니다. 다음은 유저 공간을 소개하겠습니다. 유저 어플리케이션 코드가 구동하는 동작과 상태를 유저 공간이라고 합니다. 유저 어플리케이션은 유저 공간에서 실행하며 메모리 공간 접근에 제한이 있고 하드웨어에 직접 접근할 수 없습니다. 유저 어플리케이션에서 권한이 없는 메모리 공간에 접근하면 커널은 오류를 감지해서 해당 프로세스를 종료시킵니다. 시스템 콜은 누가 언제 실행할까요?시스템
리눅스 데스크톱으로의 여정에서 느껴지는 딜레마 몇가지
By 파란오이의 Beautiful Life | 2022년 8월 3일 |
최근 음... 몇 가지 이유로 노트북 한 대만 남기고는 모두 최신 리눅스 배포판으로 옮겨가고자 하는 시도를 해 본 적이 있습니다. 지난 블로그 포스팅을 보니 대략 한 달이 조금 넘었군요. 이런 시도를 해 봤던 마지막 시기가 근 10여년 전이니, 시대가 많이 바뀌긴 했습니다. 그리고 예전에 예상했던 문제들은 거의 다 해결된 모습이지만, 미처 예상치 못했던 문제 몇 가지가 발목을 잡아 딜레마를 만들고 있었습니다. 1. 이제 음... 메이저급 리눅스 배포판에서 대부분의 작업은 무리없이 잘 될 겁니다. 이건 오픈소스 생태계가 발전된 것도 있고, 구글과 크로미엄을 필두로 웹 생태계가 크게 확장된 것도 있습니다. 심지어 예전에는 참 삐걱대던 Wine 조차 이제는 오피스나 카카오톡 같은 앱들을 큰 무리 없이 돌려