리눅스
Posts
554 posts그나마 이상적인 핸드헬드PC, 제미니 PDA (Gemini PDA)
오랫동안 제 관심을 잡아 끄는 기기가 하나 있습니다. 바로 제미니 PDA입니다. 예전 핸드헬드PC(HPC) 사이언를 모델로 나온 기기로, 5.99인치 화면에 미디어텍 헬리오 X27 프로세서, 4GB 메모리, 64GB 저장공간을 가지고 있는 제품입니다. 해상도는 2880x1440의 QHD+ 규격. 멀티 터치 지원. 당연히 클랩쉘 스타일이고 멤브레인 ... 키보드(공식 홈피에선 기계식이라는데, 또 다른 곳에선 멤브레인이라 그래서 확인이 필요합니다.)를 장착하고 있습니다. LTE(주파수 한국 대응)와 와이파이 전용으로 나뉘고, 리눅스와 안드로이드 듀얼 부팅(공식 홈피), 안드로이드 전용 버전(일본 판매용)이 있습니다. 무게는 310g. USB-C 포트로 충전 및 외장 기기 연결이 가능합니다(2개 탑
[라즈베리파이] 동기화 - 스핀락(spinlock): spin_unlock() 함수 분석
이번에는 스핀락을 해제하는 spin_unlock() 함수 코드를 살펴보겠습니다. spin_unlock() 함수도 spin_lock() 함수와 마찬가지로 여러 함수로 치환돼 do_raw_spin_unlock() 함수를 호출합니다.[https://elixir.bootlin.com/linux/v4.14.43/source/include/linux/spinlock.h]static __always_inline void spin_unlock(spinlock_t *lock){raw_spin_unlock(&lock->rlock);} void __lockfunc _raw_spin_unlock(raw_spinlock_t *lock){__raw_spin_unlock(lock);} static inline v
[라즈베리파이] 동기화 - 스핀락(spinlock): spin_lock() 함수 분석
스핀락을 획득할 때 쓰는 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() 함수와 마찬가지로
[라즈베리파이] 동기화 - 스핀락(spinlock) 소개
리눅스 커널에서 가장 많이 쓰는 동기화 기법 중 하나가 스핀락입니다. 먼저 스핀락의 특징을 알아봅시다. 1. 뮤텍스락 비해 구현 복잡도가 낮습니다.2. spin_lock_irq(), spin_lock_irq_save() 등등 추가 기능이 포함된 함수를 제공합니다.3. 스핀락 구현부는 아키텍처에 의존적입니다. ARM, ARM64 그리고 x86 CPU에 따라 구현부가 다릅니다. 스핀락 동작을 제대로 이해하기 위해선 어셈블리 코드를 분석해야 합니다. 임계 영역에 특정 프로세스에 접근하기 위해서 임계 영역 코드 구간에 스핀락을 걸어 다른 프로세스 접근을 막아야 합니다. 이를 위해 다음과 같은 함수를 호출해야 합니다.static DEFINE_SPINLOCK(static_spinlock);void kernel_fu

