동기화
Posts
45 postsResilio Sync로 모바일과 PC데이터 백업/동기화
제 경우 오래전부터 Resilio Sync라는 프로그램으로 백업이 필요한 중요 자료를 관리했습니다. 이 프로그램은 특정 폴더를 지정하면 이 폴더의 내용을 그대로 다른 PC에 자동으로 백업합니다. 제경우 집에 노트북과 데탑, 2대가 있고 회사에도 업부 보조용으로 가져다 둔 개인노트북이 있으니 이러면 3대에 동일 내용이 복사됩니다. 중요한건 이런 작업이 자동으로 이뤄진다는 부분입니다. 항상 프로그램이 떠 있으면서 지정한 폴더에 변경이 생기면 자료를 동기화 합니다. 이러니 회사에서 사진을 리사이즈 하고 퇴근해 집에서 보면 회사에서 했던 리사이즈가 반영되 집에 들어와 있습니다. 이것이 의외로 중요합니다. 항상 수동으로 백업 작업을 하면 어딘가 누락되거나 양쪽에서 편집을 서로 해대서 어느것을 우선할지
[리눅스커널] 스핀락 플러그인 함수: spin_lock_irq()/spin_unlock_irq()
리눅스 커널 코드를 조금만 분석하면 spin_lock() 함수뿐만 아니라 spin_lock_irq() 함수를 써서 임계 영역을 보호하는 코드를 많이 볼 수 있습니다. 이렇게 커널은 스핀락 기능을 확장한 플러그인 형태 스핀락 함수들을 제공합니다. 이번 소절에서는 spin_lock() 함수 기능을 확장한 스핀락 플러그인 함수를 소개합니다. spin_lock_irq()/spin_unlock_irq() 먼저 spin_lock_irq()/spin_unlock_irq() 함수를 리눅스 커널에서 지원하는 이유를 알아보고 세부 코드를 분석하겠습니다. spin_lock_irq()/spin_unlock_irq() 함수가 생겨난 이유는 무엇일까? spin_lock_irq()/spin_unlock_irq() 함수 코드
[라즈베리파이] 동기화 - 스핀락(spinlock) 소개
리눅스 커널에서 가장 많이 쓰는 동기화 기법 중 하나가 스핀락입니다. 먼저 스핀락의 특징을 알아봅시다. 1. 뮤텍스락 비해 구현 복잡도가 낮습니다.2. spin_lock_irq(), spin_lock_irq_save() 등등 추가 기능이 포함된 함수를 제공합니다.3. 스핀락 구현부는 아키텍처에 의존적입니다. ARM, ARM64 그리고 x86 CPU에 따라 구현부가 다릅니다. 스핀락 동작을 제대로 이해하기 위해선 어셈블리 코드를 분석해야 합니다. 임계 영역에 특정 프로세스에 접근하기 위해서 임계 영역 코드 구간에 스핀락을 걸어 다른 프로세스 접근을 막아야 합니다. 이를 위해 다음과 같은 함수를 호출해야 합니다.static DEFINE_SPINLOCK(static_spinlock);void kernel_fu
[라즈베리파이] 동기화 - 커널 동기화 기법 소개
이전 시간에 Race가 발생하는 3가지 대표적인 상황을 확인했습니다. 이어서 이번에 커널 동기화 기법을 소개하고 그 특징을 알아봅니다. 이전에 소개했던 그림을 다시 보겠습니다. 임계 영역에 A와 B 프로세스가 접근하는 상황입니다. 두 커널 동기화 기법인 스핀락과 뮤텍스의 차이점을 비교하면서 동기화 기법에 대해 살펴보겠습니다. 스핀락과 뮤텍스의 가장 큰 차이점은 위 그림 [6] 번호 밑 박스에 표시돼 있습니다. 이미 락(Lock)을 다른 프로세스가 획득하고 있을 때 기다리는 방법입니다. 스핀락은 다른 일(스케줄링)을 안 하고 화장실 밖에서 계속 기다립니다. 이를 Busy-Wait라고 설명합니다. 뮤텍스는 자신을 대기열에 등록하고 자신을 UNINTERRUPTIBLE 상태로 바꾼 다음 휴면에



