LINUX

포스트: 477|조회수: 0|TERM
Items

Posts

477 posts

[라즈베리파이] 동기화 - 스핀락(spinlock) 소개

Guillermo Austin Kim|2018년 12월 21일

리눅스 커널에서 가장 많이 쓰는 동기화 기법 중 하나가 스핀락입니다. 먼저 스핀락의 특징을 알아봅시다. 1. 뮤텍스락 비해 구현 복잡도가 낮습니다.2. spin_lock_irq(), spin_lock_irq_save() 등등 추가 기능이 포함된 함수를 제공합니다.3. 스핀락 구현부는 아키텍처에 의존적입니다. ARM, ARM64 그리고 x86 CPU에 따라 구현부가 다릅니다. 스핀락 동작을 제대로 이해하기 위해선 어셈블리 코드를 분석해야 합니다. 임계 영역에 특정 프로세스에 접근하기 위해서 임계 영역 코드 구간에 스핀락을 걸어 다른 프로세스 접근을 막아야 합니다. 이를 위해 다음과 같은 함수를 호출해야 합니다.static DEFINE_SPINLOCK(static_spinlock);void kernel_fu

xclip - 리눅스 터미널창에서 클립보드(clipboard) 입출력

반달가면|2018년 12월 18일

xclip을 사용하면 리눅스 터미널창에서 파일의 내용 또는 문자열 등을 파이프(|)를 이용한 I/O 리다이렉션(redirection)을 통해 클립보드에 저장할 수 있다. 또한 클립보드에 저장된 내용을 출력할 수도 있다. 즉, 마우스를 사용하지 않고 명령어 기반으로 클립보드 입출력을 다룰 수 있게 해 준다. 우선 xclip 패키지를 설치한다. 데비안/우분투 계열 기준으로 터미널창에서 아래와 같이 작업. # S/W 저장소 갱신 sudo apt-get update # xclip 패키지 설치 sudo apt-get install xclip 사용 예시를 보기 전에 간단하게 X-윈도우의 "X selection"에 대해 알아보자. X selection은 세가지 종류가 있는데, PRIMARY, S

[라즈베리파이] 동기화 - 인터럽트 발생으로 레이스 컨디션 발생

Guillermo Austin Kim|2018년 12월 16일

이번에는 인터럽트 발생으로 Race가 발생하는 경우를 알아보겠습니다. 그동안 어떤 함수도 인터럽트가 발생하면 실행을 멈추고 인터럽트 벡터로 프로그램 카운터를 이동하고 인터럽트 핸들러와 서브 루틴을 실행합니다. 그런데 인터럽트 발생하기 전에 실행을 멈춘 함수가 인터럽트가 발생해서 다시 실행할 수 있습니다. 이를 확인하기 위해 다음 패치 코드를 입력합시다.diff --git a/mm/slub.c b/mm/slub.c--- a/mm/slub.c+++ b/mm/slub.c@@ -3740,10 +3740,42 @@ static int __init setup_slub_min_objects(char *str) __setup("slub_min_objects=", setup_slub_min_objects); 1 +ex

[라즈베리파이] 시그널 - 커널 공간 시그널 함수 분석 - do_sigaction()

Guillermo Austin Kim|2018년 12월 12일

다음으로 살펴볼 코드는 do_sigaction() 함수입니다. 먼저 do_sigaction() 함수는 선언부를 봅시다.int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact); do_sigaction() 함수에 전달하는 인자 속성은 다음과 같은데 sys_rt_sigaction() 함수에 전달된 인자 유형과 같습니다.int sig: 설정한 시그널 번호struct k_sigaction *act: 새롭게 설정하는 시그널 속성struct k_sigaction *oact: 이전에 설정했던 시그널 속성 do_sigaction() 함수 인자를 알아봤으니 코드를 분석할 차례입니다.1 int do_sigaction(int sig, struc