리눅스
Posts
554 posts[라즈베리파이] 동기화 - 커널 동기화 기법 소개
이전 시간에 Race가 발생하는 3가지 대표적인 상황을 확인했습니다. 이어서 이번에 커널 동기화 기법을 소개하고 그 특징을 알아봅니다. 이전에 소개했던 그림을 다시 보겠습니다. 임계 영역에 A와 B 프로세스가 접근하는 상황입니다. 두 커널 동기화 기법인 스핀락과 뮤텍스의 차이점을 비교하면서 동기화 기법에 대해 살펴보겠습니다. 스핀락과 뮤텍스의 가장 큰 차이점은 위 그림 [6] 번호 밑 박스에 표시돼 있습니다. 이미 락(Lock)을 다른 프로세스가 획득하고 있을 때 기다리는 방법입니다. 스핀락은 다른 일(스케줄링)을 안 하고 화장실 밖에서 계속 기다립니다. 이를 Busy-Wait라고 설명합니다. 뮤텍스는 자신을 대기열에 등록하고 자신을 UNINTERRUPTIBLE 상태로 바꾼 다음 휴면에
xclip - 리눅스 터미널창에서 클립보드(clipboard) 입출력
xclip을 사용하면 리눅스 터미널창에서 파일의 내용 또는 문자열 등을 파이프(|)를 이용한 I/O 리다이렉션(redirection)을 통해 클립보드에 저장할 수 있다. 또한 클립보드에 저장된 내용을 출력할 수도 있다. 즉, 마우스를 사용하지 않고 명령어 기반으로 클립보드 입출력을 다룰 수 있게 해 준다. 우선 xclip 패키지를 설치한다. 데비안/우분투 계열 기준으로 터미널창에서 아래와 같이 작업. # S/W 저장소 갱신 sudo apt-get update # xclip 패키지 설치 sudo apt-get install xclip 사용 예시를 보기 전에 간단하게 X-윈도우의 "X selection"에 대해 알아보자. X selection은 세가지 종류가 있는데, PRIMARY, S
[라즈베리파이] 동기화 - 인터럽트 발생으로 레이스 컨디션 발생
이번에는 인터럽트 발생으로 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()
다음으로 살펴볼 코드는 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

