[라즈베리파이] 시그널 - 커널 공간에서 시그널 설정은 어떻게 할까?
By Guillermo Austin Kim | 2018년 12월 5일 |
이전 시간에서 유저 프로세스에서 시그널을 설정하는 코드를 살펴봤습니다. 이번 시간에는 커널에서는 시그널을 설정하면 어떤 동작을 하는지 살펴보겠습니다. 유저 프로세스가 시그널 설정을 위해 리눅스 표준 함수를 쓰면 시스템 콜을 발생해서 해당 시스템 콜 핸들러를 실행합니다. sigaddset()와 같이 시그널 자료구조만 변경하는 함수는 시스템 콜을 발생하지 않고 커널에 시그널 설정을 요청하는 sigaction() 함수나 시그널을 기다리는 pause() 와 같은 함수를 호출할 때 시스템 콜을 발생합니다.
[라즈베리파이] 커널 섹션 정보
By Guillermo Austin Kim | 2018년 2월 5일 |
아래 명령어로 라즈베리파이 소스 다운로드를 하고,git clone --depth=1 크로스 컴파일러 툴을 설치한 다음에,git clone 커널 빌드를 하면 vmlinux을 추출할 수 있습니다.make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfigmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j12 아래 명령어로 라즈베리파이 섹션 정보를 파악할 수 있는데요. 조금 더 짚어 보겠습니다../objdump -x vmlinux | more 섹션이란 용어에 대해서 설명을 하겠습니다. 섹션은 임베디드 소스 빌드 시 쓰이는 개념인데, 비슷한 속성의 코드들을 묶어서 처리하
리눅스 bash 스크립트에서 연관 배열의 인덱스(index)/키(key) 출력하기
By 반달가면 | 2018년 10월 1일 |
우선 리눅스 bash 스크립트에서 연관 배열(associative array) 사용에 대한 기본적인 내용도 이전 게시물을 참고하자. 여기로 배열을 정의해서 사용할 때 배열의 인덱스(index) 또는 키(key)를 확인해야 할 경우가 있다. 일반적인 배열은 인덱스를 수자로 사용하므로 굳이 인덱스를 별도로 확인할 일이 별로 없겠지만, 문자열을 인덱스/키로 사용하는 연관 배열의 경우에는 좀 다를 수 있다. 아래의 예시를 보자. # 변수 arr_x를 연관 배열로 선언 declare -A arr_x # 값 할당 arr_x[abc]=10 arr_x[def]=5 arr_x[xyz]=0 # 인덱스 abc에 저장된 내용 출력 echo "${arr_x[abc]}" 10 배열의 인덱스
[리눅스커널] 워크큐: 워크큐 주요 개념 알아보기
By Guillermo Austin Kim | 2019년 7월 1일 |
이번 소절에서는 워크큐를 이루는 주요 개념을 소개합니다. - 워크 - 워커스레드 - 워커풀 - 풀워크큐 먼저 워크큐의 기본 실행 단위인 워크를 배워볼까요? 워크란워크는 워크큐를 실행하는 단위입니다. 워크는 누가 실행할까요? 워크는 실행하는 주인공은 워커 스레드입니다. 인터럽트 후반부 처리나 지연해야 할 작업을 워크에서 실행하는 것입니다. 리눅스 커널에서는 워크를 work라고도 부릅니다. 이 책에서는 편의상 워크라고 명시하겠습니다. 다음 그림을 보면서 워크에 대해 배워볼까요? [그림 1] 워크 실행 흐름도 워크의 처리 흐름은 위 그림과 같이 3단계로 분류할 수 있습니다. 1단계부터 알아볼까요? 그림에서 ①으로 표시된 부분입니다. 워크를 실행하려면 먼저 워크를 워크