Guillermo Austin Kim

Sources

Posts

998 posts
[리눅스커널] 워크큐: 워크큐 주요 개념 알아보기

[리눅스커널] 워크큐: 워크큐 주요 개념 알아보기

Guillermo Austin Kim|2019년 7월 1일

이번 소절에서는 워크큐를 이루는 주요 개념을 소개합니다. - 워크 - 워커스레드 - 워커풀 - 풀워크큐 먼저 워크큐의 기본 실행 단위인 워크를 배워볼까요? 워크란워크는 워크큐를 실행하는 단위입니다. 워크는 누가 실행할까요? 워크는 실행하는 주인공은 워커 스레드입니다. 인터럽트 후반부 처리나 지연해야 할 작업을 워크에서 실행하는 것입니다. 리눅스 커널에서는 워크를 work라고도 부릅니다. 이 책에서는 편의상 워크라고 명시하겠습니다. 다음 그림을 보면서 워크에 대해 배워볼까요? [그림 1] 워크 실행 흐름도 워크의 처리 흐름은 위 그림과 같이 3단계로 분류할 수 있습니다. 1단계부터 알아볼까요? 그림에서 ①으로 표시된 부분입니다. 워크를 실행하려면 먼저 워크를 워크

[리눅스커널] 시간관리: 커널 타이머 관리 주요 개념 소개

Guillermo Austin Kim|2019년 7월 1일

커널 타이머는 리눅스 커널 핵심 기능 중 하나입니다. 커널 내부에서 배경 작업으로 다음 동작을 수행합니다. - 커널 스케줄링 함수들은 커널 타이머를 써서 프로세스를 제어합니다. - 시스템 시간은 타이머 인터럽트를 받아 주기적으로 갱신됩니다. - Soft IRQ 타이머 서비스를 주기적으로 실행해 동적 타이머를 관리합니다. 또한 리눅스 커널 세부 알고리즘과 디바이스 드라이버는 실행 시간을 기준으로 세부 제어를 합니다. 예시를 들면 다음과 같습니다. - 어떤 함수를 현재 시각 기준으로 200ms 초 후에 실행 - 어떤 함수가 500ms 내에 실행 안 하면 예외 처리 - 특정 함수를 1초 주기로 실행해서 시스템 상태를 점검 리눅스 커널이나 드라이버 코드를 분석하면 커널 타이머와 시간 흐름을 제어하는

[Crash-Utility][리눅스커널][디버깅] Radix Tree(라덱스-트리) 디버깅 하기(크래시 유틸리티)

Guillermo Austin Kim|2019년 6월 27일

리눅스 커널에서는 라덱스 트리로 핵심 자료구조를 관리합니다.이번 시간에는 크래시 유틸리티로 라덱스 트리를 디버깅하는 방법을 소개합니다. 라덱스 트리를 보기 위한 명령어 크래시 유틸리티로 라덱스 트리 노드를 보기 위한 명령어 포멧은 다음과 같습니다.tree -t radix -N (struct radix_tree_node *) 구조체 주소 struct radix_tree_node 구조체 시작 주소만 알면 됩니다. struct radix_tree_node 구조체 주소가 0xFFFFFFFF3A806E79 인 경우 출력 결과는 다음과 같습니다.crash64_kaslr> tree -t radix -N 0xFFFFFFFF3A806E79ffffffff3f53c180ffffffff3f53c4c0ffffffff3

[리눅스커널] 커널동기화: 레이스 컨디션 커널 패치 소개

Guillermo Austin Kim|2019년 6월 24일

이번에는 리눅스 커널 커뮤니티에서 논의된 레이스 컨디션 관련 커널 패치를 소개합니다. 패치 코드를 분석하면서 다음과 같은 내용을 알아보겠습니다. - 레이스 컨디션 발생 원인 - 임계영역 구간 - 패치 코드와 관련 소스 코드 분석 임베디드 리눅스 입문자분들은 정상급 ‘리눅스 커널 개발자’들이 어떻게 리눅스 커널을 개발하는지 궁금해합니다. 이 궁금증을 해소할 수 있는 지름길은 ‘리눅스 커널 메일링 리스트’를 보는 것입니다. ‘리눅스 커널 메일링 리스트’를 읽으면 커널 개발 도중 생긴 문제와 해결 방법에 대한 심도있는 분석을 확인할 수 있습니다. 먼저 패치 코드에서 소개된 다음 함수 흐름을 같이 볼까요? [https://lore.kernel.org/lkml/CAARE==e6obTMLBeo3t2oJuw

[리눅스커널] 커널동기화: 레이스 컨디션은 왜 발생할까?

Guillermo Austin Kim|2019년 6월 24일

이전 소절에서 레이스 컨디션과 임계 영역의 개념에 대해서 소개했습니다. 이 내용을 읽으니 자연스럽게 다음과 같은 의문이 생깁니다. " 레이스 컨디션과 동시성은 왜 발생할까?" 이번 시간에는 그 이유에 대해 살펴보겠습니다. SMP(symmetric multiprocessing)레이스 컨디션이 발생하는 첫 번째 이유는 리눅스 시스템에서 SMP(symmetric multiprocessing)를 적용하기 때문입니다. 여기서 SMP란 무엇일까요? "하나의 시스템에 다수의 CPU가 한 개의 메모리를 쓰는 컴퓨터 시스템 아키텍처이다." 이렇게 SMP에 대한 정의를 읽고 나면 SMP를 적용한 후 레이스 컨디션이 왜 발생하는지 잘 이해가 가지 않습니다. 소프트웨어적 보면 SMP 시스템에서는 다음과 같이