리눅스 커널의 구조와 원리: 인터럽트 [저자 직강 1부-5]

(5.0) 수강평 1

수강생 65

Thumbnail

초급자를 위해 준비한
[임베디드 · IoT, Linux] 강의입니다.

시스템 소프트웨어에서 가장 많이 쓰이는, 최신 리눅스 커널(v6.1)의 인터럽트 핵심 개념을 "디버깅을 통해 배우는 리눅스 커널의 구조와 원리"의 저자가 제대로 설명합니다.

이런 걸
배워요!

  • 인터럽트의 기본 개념과 동작 방식

  • 디바이스 드라이버 관점으로 인터럽트의 처리 방식

  • Arm 아키텍처 관점의 인터럽트의 처리 방식

  • 인터럽트를 관리하는 자료 구조

<공지>

1. 500명 돌파 30% 할인 쿠폰 발행 🙏

리눅스 커널 강의 수강 500명 돌파를 기념하여 30% 할인 쿠폰을 발행합니다. 감사합니다. 선착순 100명입니다. 쿠폰 : 16248-df3d5834b998 

2. 로드맵 안내 🎯

이번 강의 <리눅스 커널의 구조와 원리: 인터럽트 [저자 직강 1부-5]>는 로드맵 '시스템 소프트웨어 개발자를 위한 Linux kernel - basic course' 에 포함된 강의입니다.

체계적으로 리눅스 커널을 구성하는 주요 기능을 배우시려는 분은 로드맵(전체 강의 30% 할인)을 활용하시면 좋습니다.

시스템 반도체, 자동차 분야 등

시스템 소프트웨어 개발자라면 꼭 알아야 할 리눅스 커널


모든 IT 기기에서 가장 많이 사용되는 운영체제는 무엇일까요? 바로 리눅스 운영체제입니다. 스마트 폰, 디지틀 TV, 항공 엔터테인먼트 시스템 및 서버에 사용되고 있습니다. 시스템 반도체 업체에서 리눅스(리눅스 디바이스 드라이버)를 활용해 자신이 설계한 하드웨어를 제어합니다. 또한 전기 자동차(Automotive)을 구성하는 다양한 부품(인포테인먼트, 자율주행, 텔레메틱스)에도 리눅스가 많이 활용되고 있습니다.

리눅스 운영체제의 핵심은 리눅스 커널입니다. Armv8-A 아키텍처와 더불어 현재 시스템 소프트웨어 업계에서 가장 많이 필요한 기반 지식이 요구되는 내용이 리눅스 커널이라고도 볼 수 있어요.

리눅스 시스템 소프트웨어 개발자, 리눅스 임베디드 시스템(BSP) 프로그래머 주목!

시스템 반도체, 전기 자동차 분야(자율주행, 인포테인먼트)를 포함한 리눅스 시스템 소프트웨어 분야에서 주니어 개발자   

시스템 반도체, 전기 자동차 분야와 같은 리눅스 시스템 소프트웨어 개발 분야에서 일하고 싶은 취업 준비생 

리눅스 시스템 소프트웨어 분야(메모리, 파일 시스템, 운영체제)의 대학원 진학 희망자

리눅스 시스템 소프트웨어 분야로 커리어를 전환하려는 다른 분야의 개발자 

그런데 리눅스 커널은 시스템 소프트웨어 분야의 입문자에 있어 거대한 장벽과 같은 존재입니다. 입문자들은 리눅스 커널을 배우다가 수 차례 포기한 경험이 있을 것입니다. 그 어려운 리눅스 커널 버전이 업그레이드되면서 점점 더 복잡하게 진화하고 있습니다. 2024년 이후에는 리눅스 커널 버전은 v6.6 이상으로 업그레이드되고 있는데, 진입 장벽이 더 높아지고 있습니다.

시스템 반도체, 전기 자동차 분야를 포함한 다양한 분야에 포진된 리눅스 시스템 소프트웨어 개발자 분들은 리눅스 커널을 잘 알아야 개발 역량을 키울 수 있다는 사실은 알고 있습니다. 하지만 리눅스 커널을 어떻게 배워야 하고 무엇보다 실무에서 어떤 내용을 잘 알아야 하는지 감을 잡기 어려운 상황입니다.

리눅스 디바이스 드라이버 개발의 핵심인 인터럽트

처음 리눅스 시스템 소프트웨어 개발자로 입문하면 무슨 일을 할까요? 프로젝트의 성격과 미션에 따라 다르지만 대부분 리눅스 디바이스 드라이버를 개발합니다. 리눅스 디바이스 드라이버을 개발하면 반드시 구현하고 최적화해야 할 요소 중 하나는 인터럽트입니다. 또한 인터럽트는 리눅스 커널을 이루는 주요 기능과 많이 연관돼 있습니다. 인터럽트 후반부 기법, 동적 타이머, Preemptive scheduling 및 시그널 동작과 연관이 깊습니다.

그래서 제가 쓴 '리눅스 커널의 구조와 원리' 책의 5장에서 인터럽트를 설명합니다. 다양한 방식으로 독자 분들이 ftrace 디버깅 실습을 통해 인터럽트를 배울 수 있게 구성했습니다.

강의의 차별화 포인트

이번 강의는 그 동안 한번도 유튜브나 어느 강의 플렛폼에서 다룬 적이 없는 콘텐츠로 구성되어 있습니다! 인터럽트 동작 방식과 관련 자료 구조를 리눅스 커널 메모리 덤프를 통해 디버깅합니다. 이 강의를 수강하시는 분은 교육용 프로그램(TRACE32)을 내려 받아 직접 실습하실 수 있습니다.

1. TRACE32 시뮬레이터 프로그램(교육용)과 6개 리눅스 커널 덤프 제공

리눅스 시스템 소프트웨어 개발 전반에 TRACE32 디버거와 프로그램은 광범위하게 사용됩니다. TRACE32 프로그램은 라이선스가 있어야 실행할 수 있습니다. 이 강의를 수강하시면 교육용 TRACE32 시뮬레이터 프로그램을 '인프런 강의 자료'에서 내려 받아 직접 TRACE32 시뮬레이터 프로그램을 활용해 메모리 덤프를 디버깅할 수 있습니다. 또한 인터럽트의 다양한 동작(인터럽트 핸들러 호출, Preemption)을 디버깅할 수 있는 6개 커널 메모리 덤프를 내려 받아 실습하실 수 있습니다.

2. 인터럽트의 기본 개념을 쉽고 자세하게 설명

리눅스 커널을 배울 때 커널 소스를 분석합니다. 그런데 커널 소스를 분석하는 과정에서 많은 걸림돌을 만납니다. 해당 함수가 어떤 흐름으로 호출되는지, 분석하는 루틴의 자료 구조가 실제 어떤 값인지 확인하기 어렵습니다. 이번 강의는 이 모든 걸림돌을 해체합니다.

인터럽트와 관련된 리눅스 커널 소스를 TRACE32 프로그램의 콜 스택과 상세한 자료 구조와 함께 분석합니다. 혼자서 리눅스 커널을 배울 때 보다 훨씬 더 효율적으로 인터럽트를 배울 수 있습니다. 또한 메모리 덤프에서 추출한 ftrace 메시지까지 분석하므로 입체적으로 인터럽트의 동작 원리를 세세하게 파악할 수 있습니다.

3. 글로벌 시스템 반도체 업체의 리눅스 커널 BSP 개발자들이 하는 디버깅 방법 소개

최근 시스템 반도체 업계가 떠오르고 있습니다. 글로벌 시스템 반도체 업체 중 최고의 기술력을 지닌 퀄컴 리눅스 커널 BSP 개발자는 어떤 방식으로 리눅스 커널 드라이버를 디버깅할까요?

이번 강의에서 이 내용을 다룹니다. 리눅스 커널 메모리 덤프를 TRACE32 시뮬레이터를 사용해 인터럽트와 관련된 커널의 자료 구조를 디버깅하면서 crash-utility로 메모리 덤프를 로딩해 커널의 주요 동작을 분석합니다.

이런 내용을 배워요

먼저 인터럽트를 처리하는 방식을 설명하고 다양한 관점으로 인터럽트가 처리되는 흐름을 설명합니다.

리눅스 커널과 유저 애플리케이션에서 인터럽트가 유발됐을 때의 전체 실행 흐름을 Armv8 아키텍처 관점으로 세세하게 설명합니다.

리눅스 커널에서 인터럽트가 유발됐을 때의 Armv8의 익셉션 벡터 테이블을 분석합니다. 이어서 처리되는 익셉션 핸들러 루틴을 상세하게 분석합니다.

유저 애플리케이션에서 인터럽트가 유발됐을 때의 Armv8의 익셉션 벡터 테이블을 분석합니다. 이어서 처리되는 익셉션 핸들러 루틴을 어셈블리 명령어 레벨까지 상세하게 분석합니다.

인터럽트가 처리되는 흐름을 큰 그림으로 분석하고 IRQ 서브 시스템(Arm 아키텍처에 의존적이지 않음)에서 실행되는 함수를 세세하게 설명합니다.

TRACE32와 Crash-utility 디버깅 프로그램을 사용해 인터럽트와 관련된 자료구조를 분석합니다.

TRACE32로 인터럽트 핸들러인 bcm2835_mmc_irq() 함수를 디버깅합니다. 콜 스택과 관련 자료 구조와 함께 인터럽트 핸들러 소스 코드를 세세하게 분석합니다.

인터럽트 컨텍스트를 소개하고 인터럽트 컨텍스트를 확인할 수 있는 예시 코드를 설명합니다.

인터럽트 컨텍스트를 활성화하는 커널 소스 코드를 분석합니다. 인터럽트 컨텍스트에서 슬립에서 진입하는 커널 함수를 호출하면 안되는 이유를 설명하고, 예시로 뮤텍스를 획득할 때의 예외 처리 코드를 소개합니다.

인터럽트 서비스 루틴의 실행을 마무리한 다음에 처리되는 Preemption의 동작 방식을 상세하게 설명합니다. 또한 Preemption 될 때의 동작을 TRACE32 디버깅 프로그램으로 상세하게 디버깅합니다.

인터럽트의 동작을 트레이싱하는 ftrace 이벤트를 설정하는 방법을 소개합니다. ftrace message를 상세하게 분석하면서 인터럽트 핸들러의 실행 흐름과 인터럽트 컨텍스트의 조건에 대해 설명합니다.

인터럽트의 동작을 트레이싱하는 ftrace 메시지를 출력하는 커널 소스 코드를 세세히 분석합니다.

교육용 TRACE32 프로그램과 6개 리눅스 커널 메모리 덤프 제공

이번 강의에서는 리눅스 시스템 소프트웨어 업계에서 가장 진보된(Advanced) 디버깅 방식인 - 글로벌 최고 수준 시스템 반도체 업체인, 퀄컴 리눅스 커널 개발자들이 디버깅하는 - 리눅스 커널 메모리 덤프를 디버깅하는 방법을 소개합니다. TRACE32와 Crash utility와 같은 디버깅 프로그램을 활용해 인터럽트의 주요 자료 구조를 디버깅할 수 있습니다.

교육용 TRACE32 프로그램(시뮬레이터 버전)을 강의 커리큐럼에서 내려받을 수 있습니다. 수강생은 TRACE32 프로그램으로 이번 강의에서 제공되는 커널 메모리 덤프를 로딩해 같이 따라하면서 디버깅할 수 있습니다.

오픈 소스 프로젝트로 운영되는 Crash Utility를 직접 내려 받아 커널 메모리 덤프를 로딩해 디버깅할 수 있습니다. Crash Utility에서 지원하는 다양한 기능을 활용해 커널의 자료구조나 콜 스택을 직접 디버깅할 수 있습니다.

책 집필/강의경력을 바탕으로
누구보다 깊고 상세하게!

국내 시스템 소프트웨어 분야에서 전무후무한! '리눅스 커널'책과 'Arm 아키텍처(Armv8-A, Armv7-A)' 책을 쓴 저자입니다. 또한 최신 시스템 소프트웨어 트렌드(전기자동차, 시스템 반도체- 시스템 소프트웨어)를 가장 잘 알고 있는 현업 개발자이자, 시스템 소프트웨어 분야에서 가장 지식 전파 활동을 활발하게 하는 교육자입니다. 

  • '디버깅을 통해 배우는 리눅스 커널의 구조와 원리' (2021년, 대한민국 학술원 우수도서상) 저자

  • '시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리'(2023년) 저자

  • '프로그래머스 데브 코스: 리눅스 시스템 및 커널 전문가' 메인 강사

  • 2022년 6월, 한국컴퓨터종합학술대회 (KCC2022) - 튜토리얼 발표 [ftrace를 이용해 리눅스 커널 정복하기]

  • LG전자 '리눅스 커널' 및 'Armv8 아키텍처' 사내 강사(국내 및 해외 개발자 포함) - (2020년~2024년) 


국내에서 어느 누구보다 리눅스 커널을 구성하는 주요 기능을 잘 설명할 수 있는 교육자라고 자신있게 말씀드릴 수 있습니다.

수강 전 참고 사항

TRACE32 프로그램을 사용하실 때 유의사항

  • TRACE32 교육용 프로그램은 윈도우 환경에서만 실습할 수 있습니다.

  • TRACE32 교육용 프로그램은 오로지 '교육용'으로만 활용될 수 있으며 상업적인 용도로 수정이나 배포하실 수 없습니다.

  • 이번 강의의 TRACE32 교육용 프로그램을 사용하다가 문의 사항이 있으면 반드시 교육자에게 질문해주세요.

실습 환경 및 제공되는 강의 자료

  • 운영 체제 및 버전(OS): 라즈베리 파이(라즈비안), 리눅스 커널 v6.1

  • TRACE32 교육용 프로그램 및 설치 가이드 문서(강의)

  • 6개 리눅스 커널 메모리 덤프(vmcore)

선수 지식 및 유의사항

  • 대략적으로 리눅스가 어떻게 동작하는지 아시면 좋습니다.

  • '리눅스 커널의 구조와 원리: 디버깅 - Basic [저자 직강 1부-2]' 강의를 되도록 먼저 듣고 오시면 좋습니다.

  • 운영체제나 컴퓨터 구조에 대해 알고 있으면 더 편하게 수업을 들을 수 있습니다.

  • 리눅스 커널에 대한 깊이 있는 선수 지식은 필요하지 않습니다.

이런 분들께
추천드려요!

학습 대상은
누구일까요?

  • 시스템 반도체, 전기 자동차 분야(자율주행, 인포테인먼트)를 포함한 시스템 소프트웨어 분야에서 역량을 키우고 싶은 주니어 개발자

  • 시스템 반도체, 전기 자동차 분야와 같은 시스템 소프트웨어 개발을 하고 싶은 취업 준비생

  • 시스템 소프트웨어 분야(메모리, 파일 시스템, 운영체제)의 대학원 진학을 목표로 하는 대학생

  • 시스템 소프트웨어 분야로 커리어를 전환하려는 다른 분야의 개발자

선수 지식,
필요할까요?

  • C언어

  • 컴퓨터구조

  • 운영체제

국내 시스템 소프트웨어 분야에서 전무후무한! 'Arm 아키텍처(Armv8-A, Armv7-A)'와 '리눅스 커널' 책을 쓴 저자이며, 최신 시스템 소프트웨어 트렌드(전기자동차, 시스템 반도체- 시스템 소프트웨어)를 가장 잘 알고 있는 현업 개발자입니다. 또한 시스템 소프트웨어 분야에서 가장 지식 전파 활동을 활발하게 하는 교육자입니다. 

  • '시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리'(2023년) 저자

  • '디버깅을 통해 배우는 리눅스 커널의 구조와 원리' (2021년, 대한민국 학술원 우수도서상) 저자

  • '프로그래머스 데브 코스: 리눅스 시스템 및 커널 전문가' 메인 강사

  • 2022년 6월, 한국컴퓨터종합학술대회 (KCC2022) - 튜토리얼 발표 [ftrace를 이용해 리눅스 커널 정복하기]

  • LG전자 '리눅스 커널' 및 'Armv8 아키텍처' 사내 강사(국내 및 해외 개발자 포함) - (2020년~현재)

국내에서 어느 누구보다 리눅스 커널과 Arm 아키텍처(Armv8-A, Armv7-A)를 잘 설명할 수 있는 교육자라고 자신있게 말씀드릴 수 있습니다.

주요 로드맵 🎯

'시스템 소프트웨어 개발자를 위한 Arm - basic course'

'시스템 소프트웨어 개발자를 위한 Arm - advanced course'

로드맵_이미지_스킨.png

 

시스템 소프트웨어 개발자를 위한 Linux kernel - basic course

image

체계적으로 Arm 아키텍처(Armv8-A, Armv7-A)와 리눅스 커널을 배우시려는 분은 로드맵(전체 강의 30% 할인)을 활용하시면 좋습니다.

커리큘럼

전체

55 ∙ 6시간 13분

강의 게시일: 2024년 04월 09일
마지막 업데이트일: 2024년 04월 09일

수강평

아직 충분한 평가를 받지 못한 강의입니다.
모두에게 도움이 되는 수강평의 주인공이 되어주세요!