디버깅으로 배우는 RISC-V 아키텍처 -2부
김동현 (Austin Kim)
오픈 소스 기반의 최신 CPU 아키텍처인 RISC-V의 핵심 개념과 실용적인 팁을 쉽고 상세하게 설명합니다.
초급
cpu-architecture, cpu, riscv
システムソフトウェアで最も多く使われる、最新Linuxカーネル(v6.1)の「ワークキュー」の核心概念を「デバッグを通して学ぶLinuxカーネルの構造と原理」の著者が正しく説明します。
ワークキューを構成する基本概念と動作方式
デバイスドライバー観点でのワークキューの処理方式
遅延作業の主要概念
TRACE32メモリダンプでワークキューをデバッグする
すべてのIT機器で最も多く使用されているオペレーティングシステムは何でしょうか?それはまさにLinuxオペレーティングシステムです。スマートフォン、デジタルTV、航空エンターテインメントシステム、そしてサーバーで使用されています。システム半導体企業では、Linux(Linuxデバイスドライバー)を活用して自社が設計したハードウェアを制御しています。また、電気自動車(Automotive)を構成する様々な部品(インフォテインメント、自動運転、テレマティクス)にもLinuxが多く活用されています。
Linuxオペレーティングシステムの核心はLinuxカーネルです。Armv8-Aアーキテクチャと共に、現在のシステムソフトウェア業界で最も必要とされる基礎知識が求められる内容がLinuxカーネルとも言えるでしょう。
✅ システム半導体、電気自動車分野(自律走行、インフォテインメント)を含むLinuxシステムソフトウェア分野でのジュニア開発者
✅ システム半導体、電気自動車分野などのLinuxシステムソフトウェア開発分野で働きたい就職準備生
✅ Linuxシステムソフトウェア分野(メモリ、ファイルシステム、オペレーティングシステム)の大学院進学希望者
✅ Linuxシステムソフトウェア分野にキャリアチェンジを目指す他分野の開発者
しかし、Linuxカーネルはシステムソフトウェア分野の入門者にとって巨大な壁のような存在です。入門者たちはLinuxカーネルを学ぼうとして何度も諦めた経験があることでしょう。その難しいLinuxカーネルのバージョンがアップグレードされながら、ますます複雑に進化しています。2024年以降、Linuxカーネルバージョンはv6.6以上にアップグレードされありますが、参入障壁がより高くなっています。
システム半導体、電気自動車分野を含む様々な分野に配置されているLinuxシステムソフトウェア開発者の方々は、Linuxカーネルをよく知ってこそ開発能力を向上させることができるという事実は知っています。しかし、Linuxカーネルをどのように学ぶべきか、そして何よりも実務でどのような内容をよく知っておくべきかを把握するのが難しい状況です。
Linuxシステムソフトウェア開発者として入門すると、ほとんどの場合Linuxデバイスドライバーを開発します。この過程で必ず知っておくべき機能はまさにワークキューです。その理由をいくつか挙げると、
ワークキューは割り込み後半部技法として使用される。
デバイスドライバの多くの機能は、ワークキューが提供するAPIを使用して実装される。
また、Linuxカーネルを構成する多くの機能もワークキューが提供するAPIを使用して動作します。そのため、私が書いた「Linuxカーネルの構造と原理」という本の7章で、次のような「ワークキュー」について説明しています。
今回の講義は、様々な方法で読者の皆さんがデバッグ実習(TRACE32メモリダンプ分析、ftrace分析)を通してワークキューを学べるように構成しました。
今回の講義はこれまで一度もYouTubeやどの講義プラットフォームでも扱われたことのないコンテンツで構成されています! Linuxカーネルのワークキューに関連するデータ構造(system_wqグローバル変数、worker_pool構造体、work_struct構造体)をLinuxカーネルメモリダンプを通じてデバッグします。この講義を受講される方は3つのメモリダンプをダウンロードして直接実習することができます。
1. ワークキューデバッグ用Linuxカーネルダンプの提供(3個)
この講義を受講すると、3つのメモリダンプを「Inflearn講義資料」からダウンロードして、直接TRACE32シミュレータプログラムを活用してデバッグすることができます。2つのメモリダンプはArmv8-Aベースのラズベリーパイ、1つのメモリダンプはRISC-VベースのVisionFive2から取得したメモリダンプです。ワークキュー技法の様々な動作(ワークアイテムキューイング、ワークアイテム実行、ワーカープール、グローバルワークキュー)を直接デバッグしながら習得することができます。
*なお、TRACE32シミュレータープログラムは、以下の既存のLinuxカーネル講義からダウンロードできます:
Linuxカーネルの構造と原理:デバッグ - Advanced実戦 [著者直講1部-3]
Linuxカーネルの構造と原理:プロセス [著者直講 1部-4]
Linuxカーネルの構造と原理:割り込み [著者直講 1部-5]
Linuxカーネルの構造と原理:割り込み後半部 [著者直講 1部-6]
2. ワークキューの基本概念を簡単で詳しく説明
Linuxカーネルを学ぶ際、カーネルソースを分析します。しかし、カーネルソースを分析する過程で多くの障害に遭遇します。該当する関数がどのような流れで呼び出されるのか、分析するルーチンのデータ構造が実際にどのような値なのかを確認することが困難です。今回の講義では、これらすべての障害を解決します。
ワークキューに関連するLinuxカーネルソースをTRACE32プログラムのコールスタックと詳細なデータ構造と共に分析します。一人でLinuxカーネルを学ぶ時よりもはるかに効率的にワークキュー技法を学ぶことができます。また、メモリダンプから抽出したftraceメッセージまで分析するため、立体的にワークキューの動作原理を詳細に把握することができます。
3.デバイスドライバの観点とLinuxカーネルの観点からワークキューを説明
ワークキューを初めて学ぶ方は、とても難しいと言います。ほとんどのワークキューを説明する本やブログは、入門者ではなく、Linuxカーネルをある程度よく知っている開発者を対象に構成されているからです。今回の講義は、入門者の方がワークキューをよく理解できるように、以下の2つの観点からワークキューを説明します:
デバイスドライバーの観点:ワークアイテム基準で説明
Linuxカーネルの観点:ワークキューを構成する詳細なデータ構造について説明
この講義を受講した後、すぐにデバイスドライバー開発を始めることができ、続いて深度のあるワークキュー技法の動作方式も習得することができます。
4. グローバルシステム半導体企業のLinuxカーネルBSP開発者が行うデバッグ手法の紹介
最近、システム半導体業界が注目されています。グローバルシステム半導体企業のLinuxカーネルシステム開発者は、どのような方法でLinuxカーネルドライバーをデバッグするのでしょうか?
この講義では、この内容を扱います。LinuxカーネルメモリダンプをTRACE32シミュレータを使用してプロセスに関連するカーネルのデータ構造をデバッグしながら、crash-utilityでメモリダンプをロードしてカーネルの主要な動作を分析します。
5. 書籍では扱えなかった内容についても説明
実戦開発でよく使われるワークキューウォッチドッグ(CONFIG_WQ_WATCHDOG)を次のような内容とともに説明します。
ラズベリーパイで直接ワークキューウォッチドッグ(CONFIG_WQ_WATCHDOG)を有効化する方法
ワークキューウォッチドッグの動作をftraceでデバッグ
すぐに実戦で活用できる有益な内容まで講義に盛り込みました。
ワークキューを構成する核心機能とロードマップをまず説明します。続いてワークキューをうまく学ぶ方法を詳細に説明します。
ワークキューを構成するデータ構造を大きな図で説明します。グローバルワークキューとワーカープール、そしてワークアイテムの構造を詳細に説明します。
デバイスドライバの観点からワーク(ワークアイテム)がどのように使用されるかを説明します。
ワークに関連するデータ構造を紹介し、デバッグ実習で詳細に各フィールドがどのような値を格納するかを分かりやすく説明します。
ワークアイテムがキューイングされる過程をカーネルコード分析で詳細に説明します。
ワークアイテムがキューイングされる際のデータ構造(リンクドリスト)をTRACE32メモリダンプデバッグで詳細に説明します。
ワークアイテムを実行するワーカースレッドを紹介し、ワーカースレッドの実行段階を説明します。続いてワーカースレッドが生成されるカーネルソースを分析し、この過程のコールスタック(バックトレース)も併せて説明します。
ワーカースレッドが実行する際の動作方式をカーネルソース分析で詳細に説明します。
ワーカースレッドを通じてワークアイテムが実行される動作方式をTRACE32デバッグを通じて説明します。(3つのメモリダンプ)
ワークキューをトレーシングするftraceについて詳細に説明し、関連するカーネルソースコードをftraceメッセージと共に分析します。
デバイスドライバーでよく活用されるディレイドワークキューについて分かりやすく説明します。
ディレイドワークのソースコードとディレイドワークの実行フローを詳細に分析します。
書籍では扱われていませんが、実戦プロジェクトで多く使用されるワークキューウォッチドッグについて説明します。CONFIG_WQ_WATCHDOGを有効にする方法を説明し、関連するカーネルソースコードを分析します。
ワークキューウォッチドッグの動作方式をftraceメッセージ分析で詳細に説明します。
グローバル著者&Linuxシステムソフトウェア開発者(Arm、RISC-Vアーキテクチャ)
国内のシステムソフトウェア分野において前代未聞!「Armアーキテクチャ(Armv8-A、Armv7-A)」と「Linuxカーネル」の書籍を執筆した著者(2冊の書籍がいずれも大韓民国学術院優秀図書に選定)であり、国内初として海外出版社(Packt)を通じて「Reverse Engineering Armv8-A Systems」書籍(英語)を執筆したグローバル著者です。何よりも最新のシステムソフトウェアトレンド(電気自動車、システム半導体-システムソフトウェア)を最もよく知っている現役開発者です。また、システムソフトウェア分野で最も知識普及活動を活発に行っている教育者です。
'Reverse Engineering Armv8-A Systems: A practical guide to Kernel, Firmware, and TrustZone analysis'の著者(英語書籍、Packt出版社)
「デバッグで学ぶLinuxカーネルの構造と原理」(2021年、大韓民国学術院優秀図書賞)著者
「システムソフトウェア開発のためのArmアーキテクチャの構造と原理」(2024年、大韓民国学術院優秀図書賞)著者
'プログラマス デブ コース: Linuxシステム及びカーネル専門家' メイン講師 (1~2期)
2022年6月、韓国コンピュータ総合学術大会(KCC2022)- チュートリアル発表「ftraceを利用してLinuxカーネルを征服する」
LG電子「Linuxカーネル」および「Armv8アーキテクチャ」社内講師(国内および海外開発者含む) - (2020年〜2024年)
国内で誰よりもLinuxカーネルを構成する主要機能をよく説明できる教育者だと自信を持って申し上げることができます。
大まかにLinuxがどのように動作するかご存知であれば良いです。
「Linuxカーネルの構造と原理:デバッグ - Basic [著者直講1部-2]」の講義をできるだけ先に受講してからお越しいただければと思います。
オペレーティングシステムやコンピュータアーキテクチャについて知っていれば、より楽に授業を受けることができます。
Linuxカーネルに関する深い予備知識は必要ありません。
学習対象は
誰でしょう?
システム半導体、電気自動車分野(自律走行、インフォテインメント)を含むシステムソフトウェア分野で能力を向上させたいジュニア開発者
システム半導体、電気自動車分野などのシステムソフトウェア開発をしたい就職準備生
システムソフトウェア分野(メモリ、ファイルシステム、オペレーティングシステム)の大学院進学を目標とする大学生
他分野からシステムソフトウェア分野へのキャリア転換を目指す開発者
前提知識、
必要でしょうか?
C言語
コンピュータアーキテクチャ
オペレーティングシステム
5,437
受講生
148
受講レビュー
84
回答
4.9
講座評価
21
講座
글로벌 저자 & 리눅스 시스템 소프트웨어 개발자 (Arm, RISC-V 아키텍처)
국내 시스템 소프트웨어 분야에서 전무후무한! 'Arm 아키텍처(Armv8-A, Armv7-A)'와 '리눅스 커널' 책을 쓴 저자(2권의 책 모두 대한민국 학술원 우수도서에 선정)이며, 국내 최초로 해외 출판사(Packt)를 통해 "Reverse Engineering Armv8-A Systems" 책(영어)을 집필한 글로벌 저자입니다. 무엇보다 최신 시스템 소프트웨어 트렌드(전기자동차, 시스템 반도체- 시스템 소프트웨어)를 가장 잘 알고 있는 현업 개발자입니다. 또한 시스템 소프트웨어 분야에서 가장 지식 전파 활동을 활발하게 하는 교육자입니다.
'Reverse Engineering Armv8-A Systems: A practical guide to Kernel, Firmware, and TrustZone analysis' 책(영어) 저자, (Packt 출판사)
'시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리'(2024년, 대한민국 학술원 우수도서상) 저자
'디버깅을 통해 배우는 리눅스 커널의 구조와 원리' (2021년, 대한민국 학술원 우수도서상) 저자
'프로그래머스 데브 코스: 리눅스 시스템 및 커널 전문가' 메인 강사
2022년 6월, 한국컴퓨터종합학술대회 (KCC2022) - 튜토리얼 발표 [ftrace를 이용해 리눅스 커널 정복하기]
LG전자 '리눅스 커널' 및 'Armv8 아키텍처' 사내 강사(국내 및 해외 개발자 포함) - (2020년~현재)
국내에서 어느 누구보다 리눅스 커널과 Arm 아키텍처(Armv8-A, Armv7-A)를 잘 설명할 수 있는 교육자라고 자신있게 말씀드릴 수 있습니다.
강의문의 : austindh.kim@gmail.com
'시스템 소프트웨어 개발자를 위한 Arm - basic course'
全体
68件 ∙ (8時間 0分)
講座資料(こうぎしりょう):
期間限定セール、あと6日日で終了
¥30,800
30%
¥5,211
知識共有者の他の講座を見てみましょう!
同じ分野の他の講座を見てみましょう!