inflearn logo

Cấu trúc và nguyên lý của nhân Linux: Ngắt (Interrupt) [Bài giảng trực tiếp từ tác giả Phần 1-5]

Tác giả của cuốn sách "Cấu trúc và nguyên lý của nhân Linux học qua debugging" giải thích một cách bài bản về các khái niệm cốt lõi của ngắt (interrupt) trong nhân Linux mới nhất (v6.1), vốn được sử dụng nhiều nhất trong phần mềm hệ thống.

(5.0) 6 đánh giá

258 học viên

Độ khó Cơ bản

Thời gian Không giới hạn

Operating System
Operating System
Linux
Linux
linux-kernel
linux-kernel
ARM Architecture
ARM Architecture
interrupt
interrupt
Operating System
Operating System
Linux
Linux
linux-kernel
linux-kernel
ARM Architecture
ARM Architecture
interrupt
interrupt

Bạn sẽ nhận được điều này sau khi học.

  • Khái niệm cơ bản và cơ chế hoạt động của ngắt (interrupt)

  • Cách xử lý ngắt (interrupt) từ góc độ trình điều khiển thiết bị (device driver)

  • Cách xử lý ngắt từ góc độ kiến trúc Arm

  • Cấu trúc dữ liệu quản lý ngắt

<Thông báo>

1. Phát hành mã giảm giá 30% kỷ niệm cột mốc 500 người tham gia🙏

Để kỷ niệm cột mốc hơn 500 học viên tham gia khóa học nhân Linux, chúng tôi xin phát hành mã giảm giá 30%. Xin cảm ơn các bạn. Số lượng có hạn cho 100 người đầu tiên.

- Liên kết mã giảm giá 30% : https://inf.run/i3zsz

2. Hướng dẫn lộ trình 🎯

Bài giảng lần này <Cấu trúc và nguyên lý của Linux Kernel: Ngắt [Bài giảng trực tiếp từ tác giả Phần 1-5]> là bài giảng nằm trong lộ trình'Linux kernel - basic course dành cho nhà phát triển phần mềm hệ thống'.<linux kernel structure and principles: interrupts [author's lecture part 1-5]>.</linux>

Đối với những ai muốn học các chức năng chính cấu thành nên nhân Linux một cách hệ thống, việc tận dụng lộ trình học tập (giảm giá 30% cho toàn bộ khóa học) sẽ rất hữu ích.).

Các lĩnh vực như chất bán dẫn hệ thống, ô tô, v.v.

Nhân kơ-nen Linux mà mọi nhà phát triển phần mềm hệ thống nhất định phải biết


Hệ điều hành được sử dụng nhiều nhất trên tất cả các thiết bị IT là gì? Đó chính là hệ điều hành Linux. Nó đang được sử dụng trong điện thoại thông minh, TV kỹ thuật số, hệ thống giải trí hàng không và máy chủ. Các công ty bán dẫn hệ thống sử dụng Linux (Linux device driver) để điều khiển phần cứng do chính họ thiết kế. Ngoài ra, Linux cũng đang được ứng dụng rộng rãi trong các linh kiện khác nhau (hệ thống giải trí, tự lái, viễn thông) cấu thành nên xe điện (Automotive).

Cốt lõi của hệ điều hành Linux chính là nhân Linux (Linux Kernel). Có thể xem nhân Linux cùng với kiến trúc Armv8-A là những nội dung đòi hỏi kiến thức nền tảng cần thiết nhất trong ngành phần mềm hệ thống hiện nay.

Các nhà phát triển phần mềm hệ thống Linux, lập trình viên hệ thống nhúng Linux (BSP) hãy chú ý!

Nhà phát triển trẻ (Junior Developer) trong lĩnh vực phần mềm hệ thống Linux, bao gồm các lĩnh vực bán dẫn hệ thống và xe điện (tự lái, giải trí đa phương tiện)

Người đang chuẩn bị xin việc muốn làm việc trong lĩnh vực phát triển phần mềm hệ thống Linux như bán dẫn hệ thống và xe điện.

✅ Những người có nguyện vọng học cao học trong lĩnh vực phần mềm hệ thống Linux (bộ nhớ, hệ thống tệp, hệ điều hành) in the field of Linux system software (memory, file systems, operating systems)

Các nhà phát triển từ các lĩnh vực khác đang muốn chuyển đổi sự nghiệp sang lĩnh vực phần mềm hệ thống Linux to the Linux system software field

Tuy nhiên, nhân Linux giống như một bức tường khổng lồ đối với những người mới bắt đầu trong lĩnh vực phần mềm hệ thống. Những người mới bắt đầu chắc hẳn đã từng có trải nghiệm bỏ cuộc nhiều lần khi đang học về nhân Linux. Phiên bản nhân Linux vốn đã khó nay lại càng trở nên phức tạp hơn khi được nâng cấp. Sau năm 2024, phiên bản nhân Linux đang được nâng cấp lên v6.6 trở lên, khiến rào cản gia nhập ngày càng cao hơn.

Các nhà phát triển phần mềm hệ thống Linux trong nhiều lĩnh vực khác nhau, bao gồm cả lĩnh vực bán dẫn hệ thống và xe điện, đều biết rằng việc hiểu rõ nhân (kernel) Linux là điều cần thiết để nâng cao năng lực phát triển. Tuy nhiên, họ đang gặp khó khăn trong việc xác định nên học nhân Linux như thế nào và quan trọng hơn hết là cần phải nắm vững những nội dung gì trong công việc thực tế.

Ngắt quãng (Interrupt), cốt lõi của việc phát triển trình điều khiển thiết bị (device driver) Linux

Khi mới bắt đầu bước chân vào con đường trở thành nhà phát triển phần mềm hệ thống Linux, bạn sẽ làm những công việc gì? Tùy thuộc vào tính chất và nhiệm vụ của dự án, nhưng đa số sẽ phát triển trình điều khiển thiết bị (Linux device driver). Khi phát triển trình điều khiển thiết bị Linux, một trong những yếu tố nhất thiết phải triển khai và tối ưu hóa chính là ngắt (interrupt). Ngoài ra, ngắt còn liên quan mật thiết đến nhiều chức năng chính cấu thành nên nhân (kernel) Linux. Nó có mối liên hệ sâu sắc với các kỹ thuật xử lý nửa sau của ngắt (interrupt bottom halves), bộ định thời động (dynamic timer), lập lịch ưu tiên (preemptive scheduling) và hoạt động của tín hiệu (signal).

Vì vậy, trong chương 5 của cuốn sách 'Cấu trúc và nguyên lý của nhân Linux' do tôi viết, tôi đã giải thích về ngắt (interrupt). Tôi đã biên soạn nội dung để độc giả có thể học về ngắt thông qua các bài thực hành gỡ lỗi ftrace theo nhiều cách khác nhau.

Điểm khác biệt của bài giảng

Bài giảng lần này bao gồm những nội dung chưa từng được đề cập trên YouTube hay bất kỳ nền tảng bài giảng nào trước đây! Chúng ta sẽ thực hiện gỡ lỗi (debug) cơ chế hoạt động của ngắt (interrupt) và các cấu trúc dữ liệu liên quan thông qua bản sao lưu bộ nhớ (memory dump) của nhân Linux. Những người tham gia khóa học này có thể tải xuống chương trình giáo dục (TRACE32) để trực tiếp thực hành.

1. Cung cấp chương trình mô phỏng TRACE32 (dành cho giáo dục) và 6 bản dump nhân Linux

Trình gỡ lỗi và chương trình TRACE32 được sử dụng rộng rãi trong toàn bộ quá trình phát triển phần mềm hệ thống Linux. Chương trình TRACE32 cần có bản quyền mới có thể khởi chạy. Nếu tham gia khóa học này, bạn có thể tải xuống chương trình mô phỏng TRACE32 dành cho giáo dục từ 'Tài liệu bài giảng Inflearn' để trực tiếp sử dụng chương trình mô phỏng TRACE32 và gỡ lỗi bộ nhớ dump. Ngoài ra, bạn cũng có thể tải xuống và thực hành với 6 bản dump bộ nhớ nhân (kernel memory dump) để gỡ lỗi các hoạt động khác nhau của ngắt (gọi trình xử lý ngắt, Preemption).

2. Giải thích các khái niệm cơ bản về ngắt (interrupt) một cách dễ hiểu và chi tiết

Khi học nhân hệ điều hành Linux (Linux kernel), chúng ta thường phân tích mã nguồn của nó. Tuy nhiên, trong quá trình phân tích mã nguồn, bạn sẽ gặp phải rất nhiều trở ngại. Rất khó để xác định hàm đó được gọi theo luồng nào, hay cấu trúc dữ liệu của quy trình đang phân tích thực tế có giá trị là bao nhiêu. Khóa học này sẽ tháo gỡ tất cả những trở ngại đó.

Phân tích mã nguồn Linux kernel liên quan đến ngắt (interrupt) cùng với call stack và cấu trúc dữ liệu chi tiết của chương trình TRACE32. Bạn có thể học về ngắt hiệu quả hơn nhiều so với việc tự học Linux kernel một mình. Ngoài ra, bằng cách phân tích cả thông báo ftrace được trích xuất từ memory dump, bạn có thể nắm bắt chi tiết nguyên lý hoạt động của ngắt một cách đa chiều.

3. Giới thiệu các phương pháp gỡ lỗi mà các nhà phát triển Linux kernel BSP tại các công ty bán dẫn hệ thống toàn cầu đang thực hiện

Gần đây, ngành công nghiệp bán dẫn hệ thống đang trỗi dậy mạnh mẽ. Vậy các nhà phát triển Linux Kernel BSP tại Qualcomm - công ty sở hữu công nghệ hàng đầu trong số các doanh nghiệp bán dẫn hệ thống toàn cầu - sẽ gỡ lỗi (debug) trình điều khiển nhân Linux theo cách nào?

Nội dung này sẽ được đề cập trong bài giảng lần này. Chúng ta sẽ sử dụng trình mô phỏng TRACE32 để gỡ lỗi (debug) các cấu trúc dữ liệu của nhân hệ điều hành (kernel) liên quan đến ngắt (interrupt) từ bản sao lưu bộ nhớ (memory dump) của Linux kernel, đồng thời tải bản sao lưu bộ nhớ bằng crash-utility để phân tích các hoạt động chính của kernel.

Bạn sẽ học được những nội dung này

Đầu tiên, giải thích phương thức xử lý ngắt và giải thích luồng xử lý ngắt dưới nhiều góc độ khác nhau.

Giải thích chi tiết toàn bộ luồng thực thi khi ngắt (interrupt) xảy ra trong Linux kernel và ứng dụng người dùng (user application) dưới góc nhìn của kiến trúc Armv8.

Phân tích bảng vector ngoại lệ (exception vector table) của Armv8 khi có ngắt xảy ra trong nhân Linux. Tiếp theo, phân tích chi tiết các quy trình xử lý ngoại lệ (exception handler routine) được thực thi sau đó.

Phân tích bảng vector ngoại lệ (exception vector table) của Armv8 khi có ngắt được kích hoạt từ ứng dụng người dùng (user application). Tiếp theo, phân tích chi tiết các quy trình xử lý ngoại lệ (exception handler routine) cho đến cấp độ lệnh hợp ngữ (assembly).

Phân tích luồng xử lý ngắt (interrupt) theo một bức tranh tổng thể và giải thích chi tiết các hàm được thực thi trong hệ thống con IRQ (không phụ thuộc vào kiến trúc Arm).

Phân tích các cấu trúc dữ liệu liên quan đến ngắt bằng cách sử dụng chương trình gỡ lỗi TRACE32 và Crash-utility.

Sử dụng TRACE32 để gỡ lỗi hàm bcm2835_mmc_irq(), một trình xử lý ngắt (interrupt handler). Phân tích chi tiết mã nguồn của trình xử lý ngắt cùng với ngăn xếp cuộc gọi (call stack) và các cấu trúc dữ liệu liên quan.

Giới thiệu về ngữ cảnh ngắt (interrupt context) và giải thích mã ví dụ để có thể kiểm tra ngữ cảnh ngắt.

Phân tích mã nguồn kernel kích hoạt ngữ cảnh ngắt (interrupt context). Giải thích lý do tại sao không được gọi các hàm kernel đi vào trạng thái ngủ (sleep) trong ngữ cảnh ngắt, và giới thiệu mã xử lý ngoại lệ khi cố gắng lấy mutex làm ví dụ.

Giải thích chi tiết cách thức hoạt động của Preemption được xử lý sau khi kết thúc thực thi Interrupt Service Routine. Ngoài ra, thực hiện debug chi tiết các hoạt động khi xảy ra Preemption bằng chương trình debug TRACE32.

Giới thiệu cách thiết lập các sự kiện ftrace để truy vết hoạt động của ngắt (interrupt). Bằng cách phân tích chi tiết thông báo ftrace, giải thích về luồng thực thi của trình xử lý ngắt (interrupt handler) và các điều kiện của ngữ cảnh ngắt (interrupt context).

Phân tích chi tiết mã nguồn kernel xuất ra các thông báo ftrace dùng để truy vết hoạt động của ngắt.

Cung cấp chương trình TRACE32 dùng cho giáo dục và 6 bản memory dump của nhân Linux

Trong bài giảng này, chúng tôi sẽ giới thiệu phương pháp gỡ lỗi tiên tiến nhất (Advanced) trong ngành phần mềm hệ thống Linux - phương pháp mà các nhà phát triển nhân Linux tại Qualcomm, một công ty bán dẫn hệ thống hàng đầu thế giới, đang sử dụng để gỡ lỗi - đó là cách gỡ lỗi bộ nhớ dump của nhân Linux (Linux kernel memory dump). Bạn có thể gỡ lỗi các cấu trúc dữ liệu chính của ngắt (interrupt) bằng cách sử dụng các chương trình gỡ lỗi như TRACE32 và Crash utility.

✅ Bạn có thể tải chương trình TRACE32 dành cho giáo dục (phiên bản mô phỏng) từ chương trình giảng dạy. Học viên có thể sử dụng chương trình TRACE32 để tải bản dump bộ nhớ kernel được cung cấp trong bài giảng này và thực hành debug cùng lúc.

✅ Bạn có thể trực tiếp tải xuống Crash Utility, một dự án mã nguồn mở, để tải bản sao lưu bộ nhớ nhân (kernel memory dump) và tiến hành gỡ lỗi. Bằng cách tận dụng các tính năng đa dạng mà Crash Utility hỗ trợ, bạn có thể trực tiếp gỡ lỗi cấu trúc dữ liệu hoặc call stack của kernel.

Dựa trên kinh nghiệm viết sách và giảng dạy,
tôi sẽ truyền đạt sâu sắc và chi tiết hơn bất kỳ ai!

Trong lĩnh vực phần mềm hệ thống trong nước, tôi là tác giả duy nhất và chưa từng có tiền lệ đã viết cả sách về 'Linux Kernel' và sách về 'Kiến trúc Arm (Armv8-A, Armv7-A)'. Đồng thời, tôi cũng là một nhà phát triển đang làm việc thực tế, người nắm rõ nhất các xu hướng phần mềm hệ thống mới nhất (xe điện, bán dẫn hệ thống - phần mềm hệ thống), và là một nhà giáo dục hoạt động tích cực nhất trong việc truyền bá kiến thức trong lĩnh vực phần mềm hệ thống.

  • Tác giả cuốn 'Cấu trúc và nguyên lý của nhân Linux học qua debug' (Giải thưởng Sách hay của Viện Hàn lâm Khoa học Quốc gia Hàn Quốc năm 2021)

  • Tác giả cuốn 'Cấu trúc và nguyên lý của kiến trúc Arm dành cho phát triển phần mềm hệ thống' (Giải thưởng Sách hay của Viện Hàn lâm Khoa học Quốc gia Hàn Quốc năm 2024)

  • Giảng viên chính của 'Programmers Dev Course: Chuyên gia Hệ thống Linux và Kernel'

  • Tháng 6 năm 2022, Hội nghị Tổng hợp Khoa học Máy tính Hàn Quốc (KCC2022) - Thuyết trình hướng dẫn [Chinh phục Linux Kernel bằng ftrace]

  • Giảng viên nội bộ về 'Linux Kernel' và 'Kiến trúc Armv8' tại LG Electronics (bao gồm các nhà phát triển trong và ngoài nước) - (2020~2024)


Tôi có thể tự tin nói rằng mình là một nhà giáo dục có khả năng giải thích các tính năng chính cấu thành nên nhân Linux tốt hơn bất kỳ ai khác tại Hàn Quốc.

Lưu ý trước khi học

Lưu ý khi sử dụng chương trình TRACE32

  • Chương trình đào tạo TRACE32 chỉ có thể thực hành trong môi trường Windows.

  • Chương trình đào tạo TRACE32 chỉ có thể được sử dụng cho mục đích 'giáo dục' và không được sửa đổi hoặc phân phối cho mục đích thương mại.

  • Nếu có bất kỳ thắc mắc nào trong quá trình sử dụng chương trình đào tạo TRACE32 của bài giảng lần này, nhất định hãy đặt câu hỏi cho người hướng dẫn.

Môi trường thực hành và tài liệu bài giảng được cung cấp

  • Hệ điều hành và phiên bản (OS): Raspberry Pi (Raspbian), Linux Kernel v6.1

  • Tài liệu hướng dẫn cài đặt và chương trình đào tạo TRACE32 (Bài giảng)

  • 6 bản sao lưu bộ nhớ nhân Linux (vmcore)

Kiến thức tiên quyết và lưu ý

  • Sẽ tốt hơn nếu bạn biết sơ lược về cách thức hoạt động của Linux.

  • Tốt nhất bạn nên nghe bài giảng 'Cấu trúc và nguyên lý của Linux Kernel: Debugging - Basic [Tác giả trực giảng phần 1-2]' trước khi bắt đầu.

  • Nếu bạn có kiến thức về hệ điều hành hoặc cấu trúc máy tính, bạn sẽ có thể theo dõi khóa học một cách thoải mái hơn.

  • Bạn không cần phải có kiến thức chuyên sâu về nhân Linux (Linux kernel) từ trước.

Khuyến nghị cho
những người này

Khóa học này dành cho ai?

  • Nhà phát triển trẻ mong muốn phát triển năng lực trong lĩnh vực phần mềm hệ thống, bao gồm bán dẫn hệ thống và lĩnh vực xe điện (tự hành, thông tin giải trí)

  • Người tìm việc muốn phát triển phần mềm hệ thống trong các lĩnh vực như bán dẫn hệ thống và xe điện.

  • Sinh viên đại học có mục tiêu học cao học trong lĩnh vực phần mềm hệ thống (bộ nhớ, hệ thống tệp, hệ điều hành)

  • Nhà phát triển từ các lĩnh vực khác đang muốn chuyển hướng sự nghiệp sang lĩnh vực phần mềm hệ thống

Cần biết trước khi bắt đầu?

  • Ngôn ngữ C

  • Kiến trúc máy tính

  • Hệ điều hành

Xin chào
Đây là austinkim

6,316

Học viên

241

Đánh giá

96

Trả lời

4.9

Xếp hạng

22

Các khóa học

Tác giả toàn cầu & Nhà phát triển phần mềm hệ thống Linux (Kiến trúc Arm, RISC-V)

Là tác giả vô tiền khoáng hậu trong lĩnh vực phần mềm hệ thống tại Hàn Quốc, người đã viết các cuốn sách về 'Kiến trúc Arm (Armv8-A, Armv7-A)' và 'Linux Kernel' (cả hai cuốn sách đều được Viện Hàn lâm Khoa học Quốc gia Hàn Quốc bình chọn là Sách ưu tú), đồng thời là tác giả toàn cầu đầu tiên tại Hàn Quốc viết cuốn sách tiếng Anh "Reverse Engineering Armv8-A Systems" thông qua nhà xuất bản nước ngoài (Packt). Trên hết, ông là một nhà phát triển đang làm việc thực tế, người nắm rõ nhất các xu hướng phần mềm hệ thống mới nhất (xe điện, bán dẫn hệ thống - phần mềm hệ thống). Ngoài ra, ông còn là một nhà giáo dục hoạt động tích cực nhất trong việc truyền bá kiến thức trong lĩnh vực phần mềm hệ thống.

  • Tác giả cuốn sách (tiếng Anh) 'Reverse Engineering Armv8-A Systems: A practical guide to Kernel, Firmware, and TrustZone analysis', (Nhà xuất bản Packt), (Packt Publishing)

  • Tác giả cuốn 'Cấu trúc và nguyên lý của kiến trúc Arm dành cho phát triển phần mềm hệ thống' (Giải thưởng Sách hay của Viện Hàn lâm Khoa học Quốc gia Hàn Quốc năm 2024))

  • Tác giả cuốn sách 'Cấu trúc và nguyên lý của nhân Linux học qua việc gỡ lỗi' (Giải thưởng Sách hay của Viện Hàn lâm Khoa học Quốc gia Hàn Quốc năm 2021))

  • Giảng viên chính của 'Programmers Dev Course: Chuyên gia Hệ thống Linux và Kernel'

  • Tháng 6 năm 2022, Hội nghị Tổng hợp Khoa học Máy tính Hàn Quốc (KCC2022) - Thuyết trình hướng dẫn [Chinh phục Linux Kernel bằng ftrace]

  • Giảng viên nội bộ của LG Electronics về 'Linux Kernel' và 'Kiến trúc Armv8' (bao gồm các nhà phát triển trong và ngoài nước) - (2020~Hiện tại)

Tôi có thể tự tin khẳng định rằng mình là một giảng viên có khả năng giải thích về Linux Kernel và kiến trúc Arm (Armv8-A, Armv7-A) tốt hơn bất kỳ ai khác tại Hàn Quốc.

Liên hệ giảng dạy: austindh.kim@gmail.com

Lộ trình chính 🎯

'Arm dành cho nhà phát triển phần mềm hệ thống - khóa học cơ bản'

'Arm dành cho nhà phát triển phần mềm hệ thống - khóa học nâng cao'

Linux kernel dành cho nhà phát triển phần mềm hệ thống - khóa học cơ bản

Thêm

Chương trình giảng dạy

Tất cả

56 bài giảng ∙ (6giờ 13phút)

Tài liệu khóa học:

Tài liệu bài giảng
Ngày đăng: 
Cập nhật lần cuối: 

Đánh giá

Tất cả

6 đánh giá

5.0

6 đánh giá

  • ioniakim2638님의 프로필 이미지
    ioniakim2638

    Đánh giá 9

    Đánh giá trung bình 4.9

    5

    100% đã tham gia

    • lord8465님의 프로필 이미지
      lord8465

      Đánh giá 2

      Đánh giá trung bình 5.0

      5

      31% đã tham gia

      • heecheolsong님의 프로필 이미지
        heecheolsong

        Đánh giá 21

        Đánh giá trung bình 5.0

        5

        30% đã tham gia

        • aceoftop1975님의 프로필 이미지
          aceoftop1975

          Đánh giá 121

          Đánh giá trung bình 5.0

          5

          100% đã tham gia

          2024/07/14/Chủ nhật 15:27 Tôi thực sự rất thích bài giảng. Cảm ơn

          • dlrbcnvk님의 프로필 이미지
            dlrbcnvk

            Đánh giá 19

            Đánh giá trung bình 4.9

            5

            60% đã tham gia

            Khóa học khác của austinkim

            Hãy khám phá các khóa học khác của giảng viên!

            Khóa học tương tự

            Khám phá các khóa học khác trong cùng lĩnh vực!

            1.161.013 ₫