Ưu đãi trong tuần: Nhập mã UD50 giảm 50k cho đơn từ 300k!
Trang chủ
Menu

Developing a Multithreaded Kernel From Scratch!

Phát triển Kernel đa luồng từ con số 0!

Phát triển Kernel đa luồng từ con số 0!

Xây dựng hệ điều hành đa nhiệm và kernel với shell tương tác! phát triển hệ điều hành

4.6
(1,646 đánh giá)
17,238 học viên
Giảng viên
Daniel McCarthy
Phụ đề Việt chất lượng cao Phụ đề tiếng Anh Bán chạy Đánh giá cao
50.000đ 1.609.000đ -97%
✓ Xem giỏ hàng và thanh toán
Bao gồm phụ đề tiếng Việt, tiếng Anh
29.5 giờ video
139 bài giảng
Truy cập vĩnh viễn
Học trên mọi thiết bị
Cập nhật: 31/05/2026

Bạn sẽ học được gì

Cách tạo kernel từ đầu
Cách tạo kernel đa nhiệm
Cách xử lý các chương trình độc hại hoặc có vấn đề trong hệ điều hành của bạn. Kết thúc chúng nếu chúng hoạt động sai.
Bộ nhớ hoạt động như thế nào trong máy tính
Sự khác biệt giữa kernel land, user land và các vòng bảo vệ tạo nên điện toán hiện đại
Các mẫu thiết kế kernel được chính Linux kernel sử dụng
Bạn sẽ học tất cả về bộ nhớ ảo và cách ánh xạ địa chỉ ảo sang địa chỉ vật lý
Bạn sẽ học cách làm cho kernel hiểu được các tiến trình và tác vụ
Bạn sẽ học cách tải các tệp ELF
Bạn sẽ học cách gỡ lỗi mã máy đã được dịch ngược
Bạn sẽ học cách gỡ lỗi kernel trong trình giả lập với GDB

Yêu cầu

Bạn phải biết ngôn ngữ lập trình C
Nên có kiến thức cơ bản về hợp ngữ
Bạn nên có hệ điều hành Linux, có thể tải miễn phí từ internet (Chúng tôi sử dụng Ubuntu trong khóa học này)

Đối tượng phù hợp

Các nhà phát triển kernel mới bắt đầu muốn học cách tạo kernel

Nội dung khóa học

7 phần • 139 bài giảng
1 Giới thiệu
1 Bộ nhớ là gì?
2 Quá trình khởi động
3 Cài đặt những gì chúng ta cần cho phát triển chế độ thực
1 Bootloader Hello World
2 Hiểu về chế độ thực
3 Mô hình bộ nhớ phân đoạn
4 Cải thiện bootloader của chúng ta
5 Chuẩn bị bootloader để khởi động trên phần cứng thật
6 Ghi bootloader vào USB
7 Khởi động bootloader
8 Giải thích về Bảng vectơ ngắt
9 Triển khai ngắt của riêng chúng ta trong chế độ thực
10 Truy cập đĩa và cách nó hoạt động
11 Đọc từ ổ cứng
1 Chế độ bảo vệ là gì?
2 Chuyển sang chế độ bảo vệ
3 Cấu trúc lại dự án của chúng ta
4 Bật dòng A20
5 Tạo trình biên dịch chéo để có thể viết mã bằng C
6 Tải kernel 32 bit vào bộ nhớ và làm việc với các ký hiệu gỡ lỗi
7 Dọn dẹp các tệp đối tượng của chúng ta
8 Xử lý các vấn đề về căn chỉnh
9 Mã C trong chế độ bảo vệ
10 Giải thích về chế độ văn bản
11 Viết ra màn hình, Hướng dẫn Hello World
12 Giải thích về Bảng mô tả ngắt
13 Triển khai Bảng mô tả ngắt
14 Triển khai các hàm In và Out
15 Giải thích về Bộ điều khiển ngắt lập trình được
16 Triển khai Bộ điều khiển ngắt lập trình được
17 Hiểu về Heap và cấp phát bộ nhớ
18 Triển khai Heap của chúng ta
19 Tạo hàm bật ngắt
20 Hiểu về phân trang
21 Triển khai phân trang
22 Sửa đổi bảng trang
23 Chuẩn bị đọc từ ổ cứng
24 Đọc từ đĩa bằng C với bộ điều khiển ATA
25 Cải thiện trình điều khiển đĩa của chúng ta
26 Hệ thống tệp là gì?
27 Tạo trình phân tích đường dẫn
28 Tạo luồng đĩa
29 Giải thích về Bảng cấp phát tệp
30 Bắt đầu tạo hệ thống tệp FAT của chúng ta
31 Hiểu về lớp VFS (Hệ thống tệp ảo)
32 Triển khai chức năng cốt lõi của hệ thống tệp ảo
33 Triển khai chức năng cốt lõi của trình điều khiển hệ thống tệp FAT16
34 Triển khai các cấu trúc FAT16
35 Triển khai hàm giải quyết FAT16
36 Triển khai hàm fopen VFS
37 Triển khai hàm fopen FAT16
38 Triển khai chức năng fread VFS
39 Triển khai chức năng fread FAT16
40 Triển khai chức năng fseek VFS
41 Triển khai chức năng fseek FAT16
42 Triển khai chức năng fstat VFS
43 Triển khai hàm fstat FAT16
44 Triển khai chức năng fclose VFS
45 Triển khai chức năng fclose FAT16
46 Triển khai kernel panic
47 Hiểu về User Land
48 Thay đổi bộ mô tả phân đoạn và dữ liệu kernel để được viết bằng C
49 Triển khai TSS (Phân đoạn chuyển đổi tác vụ)
50 Triển khai nền tảng tác vụ
51 Triển khai nền tảng tiến trình Phần 1
52 Triển khai nền tảng tiến trình Phần 2
53 Đóng gói GDT
54 Triển khai chức năng User Land
55 Tạo ứng dụng tiến trình người dùng đầu tiên của chúng ta
56 Thực thi tiến trình và chuyển xuống đặc quyền user land
57 Thay đổi chức năng phân trang
58 Giao tiếp với kernel từ userland
59 Tạo ngắt 0x80 để giao tiếp tiến trình người dùng với kernel
60 Tạo khả năng tạo và thực thi các lệnh kernel
61 Tạo lệnh kernel đầu tiên của chúng ta
62 Gọi lệnh kernel của chúng ta
63 Sao chép chuỗi từ tiến trình tác vụ
64 Đọc stack của tác vụ
65 Tạo lệnh in trong kernel
66 Hiểu về truy cập bàn phím trong chế độ bảo vệ
67 Tạo lớp bàn phím ảo
68 Tạo trình điều khiển bàn phím cổng PS2 phần 1
69 Cải thiện thiết kế bảng mô tả ngắt của chúng ta
70 Tạo cách sạch hơn để tạo trình xử lý ngắt trong bộ mô tả ngắt
71 Thay đổi tiến trình hiện tại
72 Tạo trình điều khiển bàn phím cổng PS2 phần 2
73 Lấy một phím từ bộ đệm bàn phím trong user land
74 Tạo lệnh putchar ghi một ký tự vào terminal
75 Triển khai backspace trong terminal
76 Sửa đổi trình đọc luồng của chúng ta
77 Giải thích về tệp Elf
78 Triển khai Trình tải Elf - Phần 1
79 Triển khai Trình tải Elf - Phần 2
80 Triển khai Trình tải Elf - Phần 3
81 Triển khai Trình tải Elf - Phần 4
82 Triển khai Trình tải Elf - Phần 5
83 Triển khai Trình tải Elf - Phần 6
84 Viết chương trình người dùng bằng C
85 Triển khai hệ thống in trong stdlib
86 Triển khai hệ thống lấy phím trong stdlib
87 Triển khai Malloc trong stdlib của chúng ta
88 Triển khai Free trong stdlib của chúng ta
89 Thay đổi cách ánh xạ các trang ảo cho tiến trình
90 Triển khai hàm itoa
91 Triển khai hàm putchar
92 Triển khai hàm printf
93 Triển khai khả năng đọc dòng
94 Tạo shell
95 Tải các chương trình khác từ shell của chúng ta
96 Tạo một số hàm stdlib quan trọng
97 Ánh xạ bộ nhớ malloc trong stdlib
98 Hủy ánh xạ bộ nhớ free trong stdlib
99 Đối số tiến trình - Phần 1
100 Đối số tiến trình - Phần 2
101 Đối số tiến trình - Phần 3
102 Triển khai lệnh 'System'
103 Triển khai kết thúc chương trình
104 Xử lý sự cố chương trình
105 Tạo lệnh exit
106 Xử lý caps lock, chữ hoa và chữ thường
107 Chạy nhiều tác vụ cùng lúc - đa nhiệm
1 README
2 Thay đổi hàm fat16_new_fat_item_for_directory_item của chúng ta
3 Thay đổi hàm fat16_open của chúng ta
4 Thay đổi hàm fat16_get_root_directory của chúng ta
5 Thay đổi hàm process_load_binary của chúng ta
6 Cải tiến hàm fat16_to_proper_string của chúng ta
7 Thay đổi hàm restore_general_purpose_registers của chúng ta
8 Cải tiến Kernel cuối cùng
1 Ôn tập Hợp ngữ!
2 Hợp ngữ là gì?
3 Cài đặt trình giả lập
4 Hello World bằng Hợp ngữ
5 Transistor và Cổng logic - Hiểu về bộ xử lý
6 Các thanh ghi trong 8086
7 Giải thích về Mô hình bộ nhớ phân đoạn
8 Giải thích về Stack, Chương trình con và Endiness
1 Bài giảng bonus

Giới thiệu khóa học

This course is designed to teach you how to create your very own multitasking operating system and kernel from scratch. It is assumed you have no experience in programming kernels and you are taught from the ground up.

Real Mode Development

Real mode is a legacy mode in all Intel processors that causes the processor to start in a legacy state, it performs like the old 8086 Intel processors did back in the way.

In the "Real Mode Development" section of the course we start by learning about the boot process and how memory works, we then move on to creating our very own boot loader that we test on our real machine! This boot loader will output a simple "Hello World!" message to the screen and we write this boot loader in purely assembly language.

In this section we also read a sector(512 bytes) from the hard disk and learn all about interrupts in real mode and how to create them.

This section gives you a nice taster into kernel development, without over whelming you with information. You are taught the basics and enough about the legacy processors to be able to move forward to more modern kernel development further into this course.

Protected Mode Development

In this section we create a 32 bit multi-tasking kernel that has the FAT16 filesystem. Our kernel will use Intel's built in memory protection and security mechanisms that allow us to instruct the processor to protect our kernel and prevent user programs from damaging it.

This section is very in depth, you are taught all about paging and virtual memory. We take advantage of clever instructions in Intel processors to allow all processes to share the same memory addresses, this is known as memory virtualization. We map memory addresses to point to different physical memory addresses to create the illusion that every process that is running is loaded at the same address. This is a very common technique in kernel development and is also how swap files work (Those files that are used to compensate for when you run out of usable RAM).

We create our own virtual filesystem layer that uses a design that is similar to the Linux kernel. This clever abstraction that will be taught to you was inspired by the instructors knowledge of writing Linux kernel drivers in his past.

You are taught about the design of the FAT16 filesystem and how the FAT16 filesystem is broken down into clusters and that they can chain together. We then implement our very own FAT16 filesystem driver allowing files to be born!

We implement functionality for tasks and processes and write our own keyboard drivers.

In this course you also get to learn how memory management works, we implement the "malloc" and "free" functions creating our very own heap that's designed to keep track of what memory is being used. Memory management is essential in any operating system and kernel.

Let us not forget that we even create an ELF file loader, we will compile all our operating systems programs into ELF files and allow the loading of binary programs or ELF programs. ELF files contain a lot of information that describes our program for example where our program should be loaded into memory and the different sections of the program.

By the end of this course you will have a fully functioning 32 bit multi-tasking kernel that can have many processes and tasks running at the same time. You will have a working shell that we can use as well.

Assembly language bonus

This is a bonus section designed to bring your assembly skills up to scratch should you struggle a little bit with the assembly language in this course. It's however advised you come to this course with experience in assembly language, we do use it and its important. Never the less if you want to take a chance on this course with no assembly experience then this section will help point you in the right direction so your able to take what you learned and apply it to the kernel.


Taught by an expert that has created Linux kernel modules professionally in the work place. 15 Years Experience As A Software Engineer

Khóa học liên quan

Khám phá thêm các khoá học cùng chủ đề

Hiển thị tất cả khoá học Assembly
Hiển thị tất cả khoá học Linux Kernel
Hiển thị tất cả khoá học Operating Systems
Zalo
Tôi có thể tư vấn khoá học cho bạn 😊