[low level learning] Màn hình xanh huyền thoại

3 min read

bsod

Trên Mac OS X 10.6:

Trên Linux có tên riêng là Kernel panic

(Tham khảo: https://en.wikipedia.org/wiki/Kernel_panic)

Khi nào “bug” này xảy ra. Câu trả lời dạng đơn giản: khi các chương trình nắm quyền “kernel” bị lỗi / throw exception.

Câu hỏi tiếp theo: Khi nào thì Kernel panic xảy ra ?
1 – Hardware của máy có vấn đề (lỗi hiếm gặp, nhưng các máy tính rất cũ kỹ sẽ dễ gặp lỗi kiểu này)
2 – Lỗi code logic của Hệ điều hành hoặc các phần mềm đặc biệt được phép sử dụng “kernel mode”

Chúng ta sẽ đi sâu hơn vào ý 2 bên trên ở phần tiếp theo.

Trên mỗi CPU có một tập hợp các lệnh (instruction set). Các lệnh này cho phép lập trình viên tương tác với phần cứng máy tính, ví dụ: cấp phát bộ nhớ khi khai báo biến; thực hiện các phép tính cộng, trừ, nhân, chia; mở file để đọc hoặc ghi; nhận input từ bàn phím và chuột; v.v.

Tuy nhiên, không phải lệnh nào trên CPU cũng an toàn để cho mọi chương trình sử dụng. Một số lệnh có thể gây ra lỗi nghiêm trọng, làm hỏng dữ liệu hoặc ảnh hưởng đến toàn bộ máy tính.

Vì vậy, CPU chia ra hai chế độ hoạt động:

  • User mode: Các chương trình bình thường như trình duyệt, game, phần mềm… đều chạy ở chế độ này. Trong chế độ này, chương trình chỉ được phép làm những việc “an toàn” mà hệ điều hành cho phép. Khi chúng ta lập trình & throw Exception, chỉ có app bị crash, chứ máy tính sẽ không bị treo.
  • Kernel mode: Đây là chế độ đặc biệt dành riêng cho hệ điều hành. Chỉ trong chế độ này, máy tính mới được phép thực hiện những lệnh “nguy hiểm” như truy cập trực tiếp vào bộ nhớ, thiết bị, hay quản lý file hệ thống.

Khi một chương trình ở user mode muốn làm việc gì đó quan trọng (ví dụ: đọc file, kết nối internet…), nó phải “nhờ” hệ điều hành giúp. Việc này gọi là system call. Lúc đó, CPU sẽ tạm thời chuyển sang kernel mode để xử lý rồi quay lại user mode.

Môt tả flow 1 chương trình (test.c) dùng thư viện (glibc) để đọc và ghi file.

Vì kernel mode có quyền truy cập mọi tài nguyên hệ thống, nên nếu có lỗi xảy ra ở đây, hậu quả có thể rất nghiêm trọng.

Một ví dụ điển hình là các driver – chương trình trung gian cho phép hệ điều hành giao tiếp với phần cứng như chuột, bàn phím, card mạng… Các driver cũng chạy ở kernel mode, nên nếu chúng có lỗi, chúng có thể làm hỏng cả hệ thống.

Khi một driver bị lỗi nghiêm trọng, CPU không biết phải xử lý thế nào và hệ điều hành không thể tiếp tục hoạt động được nữa. Lúc đó, máy tính sẽ dừng khẩn cấp, hiện ra màn hình xanh để tránh gây hư hỏng thêm.

Ví dụ thực tế là vụ CrowdStrike năm 2024, khi một bản cập nhật lỗi của phần mềm bảo mật này đã gây ra lỗi trong driver chạy ở kernel mode. Hậu quả là hơn 8tr máy tính Windows trên toàn thế giới bị màn hình xanh, nhiều sân bay tê liệt

bsod

https://vnexpress.net/crowdstrike-he-lo-nguyen-nhan-su-co-man-hinh-xanh-4773927.html

https://en.wikipedia.org/wiki/2024_CrowdStrike-related_IT_outages

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *