Bạn có thể đã nghe về các ứng dụng chạy ở chế độ "kernel" hoặc "user". Tất cả đều归结为 cách hệ điều hành hoạt động khi thực hiện công việc của chúng. Khi bạn hiểu điều đó, dễ dàng nắm bắt sự khác biệt giữa user mode và kernel mode.
Hiểu về việc Hệ điều hành làm gì
Một máy tính bao gồm phần cứng, các thành phần điện tử, và phần mềm, mã máy tính được thực thi bởi phần cứng đó. Nhưng điều có thể kém rõ ràng hơn là cách chúng làm việc cùng nhau.
Yếu tố thiết yếu nhất của máy tính là bit hoặc "binary digit" (chữ số nhị phân). Mọi thứ máy tính làm được biểu diễn dưới dạng 1 và 0. Các thành phần máy tính khác nhau biểu diễn bit theo cách khác nhau. Trong CPU, các transistor vi mô biểu diễn 1 và 0 bằng cách bật hoặc tắt. Những transistor đó được sắp xếp thành các cấu trúc logic, gọi là logic gates (cổng logic).
Trong bộ nhớ điện tử máy tính, bit được biểu diễn bởi ô nhớ có điện tích trên hoặc dưới một ngưỡng nhất định. Trên ổ cứng cơ, bit được biểu diễn dưới dạng biến động từ tính được đo trên đĩa quay. Trên đĩa quang, các hốc và đất không phản chiếu ánh laser làm công việc tương tự.
Không quan trọng việc biểu diễn vật lý của mã nhị phân đạt được như thế nào, bạn cuối cùng có thể giảm tất cả các thành phần máy tính tiêu dùng xuống mã máy thô này.
Vậy làm thế nào để bạn đi từ giao diện thân thiện với con người của máy tính đến các quy trình thấp cấp (low-level), thô, trong chính máy tính đó? Đó là nơi hệ điều hành xuất hiện. Nó trực tiếp điều khiển phần cứng của máy tính.
Phần mềm này dịch mọi thứ ứng dụng (và do đó người dùng) muốn thành các lệnh mã máy mà CPU và các thành phần khác hiểu. Mảnh phần mềm quan trọng nhất trong quy trình này là kernel (nhân).
Kernel (Nhân) là gì?
Kernel, như tên gợi ý, là lõi của hệ điều hành. Kernel là phần mềm nằm trong RAM và chỉ đạo mọi thứ máy tính làm. Khi có thứ gì được ghi vào bộ nhớ, kernel là thứ chỉ đạo việc thực thi.
Kernel biết cách giao tiếp với phần cứng như GPU và card mạng, nhưng nó có thể không biết cách vận hành chúng đến mức tận dụng tối đa tiềm năng, dựa trên các tiêu chuẩn chung trong ngành công nghiệp máy tính.
Các driver phần cứng xuất hiện ở đây. Driver nói cho hệ điều hành của bạn cách làm việc với các thành phần cụ thể, đó là lý do bạn cần driver khác nhau cho GPU Nvidia và AMD, ví dụ.
Được trang bị các driver đúng, kernel là quyền lực tối cao trong máy tính, bao gồm việc làm những thứ có thể phá hủy dữ liệu một cách thảm khốc.
Vai trò của Application Programming Interfaces (APIs)
Trong thời của MS-DOS, các nhà phát triển phần mềm phải viết phần mềm cụ thể cho phần cứng của người dùng. Ví dụ nổi tiếng nhất về điều này trên hệ thống MS-DOS là driver card âm thanh.
Một trò chơi video cho trước sẽ phải hỗ trợ các card phổ biến nhất (Sound Blaster, Ad-lib, Gravis Ultrasound, v.v.) và hy vọng hầu hết người chơi được bao phủ. Ngày nay, mọi thứ hoạt động rất khác biệt, nhờ APIs.
Microsoft DirectX là một ví dụ tuyệt vời. Nếu bạn muốn giải thích sâu, hãy xem "What Is DirectX and Why Is It Important?". Tuy nhiên, điều quan trọng nhất cần biết là API cung cấp một cách tiêu chuẩn cho các nhà phát triển phần mềm yêu cầu tài nguyên phần cứng từ các thành phần như GPU. Ngoài ra, nhà sản xuất phần cứng chỉ cần đảm bảo sản phẩm của họ tuân thủ DirectX để đảm bảo tương thích hoàn toàn với bất kỳ phần mềm tuân thủ tương tự nào.
APIs cung cấp một lớp dịch giữa các ứng dụng phần mềm và kernel thấp cấp với driver phần cứng của nó. Có, điều này đi kèm với hình phạt hiệu suất nhẹ. Tuy nhiên, trên máy tính hiện đại, điều này có thể bỏ qua, và nó đi kèm với nhiều lợi thế, đó là nơi chúng ta cuối cùng đến user mode và kernel mode.
User Mode so với Kernel Mode
Hệ điều hành hiện đại chạy hàng trăm hoặc hàng nghìn "processes" (tiến trình) cùng lúc, động态给它们 CPU time theo nhu cầu dựa trên độ ưu tiên và yêu cầu sức mạnh tính toán.
Khi bạn khởi chạy một ứng dụng, nó tạo ra các tiến trình, và CPU có thể thực thi chúng ở user mode hoặc kernel mode.
Một tiến trình Windows chạy ở user mode chỉ có quyền truy cập vào không gian địa chỉ ảo riêng tư của nó và handle table. Phần mềm sử dụng các bảng này để lưu trữ dữ liệu trong RAM và yêu cầu tài nguyên. Không có truy cập trực tiếp vào bộ nhớ hoặc phần cứng khác, và việc ánh xạ những không gian ảo đó đến phần cứng thực tế của máy tính phụ thuộc vào hệ điều hành.
Điều này tốt cho nhiều lý do, nhưng lợi ích quan trọng nhất là ứng dụng không thể ghi đè hoặc thay đổi dữ liệu bên ngoài không gian địa chỉ ảo của nó. Ngoài ra, một số chức năng bị cấm đối với tiến trình user mode, chủ yếu là những thứ có thể làm sập hệ thống hoặc phá hủy dữ liệu.
Khi một tiến trình khởi chạy hoặc được nâng cao lên kernel mode, nó có quyền truy cập đầy đủ vào tài nguyên hệ thống, ngay cả những thứ dành riêng cho hệ điều hành. Vì vậy, về lý thuyết, nó có thể ghi đè dữ liệu quan trọng mà hệ điều hành cần để chạy đúng.
Traps và Exceptions (Bẫy và Ngoại lệ)
Quan trọng để hiểu rằng hai chế độ này được thực thi ở cấp độ phần cứng bởi chính CPU. Nếu một ứng dụng chạy ở user mode cố gắng làm điều gì đó yêu cầu truy cập kernel mode, nó tạo ra một "trap" (bẫy) hoặc "exception" (ngoại lệ). Hệ điều hành sẽ sau đó xử lý ứng dụng, thường là bằng cách tắt nó và tạo crash log để các nhà phát triển có thể thấy gì đã xảy ra trong bộ nhớ khi mọi thứ lệch khỏi đường ray.
Nguy hiểm của Kernel Mode: Màn hình xanh chết chóc (Blue Screen of Death)
Nếu bạn từng trải qua Blue Screen of Death (BSoD - Màn hình xanh chết chóc) (ai mà không?) buộc máy tính của bạn tắt hoặc khởi động lại, có khả năng cao đó là do tiến trình kernel mode gây ra.
Khi một tiến trình ở kernel mode làm điều mà nó không nên làm, hệ điều hành không thể khôi phục từ nó, và toàn bộ máy tính dừng lại. Khi tiến trình user mode bị rối, chỉ ứng dụng đó bị sập, và phần còn lại của phần mềm và hệ điều hành có thể tiếp tục không có vấn đề gì.
Đây là một lĩnh vực APIs đóng vai trò thiết yếu vì đó là API yêu cầu đặc quyền kernel mode. Các ứng dụng user mode về cơ bản ủy thác các yêu cầu sẽ yêu cầu đặc quyền kernel mode cho API.
Đây là lý do kernel mode thường chỉ được cấp cho các tiến trình hệ thống thấp cấp cần truy cập trực tiếp vào phần cứng của máy tính. Thường thì đặc quyền này được mở rộng cho một tiến trình vì nó cần hiệu suất hơn user mode có thể cung cấp. Một số lệnh CPU chỉ hoạt động ở kernel mode, vì vậy nếu một tiến trình cần sử dụng những chức năng đó, nó phải được nâng cao.
Nếu bạn gặp sự cố với Blue Screen of Death, hãy chắc chắn đọc hướng dẫn khắc phục sự cố Blue Screen of Death cho Windows 10 của chúng tôi!