
Kernel là gì?
Một kernel là phần trung tâm hoặc cốt lõi của hệ điều hành máy tính. Nó là tầng chính giữa phần mềm chạy trên máy tính của bạn và phần cứng của nó hay nói cách khác là một chiếc cầu nối giữa chúng. Kernel là gì, các loại kernel khác nhau và nhiệm vụ của chúng trong hệ điều hành, cùng tìm hiểu kĩ hơn sau đây.
Vị trí của kernel trong một hệ điều hành
Bạn có thể phân chia hầu hết các hệ điều hành thành ba tầng như sau:
- Phần cứng: Phần bao gồm các thành phần vật lý của một máy tính, bao gồm bộ nhớ RAM, CPU và các thiết bị input/output như ổ cứng, thiết bị mạng và card đồ họa. CPU thực hiện các phép tính cho máy tính và đọc/ghi dữ liệu vào bộ nhớ.
- Kernel: Kernel là nhân của hệ điều hành. Nó là phần mềm nằm trong bộ nhớ và gửi các lệnh tới CPU và các thiết bị phần cứng khác.
- User processes: là các ứng dụng đang chạy trên máy tính. Một trong những nhiệm vụ của kernel là quản lý các quy trình này và cho phép chúng giao tiếp với nhau.
Kernel mode vs. user mode
Kernel mode và user mode là hai cách mà CPU của máy tính có thể thực thi code. Khi code chạy trong kernel mode, nó có quyền truy cập không giới hạn vào tất cả phần cứng trên máy tính. User mode hạn chế quyền truy cập này đối với CPU. Bộ nhớ của máy tính cũng được phân chia theo cách này và chia thành user space (không gian người dùng) và kernel space (không gian kernel).
Nhờ sự phân chia này, khi một process gặp lỗi trong quá trình chạy ở user mode, hậu quả mà nó gây ra cho hệ thống là tối thiểu, và kernel có thể khôi phục process đó. Một quy trình chạy ở kernel mode, ngược lại, có thể làm crash máy tính. Sự phân chia này giữa user process và kernel là một biện pháp bảo vệ giúp hệ thống hoạt động và ổn định ngay cả khi một user process dùng gặp lỗi.
Kernel panic là gì?
Lỗi và crashes vẫn hoàn toàn có thể xảy ra trên một hệ thống máy tính, ngay cả khi có sự phân chia giữa user và kernel processes. Vì kernel có quyền kiểm soát hoàn toàn hệ thống, một sự cố trong quy trình kernel sẽ làm hỏng toàn bộ hệ thống. Một kernel panic là biện pháp an toàn mà hệ điều hành thực hiện khi phát hiện một sự cố hoặc rằng nếu tiếp tục chạy có thể gây mất dữ liệu hoặc hỏng hóc phần cứng.
Kernel panic thường xảy ra do các vấn đề giao tiếp giữa các thiết bị và phần cứng. Để khôi phục hệ thống trong trạng thái kernel panic, nó cần được khởi động lại.
Thuật ngữ “kernel panic” được sử dụng trong các hệ điều hành Unix, Linux, Mac OS X và các hệ thống tương tự Unix. Trên hệ điều hành Microsoft Windows, loại sự kiện tương tự được gọi là “stop error,” nhưng thường được gọi là “Blue Screen of Death” (BSOD).
Kernel có các chức năng gì?
Kernel thực hiện rất nhiều nhiệm vụ trong một hệ thống máy tính. Các chức năng chính của nó bao gồm:
- Quản lý tài nguyên: Kernel phân bổ tài nguyên của máy tính giữa các ứng dụng đang chạy trên nó và cũng điều khiển việc giao tiếp giữa các quy trình.
- Quản lý bộ nhớ: Kernel có quyền kiểm soát hoàn toàn bộ nhớ hoặc RAM của máy tính. Mỗi quy trình trên máy tính đều yêu cầu một lượng bộ nhớ, và kernel sử dụng việc địa chỉ ảo hóa để phân bổ bộ nhớ cho các quy trình đang chạy. Địa chỉ ảo hóa phân đoạn bộ nhớ và ngăn bộ nhớ được sử dụng bởi mỗi quy trình chồng chéo lên bộ nhớ được sử dụng bởi các quy trình khác.
- Quản lý thiết bị: Kernel duy trì danh sách các thiết bị có sẵn được kết nối với hệ thống và giao tiếp với các thiết bị này bằng cách sử dụng các drivers của chúng. Device drivers là các ứng dụng máy tính chạy ở chế độ kernel và cho phép hệ điều hành giao tiếp với các thiết bị như chuột, bàn phím và màn hình. Kernel quản lý tất cả các giao tiếp giữa user processes và các thiết bị này thông qua các drivers này.
Các loại kernel
Trong khi tính năng của các kernel là tương tự nhau, thiết kế của các kernel cụ thể có thể khác nhau rất nhiều tùy thuộc vào mục đích sử dụng. Có năm loại kernel chính.
Monolithic kernel:
Trong một monolithic kernel, không có sự phân chia giữa user mode và kernel mode. Cả quy trình người dùng và quy trình kernel sử dụng cùng không gian bộ nhớ và chạy trong cùng một luồng.
Hầu hết công việc trong monolithic kernel được thực hiện với các cuộc gọi hệ thống trực tiếp. Điều này giúp ứng dụng truy cập nhanh vào phần cứng và tài nguyên và có thể tăng hiệu suất của user processes. Monolithic kernel cũng là các ứng dụng nhỏ hơn và chiếm ít bộ nhớ hơn vì không cần xử lý cả user mode và kernel mode.
Tuy nhiên, monolithic kernel cũng có một số nhược điểm. Nếu một quy trình gặp sự cố, nó có thể làm hỏng toàn bộ hệ thống vì không có biện pháp bảo vệ của chế độ kernel riêng biệt. Ngoài ra, để thêm các dịch vụ mới vào hệ điều hành, hệ điều hành phải được sửa đổi và khởi động lại.
AIX, HP-UX, Linux, Unix và Solaris đều sử dụng monolithic kernels.
Micro kernel:
Trong một micro kernel, các user processes được thực thi trong không gian người dùng, và các quy trình hệ thống được thực thi trong không gian kernel. Các quy trình trong không gian người dùng có thể gọi các dịch vụ hệ điều hành khác nhau để truy cập vào tài nguyên hệ thống như RAM. Các dịch vụ khác như mạng chạy như các chương trình trong không gian người dùng.
Micro kernel dễ bảo trì hơn so với monolithic kernel, nhưng số lượng cuộc gọi hệ thống và truyền thông thông điệp sẽ đi kèm với nhiều công đoạn và làm hệ thống chậm hơn. Tuy nhiên, micro kernel có thể khôi phục khi quy trình người dùng gặp sự cố, và phần mềm mới có thể được thử nghiệm trên chúng mà không cần khởi động lại hệ thống.
Mach, L4, AmigaOS, Minix và K42 đều sử dụng micro kernels.
Hybrid kernel:
Hybrid kernel còn được gọi là modular kernels và kết hợp các tính năng của cả monolithic và micro kernels. Chúng được sử dụng trong hầu hết các hệ điều hành thương mại và mở rộng chức năng của micro kernels với mã nguồn bổ sung trong không gian kernel để tăng hiệu suất.
Windows, Netware và BeOS đều sử dụng hybrid kernels.
Nano kernel:
Nano kernel rất nhỏ gọn và chỉ cung cấp truy cập trực tiếp vào phần cứng và tài nguyên. Để tiết kiệm không gian bộ nhớ và tăng hiệu suất, nano kernel giao các dịch vụ cho device drivers và không có bất kỳ dịch vụ hệ thống nào. Hệ điều hành Mac OS đã sử dụng nano kernel trong giai đoạn Power PC cho các phiên bản từ 7 đến 9 trước khi chuyển sang phiên bên OS X.
Exo kernel:
Exo kernel là một thiết kế kernel thử nghiệm được phát triển tại MIT. Trong kernel này, việc quản lý tài nguyên được tách biệt với việc bảo vệ tài nguyên. Điều này cho phép kernel được tùy chỉnh cho các ứng dụng cụ thể. Exo kernel không cung cấp abstractions nào trên phần cứng mà nó tương tác, cho phép các developers quyết định cách phân bổ tài nguyên cho các ứng dụng chạy trên hệ thống.
Exo kernel cũng rất nhỏ gọn nhưng cung cấp cho các developers một thư viện hệ điều hành có đầy đủ chức năng của một hệ điều hành truyền thống. Điều này có nghĩa là người dùng của exo kernel phải xây dựng phần còn lại của hệ điều hành từ đầu, điều này có thể phức tạp và đầy rủi ro. Đây là một lý do chính tại sao exo kernel chưa trở thành phổ biến.
Post Comment