Thứ Bảy, 27 tháng 4, 2013

Kernel mode vs. User mode

Để bảo vệ user apps tránh khỏi việc accessing và modifying các dữ liệu quan trọng của OS, Windows sử dụng 2 processor access modes (thậm chỉ process processor, những gì Windows đang running supports nhiều hơn 2 ) : user mode kernel mode. User application code runs trong usermode, trái lại OS code (như là system services và device drivers ) runs trong kernel mode. kernel mode refers đến mode của thực thi trong processor, được cấp quyền truy nhập đến tất cả system memory và tất cả CPU instructions. Bởi việc cung cấp OS software với đặc quyền cao hơn application software có, processor cung cấp nền tảng cho OS designers để đảm bảo các misbehaving application không thể làm gián đoạn sự ổn định của hệ thống.

Note: cấu trúc của Inter x86 processor định nghĩa 4 mức độ đặc quyền, hoặc rings, để bảo vệ system code và dữ liệu tránh khỏi việc ghi đè bởi việc vô tình hay cố tình bởi code có quyền thấp hơn. Windows sử dụng mức độ đặc quyền 0 (or ring 0) cho kernel mode và mức 3 cho user mode. Lí do Windows chỉ sử dụng 2 mức độ là do một vài kiến trúc phần cứng được supported trong quá khứ (như là Compaq Alpha và Silicon Graphics MIPS ) implemented chỉ hai mức độ đặc quyền.

Mặc dù mỗi Windows process có không gian bộ nhớ riêng của nó, kernel-mode OS và và device driver chia sẻ single virtual address space. Mỗi page trong virtual memory được đánh dấu như là để những thể hiện là những access mode gì processor phải đọc hay viết page.

Page trong không gian system chỉ có thể được accessed từ kernel mode, tái lại tất cả cac pages trong không gian địa chỉ user có thể được truy nhập từ user mode. Read-only pages (như là các pages chứa excutable code) không thể được viết từ bất kì mode nào cả.

Windows không cung cấp bất cứ sự bảo vệ nào đến private read/write system memory được sử dụng bởi các thành phần trong kernel mode. Hay nói cách khác, mỗi khi trong kernel, OS và device driver code có truy nhập hoàn toàn đến system space memory và có thể bypass Windows security để access objects. Bởi vì một số lượng lớn Windows OS code run trong kernel mode, điều quan trọng là các thành phần run trong kernel mode được thiết kế cẩn thận và được kiểm tra cẩn thận để không gây ảnh hưởng đến system security.

Sự thiếu hụt còn nhấn mạnh nhu cầu cần được quan tâm khi loading third-party device driver, bởi vì mỗi khi có mặt trong kernel mode software có thể truy nhập một cách hoàn toàn đến tất cả OS data. vulnerability này là một trong những lí do đằng sau cơ chế driver-signing được giới thiệu trong Windows, những gì cảnh báo user nếu một nỗ lực được tạo ra để thêm một unauthorized (unsigned) driver. Ngoài ra, một cơ chế được gọi là Driver Verifier giúp người viết device driver tìm được bugs (như là buffer overruns hoặc memory leaks).

Như bạn đã biết, user apps chuyển từ user mode đến kernel mode khi chúng tạo ra system service call. Cho ví dụ, Windows ReadFile thậm chí cần gọi internal windows routine  để thực sự handles read data từ file. routine đó, bởi vì nó access đến các cấu trúc dữ liệu bên trong hệ thống, phải được run trong kernel mode. việc chuyển từ user mode sang kernel mode được hoàn thành bởi việc sử dụng một special processor instruction, làm cho processor switch đến kernel mode. OS traps instruction đó, chú ý răng một system service được requested, hợp lệ hóa các arguments thread passed đến system function, và sau đó thực thi internal function. Trước khi trả lại điều khiển cho user thread, processor mode được switched trở lại user mode. Theo cách này OS bảo vệ được dữ liệu của chính nó từ việc quan sát chăm chú và sự chỉnh sửa từ phía user processes.

Điều bình thường đó là user thread spend một phần thời gian của nó trong user mode, và một phần trong kernel mode. Sự thực là , bởi vì một lượng lớn graphic và windowing system được run trong kernel mode, các ứng dụng chuyên đồ họa cần nhiều thời gian trong kernel mode hơn là trong user mode. Một cách dễ dàng để kiểm tra đó là run các graphics-intensive application như là MS paint hoặc MS pinball và quan sát thời gian split giữa user mode và kernel mode sử dụng một trong các biến đếm

Không có nhận xét nào:

Đăng nhận xét