Chế độ bảo vệ

Trong máy tính, chế độ bảo vệ, còn được gọi là chế độ địa chỉ ảo được bảo vệ, là một chế độ hoạt động của các đơn vị xử lý trung tâm tương thích x86 (CPU). Nó cho phép phần mềm hệ thống sử dụng các tính năng như bộ nhớ ảo, phân trang và đa tác vụ an toàn được thiết kế để tăng sự kiểm soát của hệ điều hành đối với phần mềm ứng dụng.

Khi một bộ xử lý hỗ trợ chế độ bảo vệ x86 được bật nguồn, nó bắt đầu thực hiện các lệnh trong chế độ thực, để duy trì khả năng tương thích ngược với các bộ xử lý x86 trước đó. Chế độ được bảo vệ chỉ có thể được nhập sau khi phần mềm hệ thống thiết lập một bảng mô tả và cho phép bit Bảo vệ Bật (PE) trong thanh ghi điều khiển 0 (CR0).

Chế độ bảo vệ lần đầu tiên được thêm vào kiến trúc x86 năm 1982, với việc phát hành bộ vi xử lý 80286 (286) của Intel, và sau đó được mở rộng với bản phát hành 80386 (386) vào năm 1985. Do các cải tiến được thêm vào bởi chế độ bảo vệ, nó đã trở thành được chấp nhận rộng rãi và đã trở thành nền tảng cho tất cả các cải tiến tiếp theo đối với kiến trúc x86, mặc dù nhiều cải tiến, như các lệnh bổ sung và thanh ghi mới, cũng mang lại lợi ích cho chế độ thực.

Lịch sử
Intel 8086, tiền thân của 286, ban đầu được thiết kế với một địa chỉ bus 20 bit cho bộ nhớ của nó. Điều này cho phép bộ vi xử lý truy cập 220 bytes bộ nhớ, tương đương 1 megabyte. do đó, các nhà thiết kế của IBM Personal Computer đã dành riêng 640 kilobytes đầu tiên cho các ứng dụng và hệ điều hành và 384 kilobytes còn lại cho BIOS (Basic Input/Output System) và bộ nhớ cho các thiết bị ngoại vi.

Khi chi phí của bộ nhớ giảm và sử dụng bộ nhớ tăng lên, giới hạn 1 MB trở thành một vấn đề đáng kể. Intel dự định để giải quyết hạn chế này cùng với những người khác với việc phát hành 286. Coherent và Minix. Một số thiếu sót như không có khả năng truy cập vào các cuộc gọi BIOS hoặc DOS do không có khả năng chuyển về chế độ thực mà không cần thiết lập lại bộ xử lý đã làm cho nó khó được sử dụng rộng rãi. Thêm vào đó, việc bị cản trở bởi thực tế là chỉ cho phép truy cập bộ nhớ trong các phân đoạn 16 bit thông qua bốn thanh ghi phân đoạn, nghĩa là chỉ có 4216 bytes, tương đương 256 kilobytes, có thể được truy cập tại một thời điểm. Kích thước phân khúc cũng được tăng lên 32 bit, có nghĩa là không gian địa chỉ đầy đủ 4 GB có thể được truy cập mà không cần phải chuyển đổi giữa nhiều phân đoạn. Chế độ bảo vệ hiện được sử dụng trong hầu hết các hệ điều hành hiện đại chạy trên kiến trúc x86, chẳng hạn như Microsoft Windows, Linux, và nhiều hệ điều hành khác.

Hơn nữa, học hỏi từ những thất bại của chế độ bảo vệ 286 để đáp ứng nhu cầu về DOS đa người dùng, Intel đã thêm một chế độ 8086 ảo riêng biệt, cho phép nhiều bộ vi xử lý ảo hóa 8086 được mô phỏng trên 386. Hỗ trợ phần cứng cần thiết để tự ảo hóa chế độ được bảo vệ, tuy nhiên, phải đợi thêm 20 năm nữa.

Các bổ sung của 386 vào chế độ được bảo vệ
Với bản phát hành 386, các tính năng bổ sung sau đã được thêm vào chế độ được bảo vệ:)
Địa chỉ đoạn 32 bit
Khả năng chuyển về chế độ thực mà không cần cài đặt lại
Chế độ 8086 ảo

Vào và thoát chế độ được bảo vệ
Cho đến khi phát hành 386, chế độ được bảo vệ không cung cấp phương thức trực tiếp để chuyển về chế độ thực khi chế độ được bảo vệ được nhập vào. IBM đã đưa ra một giải pháp (thực hiện trong IBM AT) có liên quan đến việc thiết lập lại CPU thông qua bộ điều khiển bàn phím và lưu sổ đăng ký hệ thống, ngăn xếp con trỏ và thường là màn chắn ngắt trong RAM của chip đồng hồ thời gian thực. Điều này cho phép BIOS khôi phục CPU về trạng thái tương tự và bắt đầu thực thi mã trước khi reset. Sau đó, một lỗi kép ba được sử dụng để thiết lập lại CPU 286, nhanh hơn và sạch hơn nhiều so với phương pháp điều khiển bàn phím (và không phụ thuộc vào phần cứng tương thích với IBM AT, nhưng sẽ hoạt động trên bất kỳ CPU 80286 nào trong bất kỳ hệ thống nào).

Để vào chế độ được bảo vệ, Bảng mô tả toàn cục (Global Descriptor Table - GDT) đầu tiên phải được tạo với tối thiểu ba mục: một bộ mô tả null, một bộ mô tả đoạn mã và bộ mô tả phân đoạn dữ liệu. Trong một máy tương thích với IBM, dòng A20 (dòng địa chỉ 21) cũng phải được kích hoạt để cho phép sử dụng tất cả các dòng địa chỉ để CPU có thể truy cập vượt quá 1 megabyte bộ nhớ (Chỉ 20 đầu tiên được phép sử dụng sau power-up, để đảm bảo khả năng tương thích với các phần mềm cũ hơn được viết cho các máy tính IBM PC và XT / Intel 8088). Sau khi thực hiện hai bước này, bit PE phải được bật trong thanh ghi CR0 và phải thực hiện bước nhảy xa để xóa hàng đợi nhập sẵn.
; set PE bit
mov eax, cr0
or eax, 1
mov cr0, eax

; far jump (cs = selector of code segment)
jmp cs:@pm

@pm:
; Now we are in PM.
Với việc giải phóng 386, chế độ bảo vệ có thể được thoát bằng cách tải các thanh ghi phân đoạn với các giá trị chế độ thực, vô hiệu hóa dòng A20 và xóa bit PE trong thanh ghi CR0, mà không cần thực hiện các bước thiết lập ban đầu cần thiết với 286.

Tính năng
Chế độ được bảo vệ có một số tính năng được thiết kế để nâng cao khả năng kiểm soát của hệ điều hành đối với phần mềm ứng dụng, nhằm tăng tính bảo mật và ổn định của hệ thống. Điều này cho phép hệ điều hành hoạt động theo một cách mà sẽ  khó khăn hơn hẳn hoặc thậm chí không thể nếu không có phần cứng thích hợp hỗ trợ.

Cấp độ đặc quyền

Trong chế độ được bảo vệ, có bốn cấp độ đặc quyền hoặc các vòng, được đánh số từ 0 đến 3, với vòng 0 là đặc quyền nhất và 3 là ít nhất. Việc sử dụng các vòng cho phép phần mềm hệ thống hạn chế các tác vụ truy cập dữ liệu, gọi các cổng hoặc thực hiện các lệnh đặc quyền. Trong hầu hết các môi trường, hệ điều hành và một số trình điều khiển thiết bị chạy trong vòng 0 và các ứng dụng chạy trong vòng 3.

Chú thích