L: Length
SL: Segment Length Seg. Table
Hỡnh 3.11b. Sơ đồ chuyển địa chỉ trong hệ thống phõn Đoạn
Main Memry
Bảo vệ và chia sẻ trong phõn đoạn:
Sự phõn đoạn dựng chớnh nú để cài đặt cỏc chớnh sỏch bảo vệ và chia sẻ bộ nhớ. Bởi vỡ mỗi phần tử trong bảng trang bao gồm một trường length và một trường base address, nờn một tiến trỡnh trong segment khụng thể truy cập đến một vị trớ trong bộ nhớ chớnh mà vị trớ này vượt qua giới hạn (length) của segment, ngoại trừ đú là một truy cập dữ liệu đến một segment dữ liệu nào đú.
Để thực hiện việc chia sẻ segment, vớ dụ segment A, cho nhiều tiến trỡnh, hệ điều hành cho phộp nhiều tiến trỡnh cựng tham chiếu đến segment A, khi đú cỏc thụng số (length và base address) của segment A xuất hiện đồng thời ở cỏc bảng segment của cỏc tiến trỡnh cựng chia sẻ segment A. Chiến lược chia sẻ này cũng được ỏp dụng trong hệ thống phõn trang.
Cỏc hệ điều hành cũng cú thể sử dụng một chiến lược bảo vệ phức tạp hơn để cài đặt sự bảo vệ cỏc segment, đú là sử dụng cấu trỳc vũng bảo vệ (ring protection). Như đó biết trong hệ thống ring, bao gồm: ring 0, ring 1, ring 2, … thỡ mỗi ring cú một mức đặc quyền truy cập riờng, ring 0 cú mức đặc quyền truy cập cao hơn so với ring 1, ring 1 cú mức đặc quyền truy cập cao hơn so với ring 2, …, ring thấp nhất được sử dụng cho thành phần kernel của hệ điều hành, cỏc ring cao hơn được sử dụng cho cỏc ứng dụng của người sử dụng. Nguyờn lý cơ bản của hệ thống ring là:
+ +
S# P#
Off
Seg Table Page Table
• Chương trỡnh chỉ cú thể truy cập đến dữ liệu trong cựng một ring hoặc dữ liệu ở ring cú mức đặc quyền truy cập thấp hơn.
• Chương trỡnh cú thể gọi cỏc dịch vụ trong cựng một ring hoặc ở cỏc ring cú mức đặc quyền truy cập cao hơn.
III.3.2.c. Kết hợp phõn trang với phõn đoạn:
Cả hai kỹ thuật phõn trang và phõn đoạn đều cú những thế mạnh của nú. Sự phõn trang, là trong suốt (transparent) đối với người lập trỡnh, loại bỏ được hiện tượng phõn mảnh nội vi. Sự phõn đoạn, là thấy được đối với người lập trỡnh, cú khả năng điều khiển cỏc cấu trỳc dữ liệu lớn dần và hỗ trợ chia sẻ và bảo vệ bộ nhớ. Để kết hợp những thuận lợi của cả hai hệ thống phõn trang và phõn đoạn, một số hệ thống được trang bị sự hỗ trợ của cả phần cứng processor và phần mềm hệ điều hành để cài đặt kết hợp cả hai kỹ thuật phõn trang và phõn đoạn.
Trong cỏc hệ thống kết hợp phõn trang và phõn đoạn, khụng gian địa chỉ bộ nhớ của người sử dụng được chia thành cỏc đoạn theo ý muốn của người lập trỡnh, sau đú mỗi đoạn lại được chia thành cỏc trang cú kớch thước cố định bằng nhau. Theo cỏch nhỡn của người lập trỡnh thỡ địa chỉ logic bao gồm một segment number và một segment offset. Theo cỏch nhỡn của hệ thống thỡ segment offset được xem như một page number và page offser cho một trang trong phạm vị một segment được chỉ ra.
Trong hệ thống phõn trang kết hợp phõn đoạn nay, hệ điều hành thiết kế cả bảng trang và bảng đoạn. Hệ điều hành kết hợp với mỗi tiến trỡnh cú một bảng đoạn và nhiều bảng trang, mỗi phần tử trong bảng đoạn chỉ đến một bảng trang, bảng trang này quản lý cỏc trang của đoạn tương ứng. Khi một tiến trỡnh riờng biệt chạy, một thanh ghi giữ địa chỉ bắt đầu của bảng đoạn của tiến trỡnh đú. Trong hệ thống này địa chỉ ảo do processor đua ra phải gồm 3 thành phần: Segment Number, Page Number và Offset Segment number chỉ vào bảng đoạn tiến trỡnh để tỡm bảng trang của segment đú. Sau đú page number được sử dụng để chỉ mục đến bảng trang và tỡm số hiệu khung trang tương ứng, giỏ trị này sẽ được kết hợp với thành phần Offset trong địa chỉ ảo để cú được địa chỉ vật lý thực mong muốn.
Sơ đồ chuyển đổi địa chỉ trong hệ thống phõn trang kết hợp phõn đoạn:
Virtual Memory Seg # Page # Offse t Fram e # Offset
0 Bớt 15 13 1 2 Index 0 = GDT1 = LDT Privilege level (0-3)
Hỡnh 3.13.a: Một Selector (bộ chọn đoạn) Intel 386 Seg Table Ptr
Hỡnh 3.12. Sơ đồ chuyển địa chỉ trong hệ thống Trang - Đoạn MM
Phõn đoạn với phõn trang trong Intel 386:
Trong chế độ bảo vệ của 80286 và trong chế độ ảo của 80386 khụng gian bộ nhớ của hệ thống được chia thành hai loại: khụng gian bộ nhớ toàn cục và khụng gian bộ nhớ cục bộ. Khụng gian nhớ toàn cục được dành cho dữ liệu hệ thống và cỏc tiến trỡnh của hệ điều hành. Mọi chương trỡnh của người sử dụng đều cú thể truy cập dữ liệu và cỏc tiến trỡnh ở khụng gian nhớ toàn cục này. Khụng gian nhớ cục bộ được dành riờng cho cỏc tiến trỡnh, cỏc tỏc vụ riờng biệt. Vỡ vậy, cỏc đoạn mó lệnh và dữ liệu của một tiến trỡnh, một tỏc vụ nằm trong khụng gian nhớ cục bộ sẽ được bảo vệ trỏnh sự truy xuất bất hợp lệ của cỏc tiến trỡnh, cỏc tỏc vụ khỏc trong hệ thống.
Trong kỹ thuật bộ nhớ ảo Intel 80386 sử dụng 2 bảng mụ tả: Bảng mụ tả cục bộ (LDT: Local Descriptor Table), để theo dừi khụng gian nhớ cục bộ và bảng mụ tả toàn cục (GDT: Global Descriptor Table), để theo dừi khụng gian nhớ toàn cục. Mỗi chương trỡnh sở hữu một LDT riờng, nhưng cú một GDT được chia sẻ cho tất cả cỏc chương trỡnh trờn hệ thống. LDT mụ tả cỏc segment cục bộ cho mỗi chương trỡnh, bao gồm code, data, stack, …, trong khi đú GDT mụ tả cỏc segment hệ thống, của chớnh hệ điều hành. Cỏc LDT, GDT được nạp vào bộ nhớ trong quỏ trỡnh hoạt động của hệ thống, Intel 80386 dựng thanh ghi GDTR để ghi địa chỉ cơ sở và giới hạn kớch thước của GDT và thanh ghi LDTR để ghi địa chỉ cơ sở và giới hạn kớch thước của LDT của tỏc vụ hiện tại.
Để truy cập một segment, đầu tiờn một chương trỡnh chạy trờn Intel 386 phải nạp một selector của segment đú vào 1 trong 6 thanh ghi đoạn của Intel 386. Trong quỏ trỡnh thực hiện chương trỡnh thanh ghi CS giữ selector cho code segment và thanh ghi DS giữ selector cho data segment. Mỗi selector dài 16 bớt và được mụ tả như sau:
Trong đú:
bớt này phục vụ cho cụng tỏc bảo vệ bộ nhớ (segment).
• Một bớt tiếp theo cho biết segment là cục bộ hay toàn cục.
• Mười ba bớt cũn lại chỉ đến mục vào (entry) trong LDT hoặc GDT, vỡ thế mỗi bảng mụ tả (Descriptor Table) chỉ lưu giữ được 8k (213) cỏc bộ mụ tả đoạn (segment descriptor). Tức là LDT/GDT cú 213 mục vào/ phần tử.
Tại thời điểm một selector được nạp vào một thanh ghi segment, một descriptor tương ứng được nhận từ bảng LDT hoặc GDT và được lưu trữ trong cỏc thanh ghi microprogram, do đú cú thể được truy cập nhanh. Một descriptor gồm cú 8 byte, gồm cú địa chỉ, kớch thước, và cỏc thụng tin khỏc của segment. Hỡnh sau đõy mụ tả một descriptor trong Intel 386:
32 bớt Base 0 – 15 Limit 0 – 15 0 Base 24-31 G D 0 Limit 16-19 P D PL Ty pe Base 16-23 4
Hỡnh 3.13.b: Một descriptor Code segment (bộ mụ tả đoạn code) Intel 386 Trong đú:
• Base (24 bit): cho biết vị trớ đầu tiờn của segment trong khụng gian địa chỉ tuyến tớnh 4GB. Bộ xử lý ghộp 3 trường địa chỉ cơ sở thành một giỏ trị địa chỉ 32 bớt duy nhất. Trong thực tế trường Base cho phộp mỗi segment bắt đầu tại một vị trớ bất kỳ trong khụng gian địa chỉ tuyến tớnh 32 bit.
• Limit (20 bit): cho biết kớch thước của segment. Bộ xử lý ghộp hai trường kớch thước thành một giỏ trị 20 bớt. Bộ xử lý tớnh kớch thước theo hai cỏch dựa vào giỏ trị của cờ G: G = 0: kớch thước đoạn nằm giữa 1B và 1MB, tớnh theo đơn vị byte. G = 1: kớch thước đoạn nằm giữa 4KB và 4GB, tớnh theo đơn vị 4Kbyte (= 212 = 1page). Như vậy với 20 bớt limit thỡ một segment cú thể cú kớch thước lờn đến 232 byte (212x220).
• Type (5 bit): định nghĩa dạng của đoạn và kiểu truy cập đoạn.
• DPL: Descriptor Privilege Level (2 bit): cho biết mức đặc quyền truy cập của mụ tả segment (cú 4 mức đặc quyền truy cập: 0-3).
• P: Present (1 bit): cho biết segment này đó được nạp vào bộ nhớ chớnh (P = 1) hay chưa được nạp vào bộ nhớ chớnh (P = 0).
• G: Granularity (1 bit): định nghĩa hằng số để nhõn với trường kớch thước. G = 0: kớch thước tớnh theo đơn vị 1byte. G = 1: kớch thước tớnh theo đơn vị 1page (Một page của Intel 386 cú kớch thước cố định là 4Kbyte).
• D: Default Operation Sizze (1 bit): cho biết chiều dài của dũng lệnh. D = 1: vi xử lý mặc định 32 bớt địa chỉ, 32/8 bớt mó lệnh. D = 0: vi xử lý mặc định 16 bớt địa chỉ, 32/8 bớt mó lệnh.
Selector/16 Offset/16
Base Limit other
32 bit linear add +
Bảng mụ tả đoạn
Hỡnh 3.13.c: Chuyển địa chỉ logic (selector:offset) thành địa chỉ tuyến tớnh
Dir: 10 bớt Page: 10 bớt Offset: 12 bớt
Hỡnh 3.13.d : Địa chỉ tuyến tớnh 32 bớt trong Intel 386 địa chỉ tuyến tớnh (linear address) dựa vào bảng mụ tả đoạn.
Nếu sự phõn trang (paging) bị cấm thỡ địa chỉ tuyến tớnh được biờn dịch thành địa chỉ vật lý và gửi đến bộ nhớ để truy xuất dữ liệu. Như vậy khi sự phõn trang bị cấm thỡ trong trườnng hợp này hệ thống chỉ sử dụng sự phõn đoạn (segmentation) đơn thuần, với địa chỉ cơ sở (base address) của segment được cho trong descriptor của nú. Nếu sự phõn trang là được phộp thỡ địa chỉ tuyến tớnh sẽ được biờn dịch thành địa chỉ ảo và được ỏnh xạ thành địa chỉ vật lý bằng cỏch sử dụng cỏc bảng trang.
Mỗi chương trỡnh cú một danh mục bảng trang (page directory) riờng, bao gồm 1024 entry 32 bit, nú được nạp vào bộ nhớ được chỉ bởi một thanh ghi global, mỗi entry trong danh mục bảng trang chỉ đếm một bảng trang (page table), bảng trang cũng chứa 1024 entry 32 bit, một mục vào trong bảng trang lại chỉ đến một khung trang (page frame).
Địa chỉ tuyến tớnh gồm 3 trường: Dir, Page, Offset. Trường Dir: được sử dụng để chỉ mục vào Page Directory để tỡm đến một con trỏ trỏ tới Page Table. Trường Page: được sử dụng để chỉ mục vào Page Table để tỡm địa chỉ vật lý của Page Frame. Trường Offset được cộng với địa chỉ vật lý của Page Framre để cú được địa chỉ vật lý của ụ nhớ chứa dữ liệu cần truy xuất.
Mỗi entry trong page table dài 32 bớt, 20 bớt chứa số hiệu của page frame, cỏc bớt cũn lại là cỏc bớt truy cập, được thiết lập bởi phần cứng cho cỏc lợi ớch của hệ điều hành cỏc bớt bảo vệ và cỏc bớt tiện ớch khỏc. Mỗi page table cú 1024 entry cho cỏc page frame, mỗi page frame cú kớch thước là 4Kb, nờn một page table đơn quản lý được 4Mb bộ nhớ.
Từ địa chỉ tuyến tớnh ở trờn hệ thống sẽ ỏnh xạ thành địa chỉ vật lý, dựa vào page directorry, page table và page frame. Sau đõy là sơ đồ, đơn giản, minh họa sự ỏnh xạ địa chỉ tuyến tớnh thành địa chỉ vật lý:
Dir
page
Off Page directory
địa chỉ vật lý
Hỡnh 3.13.e: Ánh xạ địa chỉ tuyến tớnh thành đại chỉ vật lý Page table
Main memory Page frame
Trờn đõy chỳng ta đó tỡm hiểu về cơ chế bộ nhớ ảo trong Intel 386, bõy giờ chỳng ta sẽ tỡm hiểu về sự bảo vệ trong cơ chế bộ nhớ ảo của nú.
Cụng cụ mà 80386 đưa ra để thực hiện nhiệm vụ bảo vệ khụng gian nhớ chứa cỏc tiến trỡnh và chứa chớnh hệ điều hành trờn bộ nhớ chớnh là: cỏc mức/ cấp (level) đặc quyền truy cập hay mức ưu tiờn được yờu cầu (RPL: Request Privilege Level). Từ vi xử lý 80286 cỏc vi xử lý đó đưa ra 4 mức ưu tiờn từ 0 đến 3, được ghi tại trường Privilege Level của thành phần địa chỉ selector (hỡnh 3.13.a). Mức 0 cú độ ưu tiờn cao nhất, mức 3 cú độ ưu tiờn thấp nhất. Cỏc segment trờn bộ nhớ cũng được gỏn một mức ưu tiờn tương tự, được ghi tại trường DPL trong bộ mụ tả đoạn trong bảng mụ tả đoạn (hỡnh 3.13.b).
Cỏc ứng dụng cú mức ưu tiờn cao hơn sẽ được quyền truy cập mó lệnh, dữ liệu tại cỏc đoạn nhớ cú mức ưu tiờn thấp hơn. Cỏc ứng dụng cú mức ưu tiờn thấp hơn sẽ khụng được truy cập mó lệnh, dữ liệu tại cỏc đoạn nhớ cú mức ưu tiờn cao hơn, trong thực tế thỡ điều này cũng cú thể nếu cỏc ứng dụng biết cỏch vựơt qua cỏc Cổng (Cổng và nguyờn tắc hoạt động của Cổng cỏc bạn cú thể tỡm đọc ở một tài liệu nào đú viết về cỏc vi xử lý của họ Intel). Bốn mức ưu tiờn mà 80386 đưa ra là:
• Mức 0: là mức của thành phần kernel của hệ điều hành. Kernel của hệ điều hành được nạp tại segment cú mức đặc quyền truy cập là 0.
• Mức 1: là mức của phần mềm hệ thống quản lý thiết bị và cổng phần cứng. Segment nhớ được gỏn mức này chứa cỏc chương trỡnh hệ thống của BIOS và DOS/ Windows.
• Mức 2: chứa cỏc thủ tục thư viện, cú thể chia sẻ cho nhiều chương trỡnh đang chạy. Chương trỡnh của người sử dụng cú thể gọi cỏc cỏc thủ tục và đọc dữ liệu ở mức này nhưng khụng thể modify nú.
PCTPCT PCT Main Memory Main Memory P0 P1 P2 P3
Cỏc page của tiến trỡnh (a) (b) 0 1 2 3 5 4 0 1 2 3 5 4 0 1 2 3 0 1 2 3 P2 P0 P1 P3 3 0 5 2 P0 P2 5 2 i v v i
Hỡnh 3.14: Sự khỏc nhau giữa phõn trang đơn và bộ nhớ ảo phõn trang. a: nạp tất cả cỏc page của tiến trỡnh vào bộ nhớ. b: chỉ nạp page 0 và page 2 vào bộ nhớ.
Valid/ Invalid
Frame#
Frame#
cú độ ưu tiờn thấp nhất.
Khi chương trỡnh cần truy xuất vào một đoạn nhớ nào đú trờn bộ nhớ thỡ vi xử lý sẽ dựa vào giỏ trị mức ưu tiờn tại RPL và DPL để quyết định cú cho phộp chương trỡnh truy xuất vào đoạn nhớ hay khụng. Trong trường hợp này Intel 80386 cụng nhận ba mức ưu tiờn sau đõy:
• Mức ưu tiờn hiện tại CPL (Current Privilege Level): là mức ưu tiờn của chương trỡnh hay tỏc vụ đang chạy. CPL được lưu trữ tại bit 0 và bit 1 của cỏc thanh ghi đoạn CS và SS. Thụng thường giỏ trị của CPL bằng giỏ trị mức ưu tiờn của đoạn mó lệnh chứa chương trỡnh đang chạy. Giỏ trị của CPL cú thể bị thay đổi nếu điều khiển chương trỡnh được chuyển đến một đoạn mó lệnh cú độ ưu tiờn khỏc.
• Mức ưu tiờn bộ mụ tả DPL (Descriptor Privilege Level): là mức ưu tiờn của một đoạn. DPL được lưu trữ tại trường DPL của cỏc bộ mụ tả đoạn. Nếu chương trỡnh đang chạy tỡm cỏch truy cập một đoạn nhớ, vi xử lý sẽ so sỏnh DPL với CPL và RPL của bộ chọn đoạn.
• Mức ưu tiờn được yờu cầu RPL (Peqest Privilege Level): là giỏ trị được ghi tại bớt 0 và bớt 1 trong bộ chọn đoạn. Vi xử lý sẽ so sỏnh RPL với CPL để kiểm tra quyền truy cập vào một đoạn. Khi CPL cú giỏ trị cho phộp chương trỡnh truy cập một đoạn, nhưng giỏ trị trong RPL khụng cú mức ưu tiờn tương ứng thỡ chương trỡnh cũng khụng được phộp tuy cập đoạn. Điều này cú nghĩa là nếu RPL của bộ chọn đoạn cú giỏ trị lớn hơn CPL, thỡ RPL sẽ ghi chồng lờn CPL.
Khi một chương trỡnh cú yờu cầu truy cập vào một đoạn nhớ nào đú, thỡ bộ phận quản lý bộ nhớ của vi xử lý sẽ so sỏnh mức ưu tiờn ghi trong RPL với mức ưu tiờn của đoạn được ghi trong DPL, nếu RPL lớn hoăn hoặc bằng DPL thỡ vi xử lý cho phộp chương trỡnh truy cập vựng nhớ mà nú yờu cầu, nếu ngược lại thỡ vi xử lý