Descriptor trong Intel 386:

Một phần của tài liệu Chương III QUẢN lý bộ NHỚ (Trang 27 - 34)

32 bớt

Base 0 – 15 Limit 0 – 15 0

Base 24-31 G D 0 Limit 16-19 P DPL Type 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.

Sau đõy là sơ đồ chuyển địa chỉ gồm 2 thành phần selector và offset thành đị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

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

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ý:

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ú.

• Mức 3: chương trỡnh của người sử dụng chạy tại mức này, đõy là mức cú

Chương III: Quản lý Bộ nhớ 121

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

độ ư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ý khụng trao quyền truy cập vựng nhớ cho chương trỡnh, đồng thời phỏt ra một ngắt thụng bỏo cú sự vi phạm quyền truy cập vựng nhớ. Đõy chớnh là cơ chế bảo vệ bộ nhớ của Intel 80386.

III.3.2.d. Bộ nhớ ảo và lỗi trang (page fault)

Trước khi tiếp tục tỡm hiểu về sự cài đặt bộ nhớ ảo và hiện tượng lỗi trang trong bộ nhớ ảo, chỳng ta xem lại sơ đồ sau, hỡnh 3.14, để thấy được sự khỏc nhau giữa kỹ thuật phõn trang đơn và kỹ thuật bộ nhớ ảo theo kiểu phõn trang.

Sơ đồ này cho thấy: cú một tiến trỡnh gồm cú 4 trang P0, P1, P2, P3 cần được nạp vào bộ nhớ chớnh, khụng gian địa chỉ bộ nhớ chớnh gồm cú 6 phõn trang (paging), cũn được gọi là khung trang (frame), cũn trống:

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. Valid/ Invalid

Frame#

• Trường hợp a, là trường hợp phõn trang đơn: trong trường hợp này tất cả 4 page của tiến trỡnh đều được nạp vào bộ nhớ. Rừ ràng sẽ là lóng phớ bộ nhớ nếu biết rằng tiến trỡnh này chỉ cần nạp vào bộ nhớ 2 trang P0, P2 là tiến trỡnh cú thể khởi tạo và bắt đầu hoạt động được. Và trong trường hợp này nếu bộ nhớ chỉ cũn 3 frame cũn trống thỡ tiến trỡnh cũng sẽ khụng nạp vào bộ nhớ được. PCT trong trường hợp này cho biết cỏc page của tiến trỡnh được nạp vào cỏc frame trờn bộ nhớ chớnh.

• Trường hợp b, là trường hợp bộ nhớ ảo sử dụng kỹ thuật phõn trang: trong trường hợp này hệ điều hành khụng nạp tất cả cỏc page của tiến trỡnh vào bộ nhớ mà chỉ nạp 2 page cần thiết ban đầu để tiến trỡnh cú thể khởi tạo và bắt đầu hoạt động được, mặc dầu trờn bộ nhớ chớnh cũn một vài frame cũn trống. Rừ ràng trong trường hợp này hệ điều hành đó tiết kiệm được khụng gian bộ nhớ chớnh và nhớ đú mà hệ điều hành cú thể nạp vào bộ nhớ nhiều tiến trỡnh hơn và cho phộp cỏc tiến trỡnh này hoạt động đồng thời với nhau. Cỏc page của tiến trỡnh chưa được nạp vào bộ nhớ sẽ được lưu trữ tại một khụng gian đặc biệt trờn đĩa (thường là trờn HDD), khụng gian đĩa này được gọi là khụng gian bộ nhớ ảo, một cỏch chớnh xỏc thỡ khụng gian bộ nhớ ảo này chứa tất cả cỏc page của một tiến trỡnh. Như vậy PCT trong trường hợp này phải cú thờm một trường mới, trường này thường được gọi là trường Present. Trường Present chỉ cần một bớt, nú cho biết page tương ứng là đó được nạp vào bộ nhớ chớnh (= 1), hay cũn nằm trờn đĩa (= 0). Trong mụ hỡnh bộ nhớ ảo khi cần truy xuất đến một page của tiến trỡnh thỡ trước hết hệ thống phải kiểm tra bớt present tại phần tử tương ứng với page cần truy xuất trong PCT, để biết được page cần truy xuất đó được nạp vào bộ nhớ hay chưa. Trường hợp hệ thống cần truy xuất đến một page của tiến trỡnh mà page đú đó được nạp vào bộ nhớ chớnh, được gọi là truy xuất hợp lệ (v: valid). Trường hợp hệ thống cần truy xuất đến một page của tiến trỡnh mà page đú chưa được nạp vào bộ nhớ chớnh, được gọi là truy xuất bất hợp lệ (i: invalid). Khi hệ thống truy xuất đến một trang của tiến trỡnh mà trang đú khụng thuộc phạm vi khụng gian địa chỉ của tiến trỡnh cũng được gọi là truy xuất bất hợp lệ.

Khi hệ thống truy xuất đến một page được đỏnh dấu là bất hợp lệ thỡ sẽ phỏt sinh một lỗi trang. Như vậy lỗi trang là hiện tượng hệ thụng cần truy xuất đến một page của

tiến trỡnh mà trang này chưa được nạp vào bộ nhớ, hay khụng thuộc khụng gian địa chỉ của tiến trỡnh. Ở đõy ta chỉ xột lỗi trang của trường hợp: Page cần truy xuất chưa được nạp vào bộ nhớ chớnh.

Khi nhận được tớn hiệu lỗi trang, hệ điều hành phải tạm dừng tiến trỡnh hiện tại để tiến hành việc xử lý lỗi trang. Khi xử lý lỗi trang hệ điều hành cú thể gặp một trong hai tỡnh huống sau:

• Hệ thống cũn frame trống (a): Hệ điều hành sẽ thực hiện cỏc bước sau: 1. Tỡm vị trớ của page cần truy xuất trờn đĩa.

2. Nạp page vừa tỡm thấy vào bộ nhớ chớnh. 3. Cập nhật lại bảng trang (PCT) tiến trỡnh.

4. Tỏi kớch hoạt tiến trỡnh để tiến trỡnh tiếp tục hoạt động. • Hệ thống khụng cũn frame trống (b):

1. Tỡm vị trớ của page cần truy xuất trờn đĩa.

2. Tỡm một page khụng hoạt động hoặc khụng thực sự cần thiết tại thời điểm hiện tại để swap out nú ra đĩa, lấy frame trống đú để nạp page mà hệ thống vừa cần truy xuất. Page bị swap out sẽ được hệ điều hành swap in trở lại bộ nhớ tại một thời điểm thớch hợp sau này.

3. Cập nhật PCT của tiến trỡnh cú page vừa bị swap out.

4. Nạp trang vừa tỡm thấy ở trờn (bước 1) vào frame trống ở trờn (bước 2). 5. Cập nhật lại bảng trang (PCT) của tiến trỡnh.

6. Tỏi kớch hoạt tiến trỡnh để tiến trỡnh tiếp tục hoạt động.

Xử lý lỗi trang là một trong những nhiệm vụ quan trọng và phức tạp của hệ thống và hệ điều hành. Để xử lý lỗi trang hệ thống phải tạm dừng cỏc thao tỏc hiện tại, trong trường hợp này hệ thống phải lưu lại cỏc thụng tin cần thiết như: con trỏ lệnh, nội dung của cỏc thanh ghi, cỏc khụng gian địa chỉ bộ nhớ, …, cỏc thụng tin này là cơ sở để hệ thống tỏi kớch hoạt tiến trỡnh bị tạm dừng trước đú khi nú đó hoàn thành việc xử lý lỗi trang.

 Khi xử lý lỗi trang, trong trường hợp hệ thống khụng cũn frame trống hệ điều hành phải chỳ ý đến cỏc vấn đề sau:

Nờn chọn page nào trong số cỏc page trờn bộ nhớ chớnh để swap out: Về vấn đề này chỳng ta đó biết hệ điều hành sẽ ỏp dụng một thuật toỏn thay page cụ thể nào đú, nhưng ở đõy cần chỳ ý thờm rằng đối tượng của cỏc thuật toỏn thay page là chỉ cỏc page của tiến trỡnh xảy ra lỗi page, hay tất cả cỏc page của cỏc tiến trỡnh đang cú trờn bộ nhớ chớnh. Tức là, nờn chọn page của tiến trỡnh xảy ra lỗi trang để thay thế (thay thế cục bộ), hay chọn một page của tiến trỡnh khỏc để thay thế (thay thế toàn cục). Nếu chọn page của tiến trỡnh xảy ra lỗi trang thỡ sẽ đơn giản hơn với hệ điều hành và khụng ảnh hưởng đến cỏc tiến trỡnh khỏc, nhưng cỏch này cú thể làm cho tiến trỡnh hiện tại lại tiếp tục xảy ra lỗi trang ngay sau khi hệ điều hành vừa xử lý lỗi trang cho nú, vỡ page mà hệ điều hành vừa chọn để đưa ra (swap out) lại là page cần truy xuất ở thời điểm tiếp theo. Nếu chọn page của tiến trỡnh khỏc thỡ tiến trỡnh hiện tại sẽ ớt cú nguy cơ xảy ra lỗi trang

ngay sau đú hơn, nhưng cỏch này sẽ phức tạp hơn cho hệ điều hành, vỡ hệ điều hành phải kiểm soỏt lỗi trang của nhiều tiến trỡnh khỏc trong hệ thống, và hệ điều hành khú cú thể dự đoỏn được nguy cơ xảy ra lỗi trang của cỏc tiến trỡnh trong hệ thống. Trong trường hợp này cú thể lỗi trang sẽ lan truyền đến nhiều tiến trỡnh khỏc trong hệ thống, khi đú việc xử lý lỗi trang của hệ điều hành sẽ phức tạp hơn rất nhiều. Đa số cỏc hệ điều hành

Một phần của tài liệu Chương III QUẢN lý bộ NHỚ (Trang 27 - 34)