Giáo trình Hệ điều hành - Chương 3: Quản lý bộ nhớ

Một trong các phương tiện điều hành quan trọng là bộ nhớ chính. Quản lý tài  nguyên bộ nhớ là một đề tại hữu ích và cấp bách, nó quyết định khả năng hiện hữu của một hệ thống máy tính. Theo đó, chúng ta phân biệt ba phạm vi, mà trong đó, các chiến lược khác nhau được sử dụng để quản lý bộ nhớ.

  • Các chương trình người sử dụng:

Nhiệm vụ chính là bao gồm: việc quản lý một cách tối ưu không gian lưu trữ của tiến trình xung quanh các yêu cầu lưu trữ đặc biệt của chương trình. Điều này được thực hiện nhờ các bộ phận chương trình (thí dụ điều hành bộ nhớ) hay nhờ các chương trình thu gom rác.

doc 39 trang xuanthi 30/12/2022 1020
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Hệ điều hành - Chương 3: Quản lý bộ nhớ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • docgiao_trinh_he_dieu_hanh_chuong_3_quan_ly_bo_nho.doc

Nội dung text: Giáo trình Hệ điều hành - Chương 3: Quản lý bộ nhớ

  1. thế bằng một việc gọi một thủ tục (procedure call). Điều đó làm lưu ý tới những vòng lặp lớn. Tốt hơn, những vòng lặp này cần thiết được phân chia thành nhiều vòng lặp nhỏ hơn. Thuật toán có thể được thay đổi một cách thích hợp, thí dụ, phép nhân các ma trận có thể được phân chia, đầu tiên, nhân theo hàng, khi đó, ma trận được lưu trữ theo hàng. Khi nhân theo cột, thì các trang được thay đổi theo cột. Tập working set và mô hình tần suất thay đổi trang: Hệ điều hành cần được thực hiện một cái gì đó để phòng tránh hiệu quả thrashing effect. Khi đó một chiến lược được nêu ra: Chúng ta có thể xác định các tập working set đối với mỗi tiến trình với sự trợ giúp của phép thống kê thời gian, thí dụ các Bits R và M (nói ở mục 3.3.5). Khi đó chúng ta phải quan tâm rằng, số lượng các tiến trình được thu nạp sao cho đáp ứng việc bộ nhớ chính tồn tại vừa đủ cho các tập working set. Lúc đó, kiểu làm này được gọi là mô hình tập công tác (working set model). Các bộ nhớ BS2000 (của hảng Siemens) và CP37 (của hảng IBM) thích hợp cho trường hợp này. Về vấn đề này còn có một chiến lược khác được quan tâm: Nếu F là số đo các sự thay thế trang trên một đơn vị thời gian, được gọi là tỷ phần tráo đổi trang; cũng như thời gian giữa hai lần thay đổi trang vượt lên hay lui lại một giá trị F 0; lúc đó người ta gọi là tần suất thay đổi trang, do đó, các tiến trình được đặt yên tĩnh trong chốc lát. Nếu điều đó xảy ra thì có thể có nhiều tiến trình được hoạt động. Các mô hình này được W.W. Chu chỉ ra (1975), cho thấy, nó thì tốt hơn so với mô hình working set modell. • Mô hình bậc sử dụng: Một ý tưởng khác được nêu lên là cần thiết phải điều chỉnh trực tiếp khả năng của hệ thống. Về điều này, chúng ta nghiên cứu điều kiện xuất ra một cách bình thường các tiến trình. Mỗi khi chúng ta nhận được các tiến trình, lúc đó, sức chịu tải của CPU thì cao hơn, kéo dài cho tới khi, thời gian đợi tw lớn hơn thời gian duy trì trang ts. Trong trường hợp này, các trang bị ùn đọng khi tiến hành thiết lập sự trao đổi trang. Chúng ta có thể mô hình hóa điều đó như là một bộ vi xử lý trao đổi trang CPU và chúng ta có thể mô hình hóa sự chịu tải của hệ thống L(n,t) như là một tổng của hai tải ηCPU và ηPPU . L(n,t) = Wt.ηCPU + W2. ηPPU Trong đó, L(n,t) còn gọi bậc sử dụng; W1. W2 là các trọng số Mô hình được M. Badel đưa ra (1975), chỉ ra rằng, mô hình này chứa đựng nội dung: Đầu tiên tăng theo một đường dốc và sau đó giảm xuống nhanh tới bậc sử dụng L(n,t) khi vượt qua số lượng các tiến trình tới hạn. Khi nghiên cứu sự biến đổi các thông số tiến trình ở mục 2.2.2, ở đây chúng ta thấy L(n,t) được xác định từ các đại lượng đo đạc. Nếu L(n,t) giảm, do đó, số lượng các tiến trình phải bị thu nhỏ;ngược lại, chúng phải được gia tăng. Ngay cả một phản ứng làm trễ cũng có thể dẫn tới việc phòng tránh một sự thay đổi cực nhanh. • Chiến lược cục bộ và toàn cục:
  2. Bên cạnh vấn đề chính như giới hạn không gian bộ nhớ phải được phân chia khi có tranh chấp tiến trình, cũng còn nhiều vấn đề khác, mà chúng có quan hệ chặt chẽ với việc điều hành trang. • Giới hạn lệnh: Ngắt lỗi trang, hoạt động được nhờ việc định địa chỉ phần cứng, mà nó dẫn tới sự đình chỉ ngay lệnh máy đang được thực hiện, nếu địa chỉ đích không ở trong bộ nhớ. Nếu với cơ chế thay thế trang, trang mong muốn được tồn tại trong bộ nhớ chính, do đó, lệnh này phải được thực hiện một cách mới mẻ. Tuy nhiên, về điều này, hệ điều hành phải nhận biết: Có ở đâu một lệnh tồn tại với nhiều Bytes (?), và không chỉ vậy, do đâu lệnh đã tham chiếu một địa chỉ không thuật lời (?). Từ lý do này, lệnh cần thiết được dẫn tới một nhân tử, nếu lệnh bị bẻ gãy thì nó không còn tác dụng nào cả, và nếu không, lệnh cần thiết được dẫn tới một nhân tử khác, khi đó, địa chỉ ban đầu của nó được nạp vào thanh ghi. Nếu trường hợp nói trên không xảy ra, hệ điều hành phải khai khẩn tận lực các dữ liệu cần thiết từ một ngăn xếp mã microcode hay các biến khác, do đó, một sự thay thế trang được làm trễ là không cần thiết. • Trang xuất nhập và trang chia xẻ (I/O pages and shared pages) Vấn đề tiếp theo, đó là việc xử lý các trang đặc biệt. Nếu đối với một tiến trình, một sự trao đổi dữ liệu I/O được đụng chạm tới và một tiến trình khác nhận được bộ vi xử lý, do đó, điều có thể là, trang I/O của một tiến trình chờ đợi được nạp vào không gian của một sự phân bổ bộ nhớ toàn cục và trang vật lý được trao cho một cách mới mẻ. Nếu sau khi thay đổi trang, bộ vi xử lý I/O nhận được sự điều khiển, do đó, trang sai (page fault) được sử dụng cho I/O; nếu rủi ro, nó được sử dụng cho cả hai tiến trình. Trong trường hợp này, việc khắc phục tạo nên một dấu hiệu của các trang I/O và nó thực hiện việc loại bỏ trang đánh dấu khi thay thế trang. Một vấn đề nữa về các trang, đó là các trang, mà chúng được sử dụng trong nhiều tiến trình (thí dụ: shared pages), hoặc trang mã của một thư viện chung (thí dụ thư viện ngôn ngữ C). Những trang này có ý nghĩa đáng kể, chúng không cho phép nạp cùng với một tiến trình hay tại thời điểm kết thúc chúng được phép đan nhau, khi chúng được một tiến trình khác tham chiếu. Ngay tại các thuật toán thay thế trang, điều đó phải được quan tâm tới. • Paging demon (lập trang ma): Công việc của các thuật toán thay thế trang có thể trở nên hiệu suất hơn, nếu người ta xem xét mã (code) như là một tiến trình lập trang ma (paging demon) và người ta để cho nó xảy ra ở trạng thái không tải một cách đều đặn. Theo đó, những yêu cầu không chỉ được làm thích hợp, mà còn có thể được dọn dẹp cho một không gian trống; khi đó những thông tin thống kê được trở nên bức bách và dịch vụ hệ thống được thực hiện, thí dụ như việc điều hành chiến lược page out pool được nói trước đó. 3.3.7. Chiến lược thay thế trang ở hệ điều hành Unix: Ở trong Unix, có hai cơ chế được trợ giúp. Đó là swapping và paging (xếp chồng và lập trang). Việc thu xếp bộ nhớ trực tiếp của cơ chế swapping luôn luôn được sử dụng, nhất là, nó được dùng khi thời gian truy cập nhanh. Vì vậy, ở việc sản sinh một tiến trình, thì một sự đặt
  3. lược, mà nó chỉ giới hạn cục bộ trên một tiến trình riêng lẻ, để xác định một cách tích cực sự phê phán của người sử dụng về hệ điều hành. Với một tiến trình khác, thuật toán đơn giản để thực thi cơ chế thay thế trang và thuật toán FIFO có thể được thực hiện với tiêu phí thời gian ít nhất, do đó, trong trường hợp bình thường, thời gian thực hiện các chiến lược sẽ giảm đáng kể. Nhờ thế, lỗi cũng được hạn chế; lỗi thường xuất hiện khi nạp trang; do đó, đầu tiên, các trang được chuyển đi bởi chiến lược page out pool ở trong bộ nhớ chính; từ đó, chúng dễ dàng được nhận trở lại. Tuy nhiên, khi có ít bộ nhớ ở trong hệ thống; do đó, một cơ chế thứ hai có hiệu lực gọi là cơ chế xén tỉa tự động tập công tác. Với cơ chế này, tất cả các tiến trình được dẫn qua và được kiểm tra, liệu chúng có sử dụng nhiều trang không, khi mã các trang này là một số tối thiểu cố định. Số các trang tối thiểu này có thể được điều chỉnh trong khoảng giới hạn xác định của người quản lý hệ thống. Con số hiện hành của các trang được sử dụng cho một tiến trình thì được biểu thị là tập công tác ở trong Windows NT (ngược lại với định nghĩa nêu ở trên). Nếu tiến trình sử dụng quá nhiều trang trong tập công tác tối thiểu; do đó, các trang sẽ được nạp và tập công tác bị thu hẹp. Bây giờ, nếu một tiến trình chỉ có một số tối thiểu các trang, nó sẽ phát sinh lỗi trang và không gian bộ nhớ chính lại được tồn tại trở lại (được giải phóng), do đó, độ lớn tập working set lại được gia tăng và tạo cho tiến trình có nhiều không gian bộ nhớ. Ở việc sản sinh tiến trình, một phương pháp có tên clustering methode được áp dụng: một số trang được dẫn đi trước đó và sau đó bổ sung cho các trang còn thiếu, với mục đích tiếp tục làm giảm xác suất lỗi trang. Điều đó phù hợp với một chiều dài trang có kích cở hiệu quả cao. Một biện pháp tiếp theo là tạo lập việc áp dụng phương pháp copy on write, mà phương pháp này thì đặc biệt hiệu nghiệm khi sản sinh ra một tiến trình mới ở hệ thống con POSIX với hàm fork(). Vì các trang của một tiến trình cha được làm dấu chỉ với Bit theo phương pháp copy on write và sau đó tiến trình con thực hiện nhờ một hàm gọi hệ thống exec() và chịu tải bởi một mã chương trình khác, do đó, các trang của tiến trình cha không cần thiết phải sao chép lại và vì thế, tiết kiệm được thời gian. Ở các files thư viện kết nối động (Dynamic Link Library- DLL), một cơ chế tương tự cũng được sử dụng, khi đó các files này chỉ được đưa tới một lần. Các dữ liệu tĩnh (static data) của chúng được bảo về nhờ trạng thái copy on write. Bây giờ, nếu tiến trình khác nhau được truy cập và các dữ liệu được thay đổi; do đó, các dữ liệu được sao chép trên cung dữ liệu riêng lẻ (private data segment). 3.4. Sự phân cung (segmention) Cho tới bây giờ, sự nhìn nhậ của chúng ta về nộ nhớ ảo được mô hình hóa là một trường liện tục đồng đều. Thực chất, hình dạng bộ nhớ này không được người lập trình sử dụng. Vì lẽ, có những đoạn cung dữ liệu (datasegments) luôn luôn quay trở lại dạng các ngăn xếp hay các xấp (stacks or heaps), nghĩa là chúng thay đổi một cách năng động, và do đó, chúng cũng cần dùng với nhau một đoạn trong không gian địa chỉ. Trong hình 3.28 (a) chỉ ra một cách bao quát cấu trúc logic sự dẫn giải bộ nhớ của một chương trình ở trong Unix. Trong hình 3.28 (b) chỉ ra một sự phân chia bộ nhớ đối với một trình biên dịch. Ở đây, vấn đề dẫn tới là, mỗi đoạn cung của các dữ liệu công tác có thể thay đổi và thu hẹp ở trong phạm vi,mà khi đó đang thực
  4. trình A thì rất đơn giản: Ở tại thanh ghi LDT, người ta phải nạp bộ chỉ thị thời gian khác tới bảng LDT của tiến trình A, đó là tất cả. Ưu điểm của bộ nhớ ảo phân đoạn là ở chỗ có một sự định vị địa chỉ cũng như việc quản lý bộ nhớ rất hiệu nghiệm. Các địa chỉ cơ sở của cung đoạn thì cố định, và với cái đó, nếu các thanh ghi tồn tại ở trong CPU, thì bậc đầu tiên của việc chuyển đổi địa chỉ xảy ra rất nhanh. Nếu một cung đoạn được cấu trúc đồng đều (tức là không có lỗ hổng địa chỉ), do đó, mô hình khảo sát được cải tiến: Mỗi khi một cung đoạn bộ nhớ (memory segment) tăng hay giảm, thì ở tại các bảng nhiều bậc, việc sản sinh hay loại bỏ các bảng bổ sung xảy ra rất năng động. Tuy nhiên, phương cách kết hợp giữa các cung đoạn và các trang thực ra rất cần thiết, vì cả hai thông tin quản lý (về bảng cung đoạn và bảng trang) luôn luôn được xuyên suốt, được cải tiến và được sử dụng. Từ lý do này, ở các bộ vi xử lý ngày nay, các thanh ghi địa chỉ và các bộ MMU đã tiếp nhận một vị trí quan trọng bên cạnh khả năng tính toán thuần khiết: Chúng quyết định tốc độ xử lý các chương trình. 3.5. Bộ nhớ truy cập nhanh (Cache) Ưu điểm của cấu trúc một CPU tốc độ nhanh dẫn tới một cách đúng đắn cho sự sinh lợi, khi bộ nhớ chính không chỉ có dung lượng lớn mà còn phải có tốc độ nhanh. Vì thế ở đây, các bộ nhớ truy cập năng động DRAM (dynamic random acess memory) không thuộc loại bộ nhớ ta muốn đề cập trong trường hợp này. Tuy nhiên, để thay thế những bộ nhớ đắt tiền, người ta có thể sử dụng bộ nhớ giá cả tương đối lẻ với lưu ý: mã chương trình (programcode) thường chỉ ra quan hệ cục bộ với các dữ liệu và với các chiều rộng bước nhảy. Tính chất cục bộ này của các chương trình tạo điều kiện để những đoạn chương trình nhỏ được sao chép vào bộ nhớ truy cập nhanh (cache) và do đó đạt được tốc độ xử lý cao. Để làm đầy cache, khả năng đơn giản nhất là, thay vì lựa chọn nội dung của một địa chỉ, người ta có thể lựa chọn nội dùng của nhiều địa chỉ tương tự nhau ở trong bộ nhớ cache, trước khi các nội dung được yêu cầu hiển thị. Việc vận chuyển dữ liệu bằng bộ nhớ DRAM thì tương đối chậm và chỉ được thực hiện qua một lần. Ở bộ nhớ cache, việc vận chuyển một khối dữ liệu (chẳng hạn 4 Bytes) thì nhanh hơn nhờ một bus, gọi là pipline cache bus. Loại bộ nhớ cache này làm gia tăng khả năng của bộ vi xử lý lên khoảng 20%. Hình 3.31 chỉ ra sơ đồ vị trí sử dụng bộ nhớ cache. Hình 3.31. Nếu bộ nhớ cache chứa đựng nhiều dữ liệu, do đó điều dễ nhận thấy, lúc đó các dữ liệu không hiện hành hay chưa cần dùng được cho trôi qua. Một dị bản tổng hợp của cache chứa đựng các cơ chế bổ sung để thực hiện nội dung của cache. Vì thế, tất cả việc dò hỏi địa chỉ của CPU được cache xử lý đầu tiên; khi đó, đối với các lệnh và các dữ liệu, bộ nhớ cache bị tách chia (thành cache lệnh và cache dữ liệu) được sử dụng. Nếu nội dung của địa chỉ này được tồn tại ở trong cache, do đó, cache được chọn một cách trực tiếp và nhanh chóng, mà không phải chọn bộ nhớ chính. Nếu địa chỉ không tồn tại, do đó, cache phải được nạp lại từ một bộ nhớ chính. Hình 3.32 chỉ ra sơ đồ nguyên lý kết nối cache ở trong máy tính.
  5. phải tự điều chỉnh. Nghĩa là, muốn nâng cao hiệu dụng của cache phải được lưu ý tới việc dự kiến các hoạt động của cache; vì vậy, ta thấy, các hiệu dụng này không phải là không có điều gì đối với các phần mềm. Ví dụ, trạng thái của bộ nhớ chia sẻ ở trong hệ thống đa vi xử lý không phải các thiết bị viết qua hay sao chép lùi luôn luôn tồn tại. Bấy giờ sự trao đổi thông tin (thí dụ giữa một trình gỡ rối và một tiến trình cảnh giới) nhờ bộ nhớ chia sẻ có quan tâm tới điều đó và sau khi hoạt động, ở trong mỗi lập trình, các dữ liệu của tiến trình phải tìm kiếm và được điều chỉnh mới. Ở đây, các cơ chế được thực thi bằng các phần cứng đã tạo nên sự trợ giúp quan trọng. Thí dụ về chiến lược MESI của hảng Intel: Ở các hệ thống đa vi xử lý đối xứng, đối với việc truy cập đồng thời các bộ vi xử lý, tỷ phần của bus hệ thống rất đắt, vì vậy nó không được dùng tới. Ở đây, hạn chế này được bù đắp bằng cách: ở trong bộ nhớ cache có xử lý đặc biệt, các dữ liệu của người sử dụng được giữ gìn và được xử lý cục bộ. Đối với các bộ nhớ cache có tồn tại các dữ liệu toàn cục, chúng được giải quyết theo chiến lược MESI của hảng Intel như sau: Ở trong cache, mỗi đơn vị bộ nhớ có một từ trạng thái (statusword), từ này biểu thị cho 4 bậc thuận tiện M (modified), E (execlusive), S (shared) và I (invalid). Mỗi cache chứa đựng một bộ cảnh giới (snooper) dùng để kiểm tra số liệu ở trong cache, các số liệu sẽ được bộ vi xử lý khác làm thay đổi ở trong bộ nhớ chia sẻ. Đầu tiên, các yêu cầu về số liệu được kiểm tra, liệu số liệu đã điều chỉnh đúng chưa (?). Nếu chưa đúng, nó phải được bộ nhớ toàn cục tu chỉnh mới. Nếu đúng rồi, thì thôi. Điều quan trọng là, trước hết, phần mềm không nhận theo cái đó, do đó, đối với hệ điều hành cũng như đối với các chương trình của người sử dụng, các bộ nhớ cache toàn cục hoạt động một cách tốt đẹp. Ngoài ra, còn có một số chiến lược về bộ nhớ cache nữa mà ở đây chưa cần thiết phải đề cập. Vấn đề bộ nhớ cache rất tức thời không chỉ đối với các hệ thống đa vi xử lý, mà còn cấp bách cả đối với hệ thống mạng máy tính. Ở đó có rất nhiều bộ đệm (buffer), chúng tác dụng như những bộ nhớ cache. Vì vậy, nếu không được quan tâm bởi hệ thống vận chuyển thông tin hay bởi hệ điều hành, chúng sẽ dẫn tới sự không bện vững của dữ liệu một cách dễ dàng. 3.6. Cơ chế bảo vệ bộ nhớ Một trong các nhiệm vụ quan trọng là làm cô lập các chương trình với nhau để loại trừ các lỗi, các tính chất sai trái và các xung đột cố ý giữa các người sử dụng cũng như giữa các tiến trình của chúng. Ở mô hình một bộ nhớ các cung đoạn ảo, chúng ta có trong tay nhiều phương tiện bảo vệ khác nhau. Ưu điểm của việc định vị địa chỉ bộ nhớ ảo cũng như của việc định vị địa chỉ bộ nhớ vật lý đem lại cho chúng ta nhiều khả năng để bảo vệ bộ nhớ: • Phải đạt được một sự cách lý hoàn toàn của không gian địa chỉ của các tiến trình với nhau. Vì mỗi tiến trình có không gian địa chỉ như nhau nhưng bộ nhớ vật lý thì khác nhau, tức là các tiến trình không chồng chéo lên nhau và cũng không ảnh hưởng lẫn nhau. • Phải sắp xếp luật truy cập xác định mỗi khoảng bộ nhớ (có thể đọc, có thể viết và có thể thực hiện) một cách kiên cố và điều đó phải được bảo đảm bởi các phần cứng. Thí dụ, nếu
  6. exception). Điều đó tạo cho hệ thống con hay cho một tiến trình một trường năng động, mà sau khi trang được đánh dấu thì các phần tử của trường được truy cập. Nghĩa là, sau khi lỗi phân đoạn qua đi, tiến trình truy cập trang trở lại một cách bình thường. Một thí dụ hay về điều đó là cơ cấu để điều chỉnh độ lớn của stack. Độ lớn này được gia tăng với sự trợ giúp của một ngoại lệ cảnh giới trang một cách năng động khi có nhu cầu. • No access (không truy cập): Việc đánh dấu trang sẽ được ngăn ngừa, khi người ta truy cập các trang bị cấm hay các trang tồn tại.Tình trạng này được áp dụng hầu hết để nhận được sự trợ giúp hay để thu gom lỗi khi gỡ rối (debugging). • Copy on write (copy khi viết): Cơ cấu để giải quyết vấn đề copy on write được giải thích ở cuối mục 3.3.6; cơ cấu này có thể được sử dụng để bảo vệ các khoảng bộ nhớ. Nếu một khoảng bộ nhớ dùng chung của các tiến trình được trở thành khoảng bộ nhớ dùng riêng, khi đó, một sự sắp xếp ở trong gian địa chỉ ảo (xem hình 3.9) được tiến hành; do vậy, các trang ảo của tiến trình được coi là copy on write. Bây giờ, một tiến trình tiến hành viết một trang như thế, do đó, đầu tiên việc copy được tạo lập (với các luật đọc/ viết mà không cần luật copy on write ở trên trang) và sau đó, tác vụ được thực hiện. Bấy giờ, tất cả việc tiếp theo đối với một trang diễn ra trên bản copy riêng lẻ và không cần trên bản gốc. Một cơ chế bảo vệ bộ nhớ quan trọng tiếp theo là việc dập bỏ nội dung trang, phương pháp này đòi hỏi cấp bảo vệ đúng yêu cầu, trước khi một trang được sử dụng cho một tiến trình người sử dụng. Ở sự quá độ của một trang từ trạng thái free (trống) đến trạng thái zeroed (điền đầy), điều nói trên được nhà quản lý bộ nhớ ảo thực hiện. 3.6.3 Các cấp bảo vệ Một bản phác thảo đưa ra một phương pháp bảo vệ bộ nhớ bổ sung để dẫn tới các bước bảo vệ đối với người sử dụng. Những trạng thái được nói trong chương 1 như trạng thái người sử dụng, trạng thái nhân hệ điều hành là một sự phân chia như thế. Chúng bao gồm 2 bậc chính: •Bậc đặc quyền: Bậc này dành cho những tiến trình làm việc ở trạng thái nhân hệ điều hành (kernel mode). Trong đó, mã bảo vệ được phép tất cả, thí dụ được phép truy cập tất cả địa chỉ của bộ nhớ. • Bậc không đặc quyền: Bậc này dành cho những tiến trình làm việc ở trạng thái người sử dụng (used mode). Trong đó, một tiến trình không thể truy cập trên hệ điều hành và trên tất cả các tiến trình khác. Mỗi bậc bảo vệ bộ nhớ này còn được tiếp tục chia nhỏ nữa, tại đó, các bậc nhỏ này còn được sắp xếp theo độ tin cậy, nó được người ta chỉ ra ở trong từng đại diện mỗi bậc nhỏ vừa nói. Tác dụng của nó phụ thuộc mạnh mẽ vào sự sắp xếp này khi chúng được sự trợ giúp của phần cứng. Thí dụ về các bậc bảo vệ ở bộ vi xử lý Intel 80386:
  7. b). Việc quản lý bộ nhớ phải được mở rộng như thế nào, mà nhờ đó, trang được cập phát? Bài tập 3.3. Về các bảng địa chỉ Một thiết bị địa chỉ ảo 128 Bit và địa chỉ vật lý 32 Bit. Các trang có giá trị 8 kilo- từ (kilo- word:kW). a). Có bao nhiêu lần điền vào được sử dụng cho một bảng trang thông thường? b) Có bao nhiêu bậc được sử dụng cho bảng trang kiểu nhiều bậc (mức), để tồn tại với một kích cở bảng trang nhỏ hơn 1 mêga-từ (mega-word: mW)? Ở đây, người ta hiểu 1 word = 1 sự điền vào. Bài tập 3.4. Về bảng trang đa bậc Một thiết bị có một không gian địa chỉ ảo. Việc quản lý bộ nhớ được sử dụng một bảng trang 2 bậc đối với một bộ nhớ Cache (được liên kết lại), được gọi là bộ đệm dịch chuyển phía nhìn thấy (translation lookside buffer: TLB) với một tỷ phần gặp nhau trung bình khoảng 90%. Bạn hãy lưu ý rằng, một sự truy cập có thể thực hiện bằng hai cách: sử dụng bộ đệm TLB hay nhờ bảng trang. a). Sự tiêu phí thời gian trung bình trên bộ nhớ chính bằng bao nhiêu, nếu thời gian truy cập bộ nhớ là 100ns và thời gian truy cập bộ đệm TLB là 10ns ? Giả sử rằng không có lỗi trang xuất hiện. b). Ở câu (a) các lỗi trang được bỏ qua. Bây giờ, chúng ta muốn nghiên cứu trường hợp đơn giản, mà trong đó các lỗi trang xuất hiện chỉ khi truy cập bộ nhớ chính. Giả sử các bảng trang đều ở trong bộ nhớ chính và không được cấp phát ! Khi đó tần suất của các lỗi trang là 1:105 và một lỗi trang mất 100ns. Vậy thời gian truy cập trung bình trên bộ nhớ chính là như thế nào? Gợi ý: Bạn hãy áp dụng biểu thức quan hệ sau đây: Thời gian truy cập trung bình = Thời gian gặp nhau + Tỷ phần truy cập hỏng x Thời gian truy cập hỏng. c). Việc điều hành đa chương trình gây ra những vấn đề gì đối với bộ đệm TLB và đối với bộ nhớ Cache khác ? Trước hết, bạn hãy nghĩ tới ở sự nhận dạng các khối. 3.7.3. Các bài tập về quản lý trang và bộ nhớ Cache Bài tập 3.5. Về các chuỗi tham chiếu Cho một chuỗi tham chiếu sau đây: 0 1 2 3 3 2 3 1 5 2 1 3 2 5 6 7 6 5. Mỗi lần truy cập một trang xảy ra trong khoảng một đơn vị thời gian. a). Hỏi có bao nhiêu lỗi trang của tập Working set dẫn ra đối với một kích cở của cửa sổ h =3 ? b). Nó sẽ dẫn tới vấn đề chiến lược mở rộng nào, khi một trang mới được nạp vào trong tập working set? Bạn hãy suy nghĩ, khi nào thì có lợi để thiết đặt một trang của một tập Working