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

3.0. Quan niệm về 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.

• Bộ nhớ chính:

Vấn đề chủ yếu là phân bổ tối ưu không gian bộ nhớ chính trên các tiến trình riêng lẻ. Theo nguyên tắc chung, nhiệm vụ được trợ giúp nhờ các đơn vị phần cứng chuyên dụng. Đặc biệt, trong hệ thống đa vi xử lý, điều quan trọng là phải tránh các tranh chấp, nếu có nhiều tiến trình cùng muốn chiếm một không gian lưu trữ. Trong trường hợp này, các kỹ thuật viên sẽ giúp đỡ thêm, như việc truy cập bộ nhớ không đồng dạng (NUMA), thí dụ khi chiếm dụng các bộ vi xử lý, nó được tách chia ra trên bộ nhớ cục bộ hay bộ nhớ toàn cục.

• Bộ nhớ quảng đại:

Việc tách khỏi sự quản lý các files sẽ có những files chuyên dụng, mà với nó, dung lượng của file được phân chia và được quản lý. Thí dụ file swap được chuyển dịch trên các tiến trình, mà những tiến trình này không chiếm nhiều không gian bộ nhớ chính.

Đầu tiên, chúng ta nghiên cứu kỷ thuật trực tiếp che phủ bộ nhớ, mà nó tìm thấy việc ứng dụng ở hầu hết các chương trình người sử dụng hoặc ở các hệ điều hành đơn giản.

 

doc39 trang | Chuyên mục: Hệ Điều Hành | Chia sẻ: yen2110 | Lượt xem: 595 | Lượt tải: 0download
Tóm tắt nội dung Giáo trình Hệ điều hành - Chương 3: Quản lý bộ nhớ, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
chỉ thực thi), guard pape (phòng vệ trang), no access (không truy cập) và copy on write (copy khi viết); những thông tin này có thể được đặt vào thủ tục với lệnh VirtualProtect(). Sau đây, những thông tin này được giải thích cặn kẻ như sau:
Execute only (chỉ thực thi):
Để tránh những thay đổi và không cho phép việc copy của các chương trình nguồn, ở mã chương trình được sử dụng, việc viết và đọc dữ liệu thì rất quan trọng. Vì điều đó không được phần cứng trợ giúp, nó giống hệt trường hợp Readonly.
Guard Page (phòng vệ trang):
Khi tiến hành truy cập trang, nếu có một trang được đánh dấu, do đó, tiến trình người sử dụng sẽ phát sinh một lỗi phân đoạn, còn gọi là ngoại lệ cảnh giới trang (guard page 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:
Dãy mở rộng các bộ vi xử lý 80x86 chế ngự nhiều bậc bảo vệ ở các phiên bản ngày càng hiện đại. Nếu bộ vi xử lý được đặt trở lại nhờ tín hiệu điện, do đó, nó tồn tại ở trạng thái thực (read mode) và với điều đó, bộ vi xử lý 8086 hay 80186 thì tương thích. Không gian địa chỉ hữu ích thì đồng nhất với không gian địa chỉ vật lý, do đó, các tiến trình có thể quấy nhiễu lẫn nhau. Nói chung khi đó, hệ điều hành được điều chỉnh theo phương pháp reset (đặt lại). Hệ điều hành tạo ra những bảng theo kiểu bảo vệ bộ nhớ này. Sau đó, nó đặt với các Bit trạng thái ảo (vitual mode-Bit), nếu các Bits này không thể được đặt trở lại, do đó, cần tới sự tác động của bộ nhớ MMU. Tất cả việc truy cập bộ nhớ tiếp theo được sử dụng địa chỉ ảo, bấy giờ, đầu tiên chúng phải được biên dịch, tức là, tất cả các tiến trình đã được dự kiến được cách biệt với nhau ở trong mỗi không gian địa chỉ ảo. 
Với kiểu địa chỉ ảo, bộ vi xử lý 80386 có 4 bậc bảo vệ: bậc 3 cho chương trình người sử dụng, bậc 2 cho thư viện dùng chung, bậc 1 cho gọi hệ thống và bậc 0 cho kiểu nhân hệ điều hành. Hai Bit để biểu diễn bậc được thực hiện với tư cách là thông tin truy cập ở việc mô tả các trang và các segments, và chúng còn quyết định về luật lệ truy cập. Nếu việc truy cập bị từ chối, do đó, dẫn tới việc bẻ gãy lỗi.
Các bước nhãy chương trình và việc gọi thủ tục ở mỗi mã của một bậc khác nhau được điểu chỉnh một cách mạnh mẽ. Để gọi thủ tục của một bậc khác nhau thì một lệnh đặc biệt CALL được sử dụng, lệnh này kiểm tra việc truy cập về cấu trúc dữ liệu có dạng call gate và sau đó sử dụng các địa chỉ bước nhãy được tạo ra trước đó ở trong thủ tục. Do đó, những bước nhãy chưa được kiểm tra sẽ bị loại trừ.
3.7. Các bài tập của chương 3
	3.7.1. Các bài tập về che phủ bộ nhớ 
Bài tập 3.1. Các chiến lược che phủ 
Nếu cho một hệ thống tráo đổi (swappingsystem), mà bộ nhớ của nó bao gồm các khoảng trống theo thứ tự như sau: 10kB, 4kB, 20kB, 18kB, 7kB, 9kB, 12kB, và 15kB. Khoảng trống nào sẽ được chọn đầu tiên cho vừa vặn tốt nhất khi yêu cầu cần nạp các không gian bộ nhớ là 12kB, 10kB, 9kB. Bạn hãy nhắc lại các yêu cầu cho các trường hợp tốt nhất, tồi nhất và tạm được (kể cả bản vẽ sơ đồ).
3.7.2. Các bài tập bộ nhớ ảo 
Bài tập 3.2. Xác định địa chỉ
a). Bạn hãy tính toán các địa chỉ vật lý từ các địa chỉ ảo 2204H và A226H. Độ dịch vị là 13 Bit và số trang là 3 Bit. Bạn hãy sử dụng bảng trang sau đây:
Trang
0 
1
2
3
4
5
6
7
Khung trang
7
0
1
6
4
2
3
5
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 set, và khi nào thì có lợi để thêm vào một trang và để thay đổi kích cở cửa sổ h một cách năng động; trường hợp kích cở lớn nhất của tập Working set vẫn chưa được đánh giá !
Bài tập 3.6. Về các chiến lược cấp phát
Có một máy tính chiếm 4 khung trang. Tại thời điểm nạp của lần truy cập sau cùng, các giá trị M và R (Bit) đối với mỗi trang được dẫn ra như sau (thời gian tính bằng tiếng kêu tích tắc của đồng hồ):
a). Trang nào được chiến lược NRU thay thế ?
b). Trang nào được chiến lược FIFO thay thế ?
c). Trang nào được chiến lược LRU thay thế ?
Bài tập 3.7. Về tập Working set
a). Dưới khái niệm Working set của một chương trình, người ta hiểu cái gì ? Nó có thể thay đổi như thế nào ?
b). Việc gia tăng số lượng các khung trang ở bộ nhớ công tác có hiệu quả nào trong quan hệ với số lượng các lỗi trang ? Điều đó mang lại hiệu quả nào trên các bảng trang ?
Bài tập 3.8. Về hiệu ứng Thrashing
a). Cái gì gây nên hiệu ứng thrashing ?
b). Hệ điều hành có thể phát hiện hiệu ứng thrashing như thế nào và nó làm gì để chống lại hiệu ứng này ?
c). Một hệ thống có những thông số hệ thống sau đây:
	1). s =3; v = 14/15, σ1 = 0,5; ρ1 = 1/15; ρw = 1/20
	2). s =3; v= 14/15; σ1 = 0,5; ρ1 = 1/15; ρw = 1/10
Khi số lượng các tiến trình gia tăng, tính chất tải như thế nào ?
Tại chỗ nào có sự gia tăng đột biến ?
Bài tập 3.9. Về bộ nhớ Cache
Bộ nhớ Cache có thời gian truy cập 50ns. Trong thời gian này, bộ vi xử lý có thể truy cập trên bộ nhớ Cache không có chu trình chờ đợi và trên bộ nhớ chính với 3 chu trình chờ đợi. Tỷ phần gặp nhau của việc truy cập trên bộ nhớ Cache là 80%. Thời gian của chu trình hướng bus của bộ vi xử lý là 50ns. Bạn hãy tính:
a). Thời gian truy cập trung bình của ca làm việc ?
b). Số lượng trung bình các chu trình chờ đợi cần thiết ?

File đính kèm:

  • docgiao_trinh_he_dieu_hanh_chuong_3_quan_ly_bo_nho.doc