Thứ Sáu, 12 tháng 4, 2013

Memory management

Bộ nhớ là một resource quan trọng cần được quản lý một cách cẩn thận.
Một phần việc của OS là quản lý memory hierachy được gọi là memory manager. Công việc của nó là keep track những phần nào của memory là đang sử dụng và nhưng phần nào là không in use, để cấp phát bộ nhớ đến processes khi họ cần nó, và giải phóng khi các processes hoàn thành, và để quản lý swapping giữa bộ nhớ chính và disk khi main memory quá nhỏ để giữ tất cả processes.

BASIC MEMORY MANAGEMENT
Các hệ thống quản lý bộ nhớ có thể chia ra thành 2 classes. Nhưng cái move processes ra và vào giữa disk và main memory trong suốt thực thi và những cái không thực hiện điều này. Chúng ta hãy luôn keep in mind rằng swapping và paging tạo bởi sự thiếu hiệu quả khi main memory giữ tất cả program at once.

Như ta đã biết software thường phát triển nhanh hơn memory, vì vậy một cơ chế hiệu quả để quản lý bộ nhớ là cần thiết.

Monoprogramming without Swapping or Paging
cơ chế quản lý bộ nhớ đơn giản nhất là chỉ chạy một program tại một thời điểm, sharing memory giữa OS và program. Cơ 3 kiểu khác nhau trong cơ chế này đó là : OS có thể nằm tại đấy memory trong RAM hoặc nó có thể nằm trong ROM tại đỉnh của bộ nhớ. hoặc là device drivers có thể nằm tại đỉnh của memory trong ROM, OS nằm trong RAM. Cách thứ nhất thường được dùng trong mainframes và minicomputers nhưng ngày nay hiếm được dùng. mô hình thứ 2 được sử dụng bởi palmtop computers và các hệ thống nhúng. mô hình thứ 3 được sử dụng bởi các máy tính cá nhân thế hệ đầu (ví dụ running MS-DOS), nơi mà một phần trong ROM được gọi là BIOS (BASIC INPUT OUTPUT SYSTEM).

Khi hệ thống được tổ chức theo cách này, chỉ một process được running tại một thời điểm. Miễn là user types một command, OS copy program được yêu cầu từ disk vào memory và executes nó. khi process finishes, OS display một prompt character và chờ cho một new command. Khi nó nhận được command, nó loads new program vào trong memory, overwriting cái đầu tiên.

Multiprogramming with Fixed Partitions
Ngoại trừ ra các hệ thống nhúng đơn giản, monoprogramming là khó được sử dụng. Hầu hết modern OS cho phép multiple processes run tại cùng một thời điểm. Có multiple processes running có nghĩa là khi một process bị blocked chờ cho I/O finish, một process khác có thể sử dụng CPU. Do đó multiprogramming tăng CPU utilization. Network servers thường xuyên có khả năng run nhiều processes (cho các clients khác nhau) tại cùng một thời điểm, hầu hết client (ví dụ desktop ) đều có khả năng này.

Cách đơn giản nhất để đạt được multiprogramming đó là chia memory thành n partitions.
khi một job đến, nó có thể được đạt trong input queue của partition nhỏ nhất và đủ lớn để giữ nó. Bởi vì partition đước fixed trong cơ chế này, bất cứ space trong partition không được sử dụng bởi job sẽ bị mất.

Sự bất lợi trong việc sắp xếp các incoming jobs vào trong các queue tách biệt nhau là rõ ràng khi một queue cho một partition lớn là empty còn queue cho partition nhỏ thì lại full. Hậu quả có thể xảy ra là các small jobs có thể phải đợi để có được bộ nhớ trong khi còn rất nhiều memory available. Một cách tổ chức thay thế đó là duy trì single queue . Bất cứ khi nào một partition trở nên free, job gần nhất với đầu của queue có thể được fit vào trong partition thì có thể được load vào và run. Một điều không mong muốn là lãng phí một partition lớn với một small job, một chiến lược khác là tìm trong toàn bộ input queue, bất cứ khi nào partition trở nên free và pick largest job có thể fits.

Không có nhận xét nào:

Đăng nhận xét