Hệ điều hành (Operation System / OS) dù là Windown, Linux, Mac đều có  nhiệm vụ điều phối nhịp nhàng 4 bộ phận quản lý cơ bản:

  • Quản lý bộ nhớ (Memory Manager)
  • Quản lý tiến trình (Process Manager)
  • Quản lý File (File Manager)
  • Quản lý thiết bị kết nối (Device Manager)

Ngoài ra còn có Quản lý mang (Network Manager)

QUẢN LÝ BỘ NHỚ MÁY TÍNH

Nói đơn giản là Memory Manager sẽ quét liên tục yêu cầu từ Main Memory (Ram) và kiểm tra xem nó có khả dụng hay không. Nó sẽ phân cấp (Allocate) không gian bộ nhớ cũng như giải phóng (Deallocate) không gian cho những yêu cầu tiếp theo.

Các giải pháp quản lý bộ nhớ:

1.Single User Contigious:

Cái tên nói lên tất cả! Mỗi một thời điểm chỉ có duy nhất một công việc được đưa vào Ram để xử lý. Xử lý xong hoàn toàn thì sẽ tới công việc tiếp theo; Không những thế nếu công việc có kích thước lớn hơn bộ nhớ chính thì nó đơn giản “đá đít” công việc khỏi “những việc cần làm tuổi 20”.  Có thể nói cách này quá lạc hậu rồi.

Như vậy nếu muốn trong cùng một khoản thời gian có thể thực hiện một lúc nhiều công việc / nhiều tiến trình thì phải làm thao? Thì dùng đến mấy giải pháp bên dưới chứ thao

2.Contigious Memory Allocation (Cấp phát vùng nhớ liên tục)

Kiểu Cấp phát vùng nhớ liên tục có thể được thực hiện trong HDH bằng sự giúp đỡ của 2 thanh ghi, base register và limit register. Khi một tiến trình đang được thực thi trong bộ nhớ chính, base register chứa địa chỉ bắt đầu của vị trí nhớ nơi mà tiến trình đang được thực thi, trong khi đó số bytes mà được sử dụng bởi tiến trình sẽ được lưu ở limit register. Một tiến trình không trực tiếp tham chiếu tới địa chỉ thực (vật lý) tương ứng với một vị trí nhớ, thay vào đó nó sử dụng địa tương đối đối với base register. Tất cả địa chỉ đã tham chiếu với một chương trình được xem như là địa chỉ ảo. CPU sẽ tạo ra nó và chuyển nó thành địa chỉ thực với sự giúp đỡ của MMU. Thanh ghi đia chỉ Base được sử dụng cho việc biên dịch địa chỉ bằng MMU. Vì vậy, một địa chỉ vật lý được tính theo công thức sau:

  • Physical Address = Base register address + Logical address/Virtual address

Địa chỉ của bất kì vùng nhớ nào tham chiểu với một tiến trình được kiểm tra để đảm bảo nó không tham chiếu tới một địa chỉ của tiến trình kề cận. Việc này được kiểm soát với tầng dưới HDH. Một bất tiện là mức độ đa nhiệm sẽ bị giảm vì tiến trình phải chờ vùng nhớ trống.

Ở kiểu cấp phát này có 2 loại:

  • Fixed Partitioning
  • Dynamic Partitioning (Variable Partitioning)

Fixed Partitioning

OS sẽ chia Ram thành các phần (Partitions). Các phần này có 2 loại, hoặc kích thước tất cả là giống nhau, hoặc khác nhau. (Quy tắc chia thì mình có mail hỏi senpai rồi, khi nào có câu trả lời mình bổ sung :V chắc lâuuuuuuu)

Chính những Partition này sẽ là “Bãi đỗ xe” cho các tiến trình. – Dạng toán “Bãi đỗ xe”

  • Lưu ý là Partitions với cách chia kích thước khác nhau thi nó chỉ có thể thay đổi khi mình reboot máy thôi => Khuyết điểm của thằng này.
  • Ngoài ra thằng này còn gặp tình trạng phân mảnh nội (internal fragmentation) – Nghĩa là bạn tưởng tượng bạn bao đút một ô để xe hơi mà bạn lại đổ xe đạp thì rõ ràng còn dư ra một khúc để…”ngủ”; Cơ mà giàu nên lúc mình thuê thì mình thuê nguyên cái ô để xe hơi rồi, thằng khác nó không có quyền để xe đạp ké với mình được. Như vậy tình trang hoang phí đó gọi là phân mảnh nội.

Dynamic Partitioning  (Variable Partitioning)

Như vậy để tránh tình trạng phải Reboot thì “Con nhà người ta” mới nghĩ ra giải pháp tiếp theo (Tên ở trên)

Ý tưởng của giải pháp này là mỗi một tiến trình khi nhảy vào Ram sẽ được cấp phát Partition bằng đúng với kích thước của tiến trình đó. Nhưng lại đụng phải Phân mảnh ngoại

  • Phân mảnh ngoại – Khi một tiến trình xong nó thì nó sẽ được “giải phóng”, nhiều tiến trình xong thì sẽ có nhiều vùng giải phóng. Nhưng các vùng giải phóng đó không gần nhau / không hợp nhất được nếu như có những tiến trình đang được thực thi nằm giữa chúng chưa được giải phóng. Như vậy khi có một tiến trình khác vào nó yêu cầu một vùng giải phóng để nhảy vào nhưng yêu cầu của nó quá lớn đến nỗi không có bất kì vùng giải phóng độc lập (riêng lẽ) đáp ứng được (Mặc dù nhiều vùng giải phóng rồi sẽ đáp ứng được – Nhưng mình không được gộp
  • Công cụ Defragment drive của Windown chính là để giải quyết việc gộp lại.

Sẽ có bài toàn liên quan đến mấy cái “lỗ” ở trên ấy :v

3.Non-Contigious Memory Allocation (Cấp phát vùng nhớ  không liên tục)

Ý tưởng là sẽ chia Ram thành các Segments (Frames) bằng nhau và tiến trình thành các Fragments (Pages). Kích thước của các Frames sẽ được phân chia khi khi nó so sánh với các Frame, như vậy size Frame =  size Page.

Các Pages sẽ được “đút” vào các Frames, tất nhiên các Frames này sẽ không nằm liên tục (Đúng như tên gọi “Cấp phát vùng nhớ không liên tục”)

Các dạng toán là các giải thuật thay thế khung trang, chuyển đổi địa chỉ,…

[Publish Date 16/05/2017 -By Tùng T.Tr]