Tải bản đầy đủ
Dịch vụ Quản lý bộ nhớ.

Dịch vụ Quản lý bộ nhớ.

Tải bản đầy đủ

Khi phân bổ được trả lại cho bộ cấp phát Buddy, nó sẽ kiểm tra nếu bạn phân bổ là miễn phí, và nếu
nó là như vậy, Buddy cấp phát kết hợp họ lại thành khối lớn hơn. Hoạt động này được lặp đi lặp lại cho
đến khi bạn bè khối không được tìm thấy.
Ngoài ra, chúng ta nên lưu ý rằng bộ cấp phát Buddy có thể phân bổ khối duy nhất của kích thước
trong trang bằng 2 nâng lên một số điện.
Cấp phát Buddy cũng tương tác với các chủ đề hạt nhân kswapd và bdflush, chịu trách nhiệm cho
việc duy trì với vùng trao đổi.
Phạm vi khác nhau của các trang vật lý có thể có các thuộc tính khác nhau, cho các mục đích của hạt
nhân. Ví dụ, bộ nhớ truy cập trực tiếp có thể chỉ làm việc trong phạm vi cụ thể của các địa chỉ vật lý
trong kiến trúc x86. Mặt khác, PPC không có hạn chế này.
Để xử lý tình hình như vậy trong phần cứng một cách độc lập cấp phát Zone được tạo ra. Cấp phát
Zone được sử dụng để phân bổ các trang trong khu vực quy định. Hôm nay Linux kernel được hỗ trợ
ba khu vực bộ nhớ:
-DMA - Vùng này bao gồm bộ nhớ truy cập bộ nhớ trực tiếp cho các hoạt động của các thiết bị di sản
-NORMAL - Vùng này bao gồm các địa chỉ bộ nhớ được sử dụng bởi hạt nhân cho các cấu trúc dữ
liệu nội bộ cũng như các hệ thống khác và phân bổ không gian người dùng.
-HIGHMEM - Vùng này bao gồm tất cả các bộ nhớ được sử dụng dành riêng cho hệ thống phân bổ
(bộ đệm hệ thống tập tin, người dùng phân bổ không gian, vv).
Lưu ý rằng bộ cấp phát Zone cũng chỉ có thể thao tác với các trang bộ nhớ.
Kể từ khi chúng ta thường cần phải phân bổ các đối tượng có kích thước nhỏ hơn kích thước của một
trang, chúng ta cần một cái gì đó để đối phó với các trang và phân bổ khối bộ nhớ ít hơn đối với chúng
tôi.
Chúng ta biết các kích thước của hầu hết các đối tượng thường được phân bổ trong không gian hạt
nhân, do đó, chúng ta có thể tạo ra cấp phát mà sẽ nhận được các trang bộ nhớ từ bộ cấp phát Zone và
phân bổ các đối tượng nhỏ trong các trang bộ nhớ. Hệ thống con này được đặt tên là bộ cấp phát Sàn
(cấp phát bộ nhớ hạt nhân Một đối tượng Caching).
Cấp phát Sàn tổ chức bộ nhớ cache, bộ nhớ cache cho từng loại đối tượng, ví dụ như inode_cache,
dentry_cache, buffer_head, vm_area_struct. Cache mỗi bao gồm các tấm nhiều (thường là một trang
dài), và mỗi tấm có chứa nhiều đối tượng khởi tạo.Điều này có nghĩa rằng các nhà xây dựng của các
đối tượng được sử dụng chỉ cho tấm mới được giao và bạn nên khởi tạo đối tượng trước khi thả nó vào
bộ cấp phát Sàn.
Ngoài ra các cấp phát Sàn làm cho nó có thể phân bổ các bộ đệm bộ nhớ của một trong các kích
thước đặc biệt được xác định. Vùng đệm này có thể được nhận bằng cách sử dụng chức năng hạt nhân
kmalloc. Bạn xác định kích thước, phân bổ và kmalloc sẽ phân bổ khối kích thước lớn hơn, gần nhất
mà bạn yêu cầu. Kích thước của các khối bộ nhớ mà có thể được phân bổ theo kmalloc, có sẵn trong

các tập tin tiêu đề . Ngoài ra các hạt nhân có thể cấp phát bộ nhớ hầu như tiếp
giáp (bộ nhớ có địa chỉ ảo tiếp giáp, nhưng không tiếp giáp với các địa chỉ vật lý) bằng cách sử dụng
hàm vmalloc.
4.2. Sàn cấp phát: cấp phát bộ nhớ cho các đối tượng.

Rất nhiều các nhu cầu cấp phát bộ nhớ là không phải cho toàn bộ trang web hoặc các nhóm
trang nhưng đối với giao động của các đối tượng cụ thể. Việc phân bổ sàn Linux là một ví dụ về
một cấp phát bộ nhớ được thiết kế để quản lý các đối tượng hạt nhân năng động (ví dụ, Cột, bộ
đệm ổ cắm mạng). Mục tiêu thiết kế của bộ cấp phát sàn là preallocate vùng bộ nhớ tiếp giáp để
làm cho nó hiệu quả các yêu cầu phân bổ dịch vụ cho các đối tượng cụ thể.
Sàn là một khối bộ nhớ tiếp giáp lãnh hải, các trang thường nhau về kích thước. Mỗi tấm chịu
trách nhiệm xử lý các yêu cầu phân bổ cho các đối tượng có cùng kích thước. Bởi vì một sàn xử
lý các đối tượng có kích thước bằng nhau, không có vấn đề phân mảnh. Trong ngôn ngữ của bộ
cấp phát sàn, một bộ nhớ cache là một thuật ngữ cho một bộ sưu tập các tấm chịu trách nhiệm
cho một đối tượng cụ thể. Mỗi sàn có thể ở một trong ba trạng thái:
-Trống rỗng: tất cả các đối tượng trong phiến đá đều miễn phí. Điều này có nghĩa rằng bộ sưu
tập của các trang này phiến có thể, nếu cần thiết, được khai hoang bởi hệ điều hành cho các mục
đích khác.
-Full: tất cả các đối tượng trong phiến đá được sử dụng.
-Một phần: sàn có chứa cả hai đối tượng miễn phí và sử dụng.
Bộ cấp phát sàn là một danh sách liên kết của cache (kmem_cache). A, biến cache_chain điểm
bắt đầu của danh sách này. Mỗi bộ nhớ cache trong danh sách được xác định bởi các loại đối
tượng mà nó chịu trách nhiệm. Trong mỗi cấu trúc kmem_cache là ba con trỏ: một danh sách
đầy đủ của tấm, khác với một danh sách các tấm một phần, và một danh sách các sàn rỗng. Mỗi
của các đại diện cho một danh sách liên kết của các đối tượng sàn.
Một số hoạt động cơ bản trên một sàn là:


kmem_cache_create

Tạo ra một bộ nhớ cache mới. Hoạt động này thường được sử dụng khi hạt nhân khởi tạo hoặc
khi một mô-đun hạt nhân được nạp. Nó xác định tên của bộ nhớ cache và kích thước của các
đối tượng của nó. Lưu trữ riêng biệt cho các inodes, mục thư mục, ổ cắm TCP, vv Trên một hệ
thống Linux, bạn có thể xem tất cả các cấu hình các loại tấm và tình trạng phân bổ của họ trong
tập tin / proc / slabinfo.


kmem_cache_destroy

Tiêu diệt một bộ nhớ cache. Các trang được sử dụng bởi bộ nhớ cache được thu hồi do cấp
phát trang. Điều này thường được gọi là một module khi nó được dỡ xuống và các đối tượng cụ
thể được tạo ra bởi mô-đun đó sẽ không còn cần thiết.


kmem_cache_alloc / kmem_cache_free

Phân bổ một đối tượng từ một bộ nhớ cache được đặt tên. Nếu có không có tấm miễn phí
hoặc một phần, cấp phát sẽ gọi cache_alloc_refill thêm các trang bổ sung cho bê tông.
Kmem_cache_free chức năng đánh dấu các đối tượng như là miễn phí.


kmalloc / kfree

Điều này cũng tương tự như để kmem_cache_alloc ngoại trừ bộ nhớ cache không được quy
định cụ thể. Chức năng lặp thông qua danh sách các bộ nhớ cache cho đến khi nó tìm thấy một
trong đó có thể đáp ứng các kích thước yêu cầu. Linux cấu hình cấp phát sàn với cache chung
của một loạt các kích thước phổ biến (ví dụ, kmalloc-8, kmalloc-16, kmalloc-96, kmalloc-256).
Kfree chức năng đánh dấu các đối tượng được phân bổ như là miễn phí.
4.3. MMU -Tóm tắt thông tin.
Một đơn vị quản lý bộ nhớ hỗ trợ phân trang gây ra tất cả các địa chỉ logic (địa chỉ ảo) được dịch
sang một địa chỉ vật lý (thực tế địa chỉ) bằng cách dịch số trang hợp lý của địa chỉ một số khung trang
vật lý. Số trang bao gồm các bit cao của địa chỉ địa chỉ. Các bit thấp của hình thức địa chỉ bù đắp trong
trang (hoặc khung trang). Ví dụ, với một địa chỉ 64-bit, nếu một kích thước trang là 1 MB, sau đó 20
bit thấp nhất (địa chỉ 1 MB) hình thức bù đắp và 44 bit đầu hình thành số trang.
Trang dựa trên bộ nhớ ảo là mát mẻ. Nó làm giảm bớt các hệ điều hành phải tìm các khu vực tiếp
giáp của bộ nhớ đến nhà một quá trình, có thể được sử dụng bất kỳ các trang bộ nhớ có sẵn. Bảng trang
theo dõi của ánh xạ giữa các không gian địa chỉ ảo và vật lý. Mỗi quá trình có thể cảm thấy như nó sở
hữu không gian địa chỉ đầy đủ của bộ xử lý.
Các vấn đề của phân mảnh bên ngoài được loại bỏ hoàn toàn. Phân mảnh nội bộ tồn tại là không sử
dụng bộ nhớ trong một trang. Trang lớn hơn làm cho các bảng trang nhỏ hơn và sử dụng các TLB hiệu
quả hơn, nhưng tạo ra phân mảnh nội bộ hơn.
Bảng trang cũng cho phép hệ điều hành để quản lý bảo vệ bộ nhớ và xác định các trang cụ thể như
ghi hoặc chứa mã thực thi. Bởi vì mỗi quá trình cần có một bảng trang, hệ điều hành cần thiết lập một
trong những động khi lần đầu tiên tạo ra một quá trình. Sau đó, nó có thể chuyển đổi không gian địa chỉ
trong một bối cảnh chuyển đổi chỉ đơn giản bằng cách thay đổi đăng ký trang bảng cơ sở và nếu MMU
hỗ trợ nó, ID không gian địa chỉ đăng ký.
Cho một đơn vị quản lý bộ nhớ, mỗi tiến trình có thể có không gian địa chỉ riêng của mình. Cùng một
địa chỉ ảo có thể tham khảo hai khung trang khác nhau (vị trí bộ nhớ vật lý) cho hai quá trình khác
nhau bởi vì quá trình từng có bảng trang riêng của mình. Các hệ điều hành chịu trách nhiệm quản lý
bảng trang cho mỗi quá trình. Trong một bối cảnh chuyển đổi, hệ điều hành phải thông báo cho đơn vị

quản lý bộ nhớ của bộ vi xử lý mà nó đã sử dụng một bảng trang khác nhau. Nó làm điều này bằng
cách thay đổi bảng trang cơ sở đăng ký, đăng ký có chứa địa chỉ bắt đầu của bảng trang.
Hai tối ưu hóa thường xuất hiện trong các đơn vị quản lý bộ nhớ: một tối ưu hóa tra cứu thời gian và
tối ưu hóa không gian được sử dụng bởi bảng trang.
Nếu tất cả các dịch địa chỉ yêu cầu tra cứu trong một bảng trang sau đó truy cập bộ nhớ hiệu suất của
chúng tôi sẽ được hai lần như chậm kể từ khi chúng tôi cần phải đọc bảng trang ngoài việc truy cập vào
các vị trí bộ nhớ mà chúng tôi muốn. Chi phí này được giảm một bộ đệm lookaside dịch, hoặc TLB,
lưu trữ mục bảng trang thường xuyên được sử dụng trong bộ nhớ kết hợp của nó.
Bởi vì hầu hết các quá trình sử dụng chỉ một phần nhỏ của không gian địa chỉ ảo có sẵn, sẽ có các
khu vực lớn của một bảng trang sẽ chứa không có mục. Để giữ cho kích thước của một bảng trang dễ
quản lý hơn, một cấu trúc đa cấp thường được sử dụng. Các bit trang của một địa chỉ ảo được chia
thành hai phần: các bit cao xác định bù đắp vào một bảng chỉ số cấp cao nhất. Bảng chỉ số này có đăng
ký cơ sở cho các bảng trang một phần. Các bit thấp của các bit trang xác định bù đắp trong đó bảng
trang một phần.

III. Các phương pháp cấp phát không gian nhớ tự do.
1. Cấp phát liên tục (Contiguous).
Để phân bổ không gian nhớ cho một file, hệ thống chọn một đoạn liên tục các khối đĩa tự do để cấp
phát cho file đó. Với phương pháp này, để định vị file hệ thống chỉ cần biết địa chỉ của khối đĩa tự do
đầu tiên và số lượng khối (block) đã dùng.

Hình 4.2: Sơ đồ cấp phát liên tục.
- Ưu điểm:
+ Hỗ trợ cho phương pháp truy nhập tuần tự và truy nhập trực tiếp.
- Nhược điểm:
+ Phải chọn được thuật toán tối ưu để tìm được các vùng không gian tự do cấp phát cho file
(First Fit, Best Fit hoặc Worst Fit).
+ Có thể xảy ra trường hợp không đủ số khối đĩa tự do liên tiếp cần thiết để cấp phát cho file
(kích thước file lớn hơn vùng các khối đĩa liên tục lớn nhất).
+ Trong trường hợp các khối đĩa tự do nằm tản mạn sẽ không sử dụng được, gây lãng phí không
gian nhớ.
Các thuật toán tối ưu:
+ First fit: Cấp phát hole đầu tiên cái mà đủ lớn. Việc tìm kiếm có thể bắt đầu hoặc từ đầu tập
hole hoặc nơi mà tim kiếm firstfit trước đã kết thúc. Chúng ta có thể dừng việc tìm kiếm ngay khi
chúng ta tìm thấy một hole tự do đủ lớn.
+ Best fit: Cấp phát hole nhỏ nhất cái mà đủ lớn. Chúng ta phải tìm kiếm toàn bộ danh sách đó,
trừ khi danh sách đó được sắp sếp theo kích cỡ. Chiến lược này tạo ra một hole dưa thừa nhỏ nhất.
+ Worst fit: Cấp phát hole lớn nhất. Ngược lại, chúng ta phải tìm kiếm toàn bộ danh sách trừ khi
nó được sắp xếp theo kích thước. Chiến lược này tạo ra một hole dưa thừa lớn nhất, cái mà có thể hữu
ích hơn nhiều so với hole dưa thừa nhỏ hơn từ tiếp cận bestfit.
Những mô phỏng vừa trình bày thì cả first fit và best fit là tốt hơn worst fit trong việc giảm thời gian
và tận dụng lưu trữ.
4.4. Cấp phát liên kết (Linked).
Trong phương pháp này, mỗi file được định vị trong thư mục thiết bị bằng hai con trỏ, một cái trỏ tới
khối đĩa đầu tiên, một cái trỏ tới khối đĩa cuối cùng để cấp phát cho file. Trong mỗi khối đĩa đã cấp
phát cũng có một con trỏ để trỏ tới khối đĩa kế tiếp.
Ví dụ:
File F1 được cấp phát 5 khối đĩa có số hiệu 9, 16, 1, 11, 25; khối đầu là 9, khối cuối là 25.
- Ưu điểm:
+ Sử dụng được các khối đĩa tự do nằm tản mạn.
- Nhược điểm:

+ Chỉ hỗ trợ truy nhập tuần tự không hỗ trợ truy nhập trực tiếp, độ tin cậy không đảm bảo nếu bị
mất các con trỏ liên

Hình 4.3: Sơ đồ cấp phát liên tục.
4.5. Cấp phát theo chỉ số (Index).
Trong phương pháp này, để cấp phát không gian nhớ cho một file, hệ thống sử dụng một khối đĩa đặc
biệt gọi là khối địa chỉ số (index block) cho mỗi file. Trong khối đĩa chỉ số chứa địa chỉ của các khối
đĩa đã cấp phát cho file, trong thư mục thiết bị địa chỉ của các khối đĩa chỉ số. Khi một khối đĩa được
cấp phát cho file thì hệ thống loại bỏ địa chỉ của khối này khỏi danh sách các khối đĩa tự do và cập nhật
vào khối chỉ số của file.

Hình 4.4: Cấp phát theo chỉ số.
- Ưu điểm: Hỗ trợ truy nhập trực tiếp.
- Nhược điểm: Lãng phí không gian nhớ dành cho khối địa chỉ số.

5. Lập lịch cho đĩa (Disk-scheduling).
5.1. Khái niệm Disk-scheduling.
- Thời gian truy nhập đĩa phụ thuộc ba yếu tố:
+ Thời gian di chuyển đầu từ đọc ghi đến track or cylinder cần thiết (Seek time)
+ Thời gian định vị đầu từ đọc/ghi tại khối đĩa cần truy nhập (Latency-time)
+ Thời gian truy nhập dữ liệu (Transfer-time)
Mà Seek-time và Transfer-time thường cố định và phụ thuộc vào cấu trúc kỹ thuật của ổ đĩa nên hệ
điều hành quan tâm đến Latency-time khi muốn tăng tốc độ truy nhập đĩa.
- Như vậy chúng ta có thể định nghĩa rằng:
+ Lập lịch cho đĩa là xây dựng các thuật toán dịch chuyển đầu từ đọc/ghi sao cho thời gian truy
nhập đĩa là tối ưu nhất.
5.2. Một số phương pháp lập lịch.
a. First come first served (FCFS).
Để truy nhập tới 1 file, hệ thống sẽ tổ chức một hàng đợi các yêu cầu phục vụ các track (lưu trữ dữ
liệu của file cần truy nhập). Track nào có yều cầu phục vụ trước thì đầu từ đọc ghi sẽ dịch chuyển tới
đó trước.
VD: File F1 được phân bổ lần lượt tại các track có số thứ tự sau đây: 98, 183, 37, 122, 14, 124, 65,
67. Đầu từ đọc/ghi đang dịnh vị tại track có số thứ tự 53 thì sơ đồ dịch chuyển đầu từ đọc ghi theo thuật
toán FCFS được thể hiện như sau:
53 - 98 - 183 - 37 - 122 - 14 - 124 - 65 – 67
b. Shortest Seek Time First (SSTF).
Thuật toán SSTF sẽ chọn track nào có thời gian di chuyển đầu từ đọc ghi ngắn nhất thì ưu tiên phục
vụ track đó trước. VD:
53 - 65 - 67 - 37 - 14 - 98 - 122 - 124 – 183
c. Thuật toán Scan.
Trong thuật toán này đầu từ đọc/ghi quét từ track nhỏ nhất đến track lớn nhất sau đó quét ngược lại,
track nào có nhu cầu thì phục vụ.

d. Thuật toán C-Scan.
Thuật toán này tương tự như scan nhưng không quét chiều ngược lại.
e. Thuật toán Look.
Tương tự như thuật toán Scan nhưng trong thuật toán này đầu từ đọc/ghi chỉ quét trong phạm vi các
track có yêu cầu phục vụ, không quét tới track đầu tiên hoặc cuối cùng (nếu các track này không có nhu
cầu phục vụ).
f. Thuật toán C-Look
Tương tự như Look nhưng đầu từ đọc/ghi không phục vụ đường về.
Lưu ý: Thuật toán FCFS và SSFT là 2 thuật toán đang được sử dụng rất phổ biến.

6. Một số hệ thống file trong Linux.
6.1. Giới thiệu.
Hệ thống tập tin Linux được tổ chức theo dạng cây. Có một vị trí khởi điểm, gọi là root (gốc). Bất kỳ
một hệ thống Unix/Linux nào cũng có một thư mục đặc biệt gọi là thư mục gốc (root directory) kí hiệu
là dấu slash (“/”). Đây là điểm bắt đầu để gắn (mount point) tất cả các phần tử còn lại như hệ thống
disks, partitions, CD ROM… vào hệ thống Linux/Unix.
Hiện nay, các hệ thống file tiên tiến được sử dụng trong Linux như Ext2, Ext3, Ext4 có độ tin cậy cao
và có khả năng ghi nhớ quá trình thao tác trên dữ liệu (journaling).
Tên truy cập ô đĩa theo định dạng sau: /dev/xxyN
Trong đó: "dev” – là tên của thư mục chứa tất cả các tập tin thiết bị.
“xx” – chỉ ra kiểu của thiết bị mà phần chia nằm trên đó.
“Y” – Chỉ chữ cái này xác định thiết bị mà phần chia nằm trên đó.
“N” – Số cuối cùng biểu thị cho phần chia.
6.2. Hệ thống Ext 2.
Tính năng
Kích thước hệ thống file lớn nhất
Kích thước file lớn nhất
Chiều dài tối đa tên file
Kích thước block tuỳ biến

Minix
64 MB
64 MB
30 ký tự
Không

- Đặc trưng:
+ Hệ thống tập tin Ext2 hỗ trợ các kiểu tập tin Unix chuẩn.

EXT
2 GB
2 GB
255 ký tự
Không

EXT 2
4 TB
2 GB
255 ký tự