Tải bản đầy đủ (.pdf) (27 trang)

Quản lý bộ nhớ ngoài hệ điều hành Linux

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (823.14 KB, 27 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
*****

BÀI TẬP LỚN
MÔN HỌC NGUYÊN LÝ HỆ ĐIỀU HÀNH
ĐỀ TÀI:NGHIÊN CỨU QUẢN LÝ BỘ NHỚ NGOÀI TRONG
HỆ ĐIỀU HÀNH LINUX
Giảng Viên Hướng Dẫn
Lớp
Nhóm
Thành viên

: Ths Nguyễn Thanh Hải
: KTPM 1 – K12
: 06
1. Vũ Hoàng Vương
2. Đặng Quốc Bảo
3. Phạm Tuấn Đạt
4. Bùi Minh Hiếu
5. Phạm Đăng Hải

Hà Nội - 2019


Mục lục
Lời nói đầu ............................................................................................................... 3
1. Các khái niệm cơ bản. ......................................................................................... 4
2. Các phương pháp quản lý không gian nhớ tự do............................................. 6
2.1. Phương pháp Bit vector. .............................................................................. 6
2.2. Phương pháp liệt kê (List). ........................................................................... 7


2.3. Phương pháp lập nhóm (Grouping). ........................................................... 7
2.4. Phương pháp đếm (Couting)........................................................................ 8
3. Cơ cấu quản lý bộ nhớ Linux. ............................................................................ 8
4. Dịch vụ Quản lý bộ nhớ. ................................................................................... 10
4.1. Hệ thống Buddy. .......................................................................................... 10
4.2. Sàn cấp phát: cấp phát bộ nhớ cho các đối tượng. .................................. 13
4.3. MMU -Tóm tắt thông tin. ........................................................................... 14
5. Các phương pháp cấp phát không gian nhớ tự do......................................... 15
5.1. Cấp phát liên tục (Contiguous). ................................................................. 15
5.2. Cấp phát liên kết (Linked). ........................................................................ 17
5.3. Cấp phát theo chỉ số (Index). ..................................................................... 18
6. Lập lịch cho đĩa (Disk-scheduling). ................................................................. 18
6.1. Khái niệm Disk-scheduling. ....................................................................... 18
6.2. Một số phương pháp lập lịch. .................................................................... 18
7. Một số hệ thống file trong Linux. .................................................................... 21
7.1. Giới thiệu...................................................................................................... 24
7.2. Hệ thống Ext 2. ............................................................................................ 24
7.3. Hệ thống Ext 3. ............................................................................................ 25
7.4. Hệ thống Ext 4. ............................................................................................ 26


Danh mục hình ảnh
Hình 1.1: Hình minh họa cấu trúc một đĩa từ. ........................................... 5
Hình 2.1: Ví dụ phương pháp Bit vector ..................................................... 6
Hình 2.2: Mô tả không gian đĩa từ. .............................................................. 7
Hình 3.1: Sơ đồ tổng quát của quản lý bộ nhớ trong Linux. ................... 10
Hình 4.1: Mảng danh sách các trang bộ nhớ trong bộ cấp phát Buddy. 11
Hình 5.1: Sơ đồ cấp phát liên tục. .............................................................. 16
Hình 5.2: Sơ đồ cấp phát liên kết. .............................................................. 17
Hình 5.3: Cấp phát theo chỉ số. .................................................................. 18

Hình 6.1: Phương pháp First come first served (FCFS). ......................... 19
Hình 6.2: Phương pháp Shortest Seek Time First (SSTF). ..................... 20
Hình 6.3: Phương pháp Scan ...................................................................... 20
Hình 6.4: Phương pháp C-Scan.................................................................. 21
Hình 6.5: Phương pháp Look ..................................................................... 21
Hình 6.6: Phương pháp C-Look ................................................................. 22
Hình 6.7: Bộ nhớ chính (RAM) .................................................................. 23
Hình 7.1: Tổng quan về hệ thống tập tin EXT 2....................................... 25


Lời nói đầu
Linux là tên gọi của một hệ điều hành máy tính và cũng là tên hạt nhân của hệ
điều hành. Nó có lẽ là một ví dụ nổi tiếng nhất của phần mềm tự do và của việc
phát triển mã nguồn mở.
Phiên bản Linux đầu tiên do Linus Torvalds viết vào năm 1991, lúc ông còn là
một sinh viên của Đại học Helsinki tại Phần Lan. Ông làm việc một cách hăng
say trong vòng 3 năm liên tục và cho ra đời phiên bản Linux 1.0 vào năm 1994.
Bộ phận chủ yếu này được phát triển và tung ra trên thị trường dưới bản quyền
GNU General Public License. Do đó mà bất cứ ai cũng có thể tải và xem mã
nguồn của Linux. Mã nguồn mở của HDH và của các chương trình trên Linux là
những tài liệu vô giá để chúng ta học hỏi về kỹ thuật lập trình vốn là những tài
liệu không được công bố đối với các ứng dụng Windows.
Trong bài luận này, chúng ta sẽ tìm hiểu một phần quan trọng trong HDH
Linux đó là: Quản lý bộ nhớ ngoài trong Linux.

3


Giới thiệu sơ qua về Linux:
Linux là tên gọi của một hệ điều hành máy tính và cũng là tên hạt nhân của hệ

điều hành. Nó có lẽ là một ví dụ nổi tiếng nhất của phần mềm tự do và của việc
phát triển mã nguồn mở.
Phiên bản Linux đầu tiên do Linus Torvalds viết vào năm 1991, lúc ông còn là
một sinh viên của Đại học Helsinki tại Phần Lan. Ông làm việc một cách hăng
say trong vòng 3 năm liên tục và cho ra đời phiên bản Linux 1.0 vào năm 1994.
Bộ phận chủ yếu này được phát triển và tung ra trên thị trường dưới bản quyền
GNU General Public License. Do đó mà bất cứ ai cũng có thể tải và xem mã
nguồn của Linux.
Chim cánh cụt Tux ở trên, dựa trên một hình ảnh do Larry Ewing tạo ra vào
năm 1996, biểu trưng và vật may mắn của Linux.
Thông tin thêm:
Ubuntu là một hệ điều hành máy tính dựa trên Debian GNU/Linux, một bản
phân phối Linux thông dụng. Ubuntu thường được cài đặt trên máy tính mới,
trước khi người sử dụng mua về và cài đặt hệ điều hành khác.

Logo hệ điều hành Ubuntu.
Android là một hệ điều hành dựa trên nền tảng Linux được thiết kế dành cho
các thiết bị di động có màn hình cảm ứng như điện thoại thông minh và máy tính
bảng. Ban đầu, Android được phát triển bởi Tổng công ty Android, với sự hỗ trợ
tài chính từ Google và sau này được chính Google mua lại vào năm 2005.
Android ra mắt vào năm 2007 cùng với tuyên bố thành lập Liên minh thiết bị
cầm tay mở: một hiệp hội gồm các công ty phần cứng, phần mềm, và viễn thông
với mục tiêu đẩy mạnh các tiêu chuẩn mở cho các thiết bị di động. Chiếc điện
thoại đầu tiên chạy Android được bán vào tháng 10 năm 2008.
1. Các khái niệm cơ bản.
-Bộ nhớ:
+ Bộ nhớ là trung tâm để điều khiển hệ thống máy tính hiện đại.
+ CPU lấy các chỉ thị từ bộ nhớ dựa theo giá trị của thanh đếm chương
trình.
4



-Bộ nhớ ngoài:
+ Gồm các thiết bị như: Thẻ nhớ, ổ cứng, đĩa mềm, đĩa CD/DVD…
-Lý do phải quản lý bộ nhớ ngoài: Khi cần lưu trữ các chương trình hoặc dữ
liệu, các hệ thống máy tính cần sử dụng bộ nhớ ngoài (đĩa từ, băng từ…). Nhiệm
vụ chính của hệ điều hành phải đảm bảo được các chức năng sau:
+ Quản lý không gian nhớ tự do trên bộ nhớ ngoài (Free space mange).
+ Cấp phát không gian nhớ tự do (Allocation methods).
+ Cung cấp các khả năng định vị bộ nhớ ngoài.
+ Lập lịch cho bộ nhớ ngoài (Disk scheduling).
- Sơ lược cấu trúc nguyên tắc hoạt động của đĩa từ:

Hình 1.1: Hình minh họa cấu trúc một đĩa từ.
+ Cấu tạo của đĩa từ: Xét cấu trúc vật lý của đĩa từ thì đĩa từ bao gồm 1
hay nhiều lá đĩa đặt đồng trục. Mỗi mặt đĩa chia thành các rãnh đồng tâm gọi là
track, một track được chia thành các cung gọi là sector. Tập hợp các track cung
thứ tự trên các mặt đĩa gọi là Cylinder. Trên mỗi mặt đĩa có một đầu từ đọc hay
ghi dữ liệu (read hay write heads). Để điều khiển đầu từ đọc hay ghi dữ liệu cần
có một trình để điều khiển đĩa (disk controler).
+ Thư mục thiết bị: Thông tin trên đĩa đĩa được tham chiếu bởi các thành
phần: Ổ đĩa, mặt đĩa, track, sector… Thư mục thiết bị cho biết đĩa gồm những
thông tin gì, độ dài kiểu, người sở hữu, thời điểm khởi tạo, vị trí, được phân bố
không gian thế nào? Thư mục thiết được tạo ngay ở trên đĩa tại một vùng nhớ
trên đĩa.

5


2. Các phương pháp quản lý không gian nhớ tự do.

2.1. Phương pháp Bit vector.
Không gian đĩa được chia thành các khối (block) và được đánh số từ 0 . . .

max.
Hình 2.1: Ví dụ phương pháp Bit vector
Vd: Đĩa mềm 1. 44Mb, 2 mặt, 80 track/1mặt, 18 sector/1track được đánh số như
sau:
Mỗi khối đĩa sử dụng 1bit để đánh dấu trạng thái. Khối đĩa nào đã sử dụng thì
bit trạng thái có giá trị bằng 1, chưa sử dụng thì có giá trị bằng 0.
Tập hợp các ký hiệu 0, 1 tạo thành 1 bit vector (bitmap). Đọc thông tin trong
bitmap hệ điều hành có thể xác định được không gian tự do trên đĩa.

6


Hình 2.2: Mô tả không gian đĩa từ.
Vd: Cho không gian đĩa từ như hình trên, các khối 2, 3, 4, 5, 8, 9, 10, 11, 12,
143, 17, 18, 25, 26, 27 là các khối đĩa tự do. Khi đó bitmap quản lý không gian
nhớ tự do: 11000011000000111001111110001111…
- Ưu điểm: Phương pháp bitmap cài đặt đơn giản, dễ quản lý, dễ tìm kiếm
những khối liên tục trên đĩa.
- Nhược điểm: Tốn không gian lưu trữ dành cho bitmap (vì mỗi khối sẽ tốn 1
bit để lưu trạng thái của khối).
2.2. Phương pháp liệt kê (List).
Trong phương pháp này, hệ thống sử dụng 1 danh sách móc nối để liệt kê các
khối đĩa tự do. Con trỏ đầu danh sách chỉ tới khối đĩa tự do đầu tiên, mỗi khối có
1 con trỏ để trỏ tới khối kế tiếp.
Ưu điểm của phương pháp này là tiết kiệm không gian nhớ nhưng nó lại làm
tăng thời gian truy nhập dữ liệu.
2.3. Phương pháp lập nhóm (Grouping).

Trong phương pháp này, hệ thống cho phép nhóm các khối đĩa tự do liên tiếp
thành 1 nhóm. Khối đĩa tự do đầu tiên trong nhóm lưu trữ địa chỉ của các khối
đĩa tư do trong nhóm. Khối đĩa cuối cùng trong nhóm lưu trũư địa chỉ của khối
đĩa tự do đầu tiên của nhóm tiếp theo.

7


Theo hình, ta có bảng quản lý không gian nhớ tự do như sau:
Khối đầu

Nhóm

Khối cuối

I

2(2,3,4,5)

5(8)

II

8(8,9,10,11,12,13

13(17)

III

17(17,18)


18(25)

IV

25(25,26,27)

27(…)

2.4. Phương pháp đếm (Couting).
Phương pháp đếm là sự biến đổi của phương pháp lập nhóm.
Trong phương pháp này, hệ thống lập danh sách quản lý địa chỉ của các khối
đĩa tự do đầu tiên và số lượng các khối đĩa tự do liên tục kế tiếp các khối đĩa đó.
Vd: Theo hình, ta có danh sách quản lý không gian nhớ tự do như sau:
Danh sách
2

Số lượng
4

8
17

6
2

25

3


3. Cơ cấu quản lý bộ nhớ Linux.
"Quản lý bộ nhớ" hạn liên quan đến các cơ chế thực hiện bởi một hệ thống
hoạt động để cung cấp các ứng dụng với các dịch vụ liên quan đến bộ nhớ.
Những dịch vụ này bao gồm việc sử dụng bộ nhớ ảo (sử dụng của một đĩa cứng
hoặc các phương tiện lưu trữ khác không-RAM cung cấp thêm bộ nhớ chương
trình), bảo vệ bộ nhớ (không bao gồm quyền truy cập vào một khu vực bộ nhớ
của một quá trình), và bộ nhớ chia sẻ (hợp tác xã tiếp cận với một khu vực của
bộ nhớ bằng nhiều quy trình).
Các dịch vụ quản lý bộ nhớ trong Linux được xây dựng trên một nền tảng lập
trình bao gồm một thiết bị ngoại vi được gọi là đơn vị quản lý bộ nhớ (MMU).
MMU dịch địa chỉ bộ nhớ vật lý đến các địa chỉ tuyến tính được sử dụng bởi hệ
điều hành, và yêu cầu một lỗi trang gián đoạn, khi CPU cố gắng truy cập bộ nhớ
rằng nó không có quyền.
Không phải tất cả các bộ xử lý có MMUs. Do đó, sự phân bố uClinux (Linux
cho vi điều khiển) hỗ trợ một không gian địa chỉ duy nhất hoạt động. Kiến trúc
này không bảo vệ được cung cấp bởi MMU, nhưng làm cho nó có thể cho Linux
để chạy trên một lớp học của vi xử lý.

8


Để hiểu biết thêm về cấu trúc của các dịch vụ MM, chúng ta cần phải biết rằng
một đơn vị cơ bản của bộ nhớ trong Linux là trang, một khu vực không chồng
chéo của bộ nhớ tiếp giáp. Tất cả các bộ nhớ có sẵn vật lý được tổ chức vào các
trang vào cuối của quá trình khởi động của hạt nhân. Kích thước trang phụ thuộc
vào kiến trúc vi xử lý. Thiết kế bộ vi xử lý thường cho phép có hai hoặc nhiều
hơn, đôi khi cùng một lúc, kích thước trang.
Kích thước trang truyền thống được sử dụng bởi Linux là 4096 byte.
Tuy nhiên, bằng cách sử dụng các trang bộ nhớ "như là" không phải là rất
thuận tiện. Thông thường, chúng ta cần phải phân bổ ít hơn một trang bộ nhớ.

Có khả năng như vậy trong Linux:
-Trong hạt nhân, bạn có thể phân bổ một trong các đối tượng hạt nhân nhỏ
bằng cách sử dụng cấp phát sàn.
-Bạn có thể cấp phát một khối bộ nhớ bằng kmalloc, nhưng nó sẽ phân bổ chỉ
có một khối kích thước lớn hơn gần nhất mà nó có.
-Trong chế độ người dùng, bạn có thể bố trí bất kỳ số lượng bộ nhớ bằng cách
sử dụng chức năng quản lý đống thực hiện trong thư viện chuẩn C.
-Bạn có thể tạo quản lý heap riêng của bạn trên đầu trang của các cuộc gọi hệ
thống hạt nhân Linux.
Để cung cấp một giao diện đơn giản để tương tác với đơn vị quản lý bộ nhớ và
thực hiện tương tác như vậy trong một cách cầm tay, trong Linux, hệ thống phụ
phân bổ và phát hành bộ nhớ được chia thành ba lớp. Các lớp này là:
-Bộ cấp phát Sàn.
-Bộ cấp phát Zone.
-Bộ cấp phát Buddy.

9


Đề án tổng thể của sự tương tác tất cả các lớp với mã chế độ người dùng và
phần cứng trông như sau:

Hình 3.1: Sơ đồ tổng quát của quản lý bộ nhớ trong Linux.
Lưu ý rằng trong Linux, hầu hết các chương trình trực tiếp hoặc gián tiếp sử
dụng quản lý đống tiêu chuẩn GCC C được gọi là Thư viện glibc, nhưng bạn vẫn
có thể viết quản lý heap riêng của bạn trên đầu trang của các cuộc gọi hệ thống
hạt nhân.
Như chúng ta có thể thấy trong hình, phân bổ, không gian người sử dụng luôn
luôn dẫn đến phân bổ hạt nhân. Bộ nhớ hạt nhân phân bổ bằng cách sử dụng
chuỗi ba cấp phát hạt nhân và bản đồ phân bổ các trang không gian địa chỉ của

quá trình, trong đó có yêu cầu phân bổ.
4. Dịch vụ Quản lý bộ nhớ.
4.1. Hệ thống Buddy.
Bộ cấp phát Buddy chịu trách nhiệm cho việc quản lý phân bổ trang trong toàn
bộ hệ thống. Mã này quản lý danh sách các trang vật lý tiếp giáp và bản đồ
chúng vào các bảng trang MMU để cung cấp các hệ thống con hạt nhân khác với
các phạm vi địa chỉ vật lý hợp lệ, khi các yêu cầu hạt nhân (lập bản đồ địa chỉ
vật lý ảo được xử lý bởi một lớp cao hơn của VM).

10


Bộ cấp phát Buddy chia bộ nhớ thành các cặp của các trang 2n trong đó n là
trong phạm vi từ 0 đến MAX_ORDER không đổi (được định nghĩa trong tập tin
tiêu đề <linux/mmzone.h>), và lưu trữ thông tin về các khối miễn phí của các
trang trong mảng các danh sách như sau:

Hình 4.1: Mảng danh sách các trang bộ nhớ trong bộ cấp phát Buddy.
Mỗi danh sách bao gồm các khối miễn phí về thể chất tiếp giáp của các trang
bộ nhớ 2i, trong đó i là một số danh sách. Mỗi của các khối như vậy, ngoại trừ
khối bao gồm 1 trang, có thể được chia thành hai nửa và được sử dụng như là 2
khối có kích thước 1/2.
Vì vậy, nếu không có mục tồn tại trong danh sách được yêu cầu, một mục
trong danh sách trên tiếp theo được chia thành hai cụm riêng biệt và là một trong
những trả lại cho người gọi trong khi một khác được thêm vào danh sách thấp
hơn kế tiếp.
Mặt khác, mỗi hai khối bộ nhớ có cùng kích thước, có biên giới chung (sắp
xếp trong bộ nhớ tuần tự, từ quan điểm của các địa chỉ vật lý), có thể được thống
nhất vào khối duy nhất của kích thước lớn hơn. Như vậy khối láng giềng được
gọi là Buddies.

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.
11


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 đề <linux/kmalloc_sizes.h>. Ngoài ra các hạt nhân có

12


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

13



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
14


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.
5. Các phương pháp cấp phát không gian nhớ tự do.
5.1. Cấp phát liên tục (Contiguous).

15


Để 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 5.1: 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.


16


+ 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ữ.
5.2. 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 5.2: Sơ đồ cấp phát liên kết.

17



5.3. 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 5.3: 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ố.
6. Lập lịch cho đĩa (Disk-scheduling).
6.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 (Latencytime)
+ 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.
6.2. Một số phương pháp lập lịch.
a. First come first served (FCFS).
18



Để 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

Hình 6.1: Phương pháp First come first served (FCFS).
- Ưu điểm:
+) Dễ lập trình
+) Các track cần truy xuất là liên tục
- Nhược điểm
+) Số track mà đầu đọc phải di chuyển là nhiều
+) Hiệu quả của thuật toán phụ thuộc vào thứ tự của các track trong hàng đợi
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:

19


53 - 65 - 67 - 37 - 14 - 98 - 122 - 124 – 183

Hình 6.2: Phương pháp Shortest Seek Time First (SSTF).
Ưu, nhược điểm SSTF
- Ưu điểm
Số track mà đầu đọc phải đi chuyển giảm
- Nhược điểm
Có thể gây ra 1 số yêu cầu không bao giờ được phục vụ

c. Thuật toán Scan.
Nội dung: Đầu đọc của đĩa di chuyển từ một phía (ví dụ bên ngoài hoặc bên
trong đĩa) sang phía kia để phục vụ các yêu cầu đọc, sau đó di chuyển ngược
lại... quá trình này lặp đi lặp lại
Ví dụ: File F1 được phân bổ lần lượt các track số thứ tự
:98,183,37,122,14,124,65,67
giả sử đầu đọc đang ở track 53
Tổng quãng đường dịch chuyển là 252

Hình 6.3: Phương pháp Scan

20


Đặc điểm:
- Phương thức hoạt động như thang máy
- Số bước đầu đọc phải di chuyển giảm
d. Thuật toán C-Scan.
- Nội dung: Đầu đọc chuyển từ một phía (trong/ngoài) sang phía kia và phục
vụ các yêu cầu. Khi sang đến phía kia, đầu đọc quay trở lại nhưng trong khi
quay trở lại không phục vụ yêu cầu nào (quét 1 chiều)
Ví dụ: File F1 được phân bổ lần lượt các track số thứ tự:
98,183,37,122,14,124,65,67
giả sử đầu đọc đang ở track 53
Số bước dịch chuyển của đầu từ 252

Hình 6.4: Phương pháp C-Scan
e. Thuật toán Look.
- Nội dung: tương tự như Scan nhưng trong thuật toán này đầu đọc ghi chỉ quét
trong phạm vi các track có nhu cầu phục vụ không quét tới track đầu tiên hoặc

cuối cùng
Ví dụ: File F1 được phân bổ lần lượt các track số thứ tự: 98, 183,
37,122,14,124,65,67
giả sử đầu đọc đang ở track 53
Số bước dịch chuyển của đầu từ 208

Hình 6.5: Phương pháp Look

21


f. Thuật toán C-Look
- Nội dung: Tương tự như Look nhưng đầu đọc ghi không phục vụ đường về
Ví dụ: File F1 được phân bổ lần lượt các track số thứ tự
:98,183,37,122,14,124,65,67
giả sử đầu đọc đang ở track 53

Hình 6.6: Phương pháp C-Look
Lựa chọn một giải thuật lập lịch đĩa:
- FCFS là thuật toán phù hợp khi các track cần truy xuất là liên tục.
- SSTF phổ biến và có hiệu quả tốt.
- SCAN và LOOK thích hợp cho những hệ thống phải truy xuất dữ liệu lớn.
6.3. Quản lý lỗi
Đĩa là đối tượng mà khi truy xuất có thể gây nhiều lỗi. Một trong số các lỗi
thường gặp là:
Lỗi lập trình : yêu cầu đọc các sector không tồn tại.
Lỗi lập trình xảy ra khi yêu cầu bộ điều khiển tìm kiếm cylinder không tồn tại,
đọc sector không tồn tại, dùng đầu đọc không tồn tại, hoặc vận chuyển vào và ra
bộ nhớ không tồn tại. Hầu hết các bộ điều khiển kiểm tra các tham số và sẽ báo
lỗi nếu không thích hợp.

Lỗi checksum tạm thời : gây ra bởi bụi trên đầu đọc.
Bụi tồn tại giữa đầu đọc và bề mặt đĩa sẽ gây ra lỗi đọc. Nếu lỗi tồn tại, khối có
thể bị đánh dấu hỏng bởi phần mềm.
Lỗi checksum thường trực : đĩa bị hư vật lý trên các khối.
Lỗi tìm kiếm : ví dụ đầu đọc đến cylinder 7 trong khi đó phải đọc 6.
Lỗi điều khiển : bộ điều khiển từ chối thi hành lệnh.
6.4. RAM Disks
Ý tưởng RAM disk khá đơn giản. Thiết bị khối là phần lưu trữ trung gian với hai
lệnh : đọc một khối và ghi một khối. Thông thường những khối này được lưu trữ
trên đĩa mềm hoặc đĩa cứng. RAM disk dùng một phần đã định vị trước của bộ
nhớ chính để lưu trữ các khối. RAM disk có ưu điểm là cho phép truy xuất
nhanh chóng (không phải chờ quay hay tìm kiếm). Như vậy nó thích hợp cho
việc lưu trữ những chương trình hay dữ liệu được truy xuất thường xuyên.

22


Hình 6.7: Bộ nhớ chính (RAM)
Hình trên mô tả ý tưởng của RAM disk. Một RAM disk được chia làm nhiều
khối, số lượng tùy thuộc vào dung lượng của vùng nhớ. Mỗi khối có cùng kích
thước và vừa đúng bằng kích thước của khối thực sự trên đĩa. Khi driver nhận
được chỉ thị là đọc hoặc ghi một khối, nó sẽ tìm trong bộ nhớ RAM disk vị trí
của khối, và thực hiện việc đọc hay ghi trong đó thay vì từ đĩa mềm hay đĩa
cứng.
6.5. Interleave
Bộ điều khiển đọc ghi đĩa phải thực hiện hai chức năng là đọc/ghi dữ liệu và
chuyển dữ liệu vào hệ thống. Để thực hiện được đồng bộ hai chức năng này, bộ
điều khiển đọc đĩa cung cấp chức năng interleave. Trên đĩa các sector số hiệu
liên tiếp nhau không nằm kế bên nhau mà có một khoảng cách nhất định,
khoảng cách này được xác định bởi quá trình format đĩa. Ví dụ : giả sử hệ thống

chỉ có 17 sector, và interleave được chọn là 4 thì các sector được bố trí theo thứ
tự như sau :
1, 14, 10, 6, 2, 15, 11, 7, 3, 16, 12, 8, 4, 17, 13, 9, 5
Cách đọc lần lượt như sau :
Lần 1:
1, 14, 10, 6, 2, 15, 11, 7, 3, 16, 12, 8, 4, 17, 13, 9, 5
Lần 2:
1, 14, 10, 6, 2, 15, 11, 7, 3, 16, 12, 8, 4, 17, 13, 9, 5
Lần 3:
1, 14, 10, 6, 2, 15, 11, 7, 3, 16, 12, 8, 4, 17, 13, 9, 5
Lần 4:
1, 14, 10, 6, 2, 15, 11, 7, 3, 16, 12, 8, 4, 17, 13, 9, 5
Như vậy sau bốn lần thứ tự các sector đọc được vẫn là từ 1 đến 17

23


7. Một số hệ thống file trong Linux.
7.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 đó.

trên đó.

“Y” – Chỉ chữ cái này xác định thiết bị mà phần chia nằm
“N” – Số cuối cùng biểu thị cho phần chia.

7.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

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

EXT 2
4 TB
2 GB
255 ký tự



- Đặc trưng:
+ Hệ thống tập tin Ext2 hỗ trợ các kiểu tập tin Unix chuẩn.
+ Hệ thống tập tin Ext2 cung cấp tên tập tin dài.
+ Hệ thống tập tin Ext2 dự trữ một vài block cho super user (root).
+ Hệ thống tập tin Ext2 cho phép truy xuất đến các hệ thống khác như
FAT, FAT32, MSDOS trên Windows 9.x và DOS một cách dễ dàng và ngược
lại.

24


×