1. Trang chủ
  2. » Thể loại khác

NGHIÊN CỨU TÌM HIỂU VỀ QUẢN LÝ BỘ NHỚ NGOÀI TRONG HỆ ĐIỀU HÀNH LINUX

21 1,6K 15

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 626,02 KB

Nội dung

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.. Có k

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI

KHOA CÔNG NGHỆ THÔNG TIN

Trang 2

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI

ĐỀ TÀI: NGHIÊN CỨU TÌM HIỂU VỀ QUẢN LÝ BỘ NHỚ NGOÀI TRONG HỆ ĐIỀU HÀNH LINUX

GV hướng dẫn: Thạc sĩ Nguyễn Tuấn Tú

Nhóm thực hiện: Vũ Tiến Long Vương Quốc Huỳnh

Nguyễn Thanh Tú Phạm Duy Đạt Nguyễn Trung Huy

Trang 3

MỤC LỤC

Lời nói đầu 3

1 Các khái niệm cơ bản 5

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

2.1 Phương pháp Bit vector 7

2.2 Phương pháp liệt kê (List) 8

2.3 Phương pháp lập nhóm (Grouping) 8

2.4 Phương pháp đếm (Couting) 8

3.Cơ cấu quản lý bộ nhớ Linux 9

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 12

4.3 MMU -Tóm tắt thông tin 14

4.4 Cấp phát liên kết (Linked) 16

4.5 Cấp phát theo chỉ số (Index) 17

5 Lập lịch cho đĩa (Disk-scheduling) 17

5.1 Khái niệm Disk-scheduling 17

5.2 Một số phương pháp lập lịch 18

6 Một số hệ thống file trong Linux 18

6.1 Giới thiệu 18

6.2 Hệ thống Ext 2 19

6.3 Hệ thống EXT 3 19

6.4 Hệ thống Ext4 20

Trang 4

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

Trang 5

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ủaLinux

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

Trang 6

Logo hệ điều hành Android.

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

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

Trang 7

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

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

Trang 8

Hình 2.1: 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:

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

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

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 Số lượng

Trang 9

17 2

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ý

Để 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ướclớ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

Trang 10

-Bộ cấp phát Zone.

-Bộ cấp phát Buddy

Đề á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ổ

Trang 11

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

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

Trang 12

-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ó 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:

Ngày đăng: 16/04/2017, 12:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w