1. Trang chủ >
  2. Luận Văn - Báo Cáo >
  3. Công nghệ thông tin >

Quản lý bộ nhớ (memory management):

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 (355.14 KB, 22 trang )


vi ệc r ất quan tr ọng đối v ới b ất k ỳ h ệ th ống máy tính cao c ấp nào vì

s ẽ có nhi ều cơng vi ệc được ti ến hành ở m ọi th ời đi ểm.

• Trong vi ệc qu ản lý b ộ nh ớ ấy, chúng ta có 2 lo ại b ộ nh ớ c ần qu ản lí,

đó là:

- Quản lý bộ nhớ thật.

- Quản lý bộ nhớ ảo:

 Quản lý bộ nhớ ảo phân trang.

 Quản lý bộ nhớ ảo phân đo ạn.

 Quản lý bộ nhớ ảo phân trang và phân đo ạn.

 Quản lý bộ nhớ của CPU Intel:

Với mục tiêu phải tương thích ng ược với các CPU đời c ũ

hơn, các CPU 80x86 (x>=3) cung c ấp 3 c ơ ch ế qu ản lý b ộ

nhớ :

1. real mode : đã có trong CPU 8088, CPU đượ c dùng để

xây dựng máy IBM PC đầu tiên. Đây là c ơ ch ế qu ản lý b ộ

nhớ thật dùng kỹ thuật phân đoạn (segmentation).

2. protected mode : đã có trong CPU 80286. Đây là c ơ ch ế

quản lý bộ nhớ ảo dùng kỹ thuật phân đoạn (segmentation).

3. 386 enchanced mode : mới thêm vào cho các CPU từ

80386 tr ở lên. Đây là c ơ ch ế qu ản lý b ộ nh ớ t ổng h ợp v ừa

phân đoạn vừa phân trang.



Chúng ta đã khái quát xong vi ệc Qu ản lý b ộ

nh ớ trong H ệ Đi ều Hành nói chung; V ậy v ới

H ệ Đi ều Hành riêng bi ệt nh ư Android thì

vi ệc qu ản lý b ộ nh ớ di ễn ra nh ư th ế nào?

Qu ản lý b ộ nh ớ c ủa ứng d ụng trong Android

Performance, một thứ vô cùng quan trọng đối với một ứng dụng trong

Android, ảnh hưởng trực tiếp đến cảm quan ng ười dùng, đặc biệt v ới các



ứng dụng quy mô lớn. Hôm nay chúng ta sẽ đến v ới bài nhập môn v ề

performance, đó là quản lý bộ nhớ của ứng dụng trong Android.

Random-access memory (RAM) là một nguồn tài nguyên quý giá trong bất

kỳ môi trườ ng phát tri ển ph ần m ềm nào, và nó còn có giá tr ị h ơn trên m ột

hệ điều hành di độ ng, nơi bộ nhớ vật lý thườ ng đượ c hạn chế. M ặc dù máy

ảo Dalvik Android thông thường sẽ thực hiện việc thu gom rác thải, nhưng

điều này cũng không cho phép bạn bỏ qua khi nào và nơi bạn đã cấp phát

hay giải phóng bộ nhớ.

Để cho các b ộ thu rác có thể l ấy lại b ộ nh ớ t ừ ứng d ụng, b ạn c ần tránh v ấn

đề memory leak và giải phóng b ất k ỳ m ột Refernce object nào t ại th ời đi ểm

thích hợp. Với phần lớn ứng dụng, bộ gom rác Dalvik sẽ s ử lý phần còn l ại:

hệ thống đòi cấp phát bộ nhớ khi object tươ ng ứng ròi kh ỏi ph ạm vi của

active thread của ứng dụng.

1. Cách để quản lý bộ nhớ ứng dụng Android



Android không cung cấp không gian trao đổi về bộ nhớ, nh ưng nó s ử

dụng paging và memory-mapping (mmapping) để quản lý bộ nhớ.

Nghĩa là b ất k ỳ b ộ nh ớ nào b ạn s ửa đổi cho dù b ằng cách c ấp phát

các đối t ượng m ới ho ặc động đến các trang mmapped -v ẫn th ường

trú trong bộ nhớ RAM và khơng thể được paged ra. Vì vậy, cách duy

nhất để hồn tồn giải phóng bộ nhớ từ ứng dụng của bạn là để phát

hành đối t ượng quan h ệ b ạn có th ể n ắm gi ữ, làm cho b ộ nh ớ có th ể

được giải phóng. Đó là với m ột ngoại lệ: bất kỳ tập tin mmapped trong

mà không s ửa đổi, ch ẳng h ạn nh ư mã s ố, có th ể đượ c paged ra RAM

nếu hệ thống muốn sử dụng bộ nhớ ở nơi khác.

2. Chia sẻ bộ nhớ



Để làm phù hợp tất cả mọi thứ nó cần trong bộ nhớ RAM, Android sẽ

c ố g ắng để chia s ẻ các trang b ộ nh ớ RAM trên quy trình. Nó có th ể

làm như vậy trong các cách sau:

o



M ỗi m ột ti ến trình ứng d ụng đượ c chia ra t ừ m ột ti ến trình có

s ẵn có tên Zygote. Ti ến trình Zygote b ắt đầ u khi khi h ệ th ống

kh ởi độ ng và load các mã framework và resource chung (gi ống



nh ư activity theme). Để b ắt đầ u m ột ứng d ụng ti ến trình m ới, h ệ

th ống chia ti ến trình Zygote ra, sau đó load và ch ạy code c ủa

ứng d ụng trong m ột ti ến trình m ới. Đi ều này cho phép h ầu h ết

các trang b ộ nh ớ RAM c ấp phát cho code framework và

resource có th ể chia s ẻ cho t ất c ả các ti ến trình trong app.

o



H ầu h ết d ữ li ệu t ĩnh đượ c ánh x ạ vào m ột ti ến trình. Đi ều này

không chỉ cho phép cùng m ột d ữ li ệu đượ c chia s ẻ gi ữa các

ti ến trình mà còn cho phép nó đượ c paged ra khi c ần thi ết.



o



Ở nhi ều n ơi, Android chia s ẻ RAM động qua quá trình s ử d ụng

được phân b ổ m ột cách rõ ràng các vùng b ộ nh ớ chia s ẻ (ho ặc

v ới ashmem ho ặc gralloc). Ví d ụ, b ề m ặt c ửa s ổ s ử d ụng b ộ

nh ớ gi ữa các ứng d ụng và màn hình compositor chia s ẻ, và b ộ

đệm con tr ỏ s ử d ụng b ộ nh ớ gi ữa các nhà cung c ấp n ội dung

và khách hàng chia s ẻ.



3. Cấp phát và đòi bộ nhớ sau đây là một điều về cách Android cấp phát



và thu hồi bộ nhớ trong app:

o



Dalvik heap cho m ỗi quá trình đượ c h ạn ch ế đế n m ột ph ạm vi

b ộ nh ớ ảo duy nh ất. Đi ều này xác đị nh kích th ước heap h ợp lý,

có th ể phát tri ển nh ư nó c ần ph ải (nh ưng ch ỉ đế n m ột gi ới h ạn

mà h ệ th ống đị nh ngh ĩa cho m ỗi ứng d ụng).



o



Kích th ước h ợp lý c ủa heap không gi ống nh ư s ố l ượng b ộ nh ớ

v ật lý đượ c s ử d ụng b ởi nó. Khi ki ểm tra heap c ủa ứng d ụng,

Android tính m ột giá tr ị g ọi là t ỉ l ệ Set Kích th ước (PSS), chi ếm

c ả các trang dirty và clean đượ c chia s ẻ v ới các quá trình khác,

nh ưng chỉ trong t ổng s ố đó là t ỷ l ệ thu ận v ới s ố ứng d ụng đượ c

chia s ẻ RAM. (PSS) t ổng s ố này là nh ững gì h ệ th ống coi là b ộ

nh ớ v ật lý c ủa b ạn.



o



Các heap Dalvik khơng thu g ọn kích th ước v ật lý c ủa heap, có

ngh ĩa r ằng Android khơng ch ống phân m ảnh heap để d ồn l ại

khơng gian. Android chỉ có th ể thu nh ỏ kích th ước heap h ợp lý

khi có khơng gian ch ưa s ử d ụng vào cu ối heap. Nh ưng đi ều này

khơng có ngh ĩa là b ộ nh ớ v ật lý đượ c s ử d ụng b ởi các heap



không th ể co l ại. Sau khi thu gom rác th ải, Dalvik d ẫn heap và

tìm các trang khơng s ử d ụng, sau đó tr ả l ại nh ững trang này v ề

kernel s ử d ụng madvise. C ải t ạo b ộ nh ớ t ừ phân b ổ nh ỏ có th ể

có hi ệu qu ả vì các trang được s ử d ụng cho m ột phân b ổ nh ỏ

v ẫn có th ể đượ c chia s ẻ v ới nh ững trang khác mà ch ưa được

gi ải phóng.

4. Hạn chế bộ nhớ ứng dụng



Để duy trì một mơi trường chức năng mutil-task, Android đặt một gi ới

hạn c ứng v ề kích th ước heap cho m ỗi ứng d ụng. Gi ới h ạn kích th ước

heap chính xác thay đổi giữa các thiết bị dựa trên tổng RAM mà thi ết

bị có s ẵn. N ếu ứng d ụng c ủa b ạn đã đạt đến gi ới h ạn s ức ch ứa c ủa

nó và c ố g ắng để c ấp phát b ộ nh ớ h ơn, nó s ẽ nh ận đượ c m ột

OutOfMemoryError.

Trong một số trường hợp, bạn có thể muốn truy vấn hệ thống để xác

định chính xác bao nhiêu khơng gian heap b ạn đã có s ẵn trên thi ết bị

hiện tại, để xác định có bao nhiêu dữ liệu an toàn để giữ trong bộ nh ớ

cache. B ạn có th ể truy v ấn h ệ th ống cho con s ố này b ằng cách g ọi

getMemoryClass (). Nó trả về một số nguyên cho biết số lượng của

MB có s ẵn cho heap c ủa ứng d ụng c ủa b ạn.

5. Chuyển các ứng dụng



Thay vì sử dụng khơng gian trao đổi khi người dùng chuyển đổi gi ữa

các ứng dụng, Android giữ các quy trình mà khơng được lưu trữ tại

một nền trước ( "người dùng có thể nhìn thấy") thành phần ứng dụng

trong một cache LRU (least-recently used). Ví dụ, khi người dùng đầu

tiên ra m ắt m ột ứng d ụng, m ột ti ến trình đượ c t ạo ra cho nó, nh ưng

khi người dùng rời khỏi ứng dụng, quá trình này khơng thốt. Hệ

thống này giúp q trình được lưu trữ, vì vậy nếu người dùng sau đó

trở lại ứng dụng, tiến trình này được sử dụng lại cho các ứng dụng

chuyển đổi nhanh hơn.

N ếu ứng d ụng c ủa b ạn có m ột ti ến trình trình l ưu tr ữ và nó v ẫn nh ớ

r ằng hi ện t ại nó khơng c ần, k ể c ả ng ười dùng không s ử d ụng nó, làm

hạn chế hiệu suất tổng thể của hệ thống. Vì vậy, khi hệ th ống ch ạy



chậm trên bộ nhớ, nó có thể kill các quy trình trong bộ nhớ cache

LRU b ắt đầu v ới quá trình ít được s ử d ụng nh ất, nh ưng c ũng đưa ra

một số xem xét đối với các quy trình có nhiều bộ nhớ chun sâu.



3.Quản lý hệ thống lưu trữ ( Hệ thống tập tin / Hệ thống File):





Trong điện tốn, một hệ thống file (hay hệ thống tập tin, tiếng Anh

là filesystem) kiểm soát cách lưu trữ và truy xuất dữ liệu. Khơng có

hệ thống file, thông tin được lưu trong các phương tiện lưu trữ sẽ là

một khối dữ liệu lớn mà khơng có cách nào để bi ết n ơi m ột ph ần

thông tin d ừng l ại và ph ần ti ếp theo b ắt đầu. B ằng cách tách d ữ li ệu

thành t ừng m ảnh và đặt tên cho m ỗi m ảnh, thông tin d ễ dàng được

phân tách và xác định. Lấy tên từ cách đặt tên cho các hệ thống

thông tin trên gi ấy, m ỗi nhóm d ữ li ệu được g ọi là "file". Cấu trúc và

quy t ắc logic được s ử d ụng để qu ản lý các nhóm thơng tin và tên c ủa

chúng được gọi là "hệ thống file”. ( Theo vi.wikipedia.org )



V ậy v ới Androi thì H ệ đi ều hành l ưu tr ữ File và

Data nh ư nh ư th ế nào?

Mình sẽ giới thiệu cho bạn những cách lưu trữ dữ liệu có sẵn mà

Android cung cấp:

Internal file storage: Lưu trữ các file riêng tư của ứng dụng (appprivate files) trong hệ thống file của thiết bị.

External file storage: Lưu trữ file trên hệ thống file chia sẻ ra được

bên ngoài. Thường dùng cho các file mà người dùng được chia sẽ,

chẳng hạn như hình ảnh, video.

Shared Preferences: Lưu trữ dữ liệu nguyên thủy bởi các cặp keyvalue.

Database: Lưu trữ các dữ liệu có cấu trúc trong cơ sở dữ liệu private.



Ngoại trư một số loại file trên External Storage, thì tất cả các cách

lưu trữ này dành cho dữ liệu riêng tư của ứng dụng - dữ liệu không

thể truy cập tự nhiên vào các ứng dụng khác. Nếu bạn muốn chia sẻ

file với các ứng dụng khác bạn nên sử dụng FileProvider API

Nếu bạn muốn chia sẻ dữ liệu cho ứng dụng khác sử dụng bạn có thể

dùng Content Provider. Content Provider đưa cho bạn tồn quyền

kiểm sốt quyền read/write có sẵn cho các ứng dụng khác, bất kể

các thức bạn đã lưu trữ dữ liệu (mặc dù thường là database).

1. Internal storage.



Theo mặc định thì các files được lưu vào Internal Storage (bộ nhớ

trong) sẽ là private đối với ứng dụng của bạn, và các ứng dụng khác

sẽ không kết nối được (người dùng cũng khơng được trừ khi chúng có

quyền truy cập root). Điều này làm cho Internal Storage là một nơi

lưu trữ dữ liệu tốt mà người dùng không cần truy cập trực tiếp. Hệ

thống cung cấp một private directory trong hệ thống file cho mỗi ứng

dụng, nơi bạn có thể sắp xếp bất kì tệp nào mà ứng dụng của bạn

cần.

Khi người dùng gỡ cài đặt ứng dụng của bạn, các file được lưu

trữ trong Internal Storage được xóa bỏ. Bởi do hành vi này mà bạn



Xem Thêm
Tải bản đầy đủ (.docx) (22 trang)

×