Thuyết trình lưu chữ dữ liệu - Pdf 65

THUYẾT TRÌNH NHÚNG
ĐỀ TÀI : LƯU TRỮ DỮ LIỆU
Thành viên thực hiện:
Phan Ngọc Châu T076274
Nguyễn Trí Ðạt T077033
Ðặng Tiến Lâm T076339
Lưu Thị Bảo Ngân T072923
Nguyễn Thị Lan Phương T073773
I/ Lưu trữ dữ liệu:
Lưu trữ trên hệ thống nhúng được thực hiện bằng cách sử dụng ROM cho việc lưu
trữ của đọc-mã và NVRAM cho việc lưu trữ cho các đọc-ghi dữ liệu. Tuy
nhiên, đã được thay thế bởi công nghệ flash, cung cấp nonvol mật độ cao atile lưu
trữ. Những lợi thế kết hợp với chi phí thấp của đèn flash có cách sử dụng tăng lên
đáng kể trong các hệ thống nhúng. Chương này bàn về các hệ thống lưu trữ chủ
yếu trên các thiết bị đèn flash và hệ thống tập tin khác nhau có sẵn trên Linux có
nghĩa là cho các hệ thống nhúng. Chương này được chia thành bốn phần.
+ Flash nhúng bản đồ cho Linux.
+Sự hiểu biết MTD (Memory Công nghệ điều khiển) có nghĩa là hệ thống con
chủ yếu cho các thiết bị đèn flash.
+ Sự hiểu biết hệ thống tập tin liên kết với các hệ thống nhúng. Ở đó chuyên hệ
thống tập tin trên bộ nhớ flash và trên bo mạch cho nhúng hệ thống.
+Chỉnh cho không gian lưu trữ thêm: kỹ thuật để siết chặt thêm các chương
trình lên đèn flash của bạn.
1.1 Flash Bản đồ
Trên một hệ thống Linux nhúng, đèn flash thường được sử dụng cho:
+ Lưu trữ các bộ tải khởi động
+ Lưu trữ hình ảnh hệ điều hành
+ Lưu trữ các ứng dụng và ứng dụng thư viện hình ảnh
+ Lưu trữ các đọc-ghi tập tin (có dữ liệu cấu hình)
Trong 4 phần , phần thứ 3 đầu tiên là chỉ đọc cho hầu hết các hệ thống thực
thi thời gian (ngoại trừ ở lần nâng cấp). Đó là nếu bạn sử dụng một bộ tải khởi

và khi nào và làm thế nào để bạn bao gồm các thiết bị đèn flash theo một
MTD hệ thống con? Làm thế nào để đặt hệ thống tập tin trên một thiết bị MTD?
Sau đây là phần trả lời cho những câu hỏi này.
1.2.1 Các Mẫu MTD
Mặc dù các thiết bị đèn flash là thiết bị lưu trữ như đĩa cứng, có một số cơ bản
khác biệt giữa chúng.
+ Thông thường các ổ đĩa cứng có một khu vực kinh tế mà chia một kích
thước trang là 4.096 byte. Giá trị tiêu chuẩn là 512 byte. Các mô hình hệ thống
tập tin Linux, đặc biệt là bộ nhớ cache bộ đệm (cache bộ nhớ giữa một hệ thống
tập tin và thiết bị khối lớp), là dựa trên giả định này. Flash chip trên Mặt khác
có kích cỡ khu vực kinh tế lớn; kích thước chuẩn là 64 K.
+ Flash lĩnh vực bình thường có thể xoá hoàn toàn trước khi viết thư này để
cho họ; cách viết và xóa các hoạt động có thể được độc lập tùy thuộc vào phần
mềm sử dụng đèn flash.
+Flash chip có một đời giới hạn được quy định tại các điều khoản của
số, của khu vực kinh tế một lần là bị xóa. Vì vậy, nếu một lĩnh vực cụ thể là
nhận bằng văn bản rất thường xuyên của tuổi thọ được rút ngắn. Để ngăn chặn
này, viết cho một đèn flash
cần phải được phân phối cho tất cả các lĩnh vực. Điều này được gọi mặc và san
lấp mặt bằng không được hỗ trợ bởi các thiết bị khối.
+Bình thường các hệ thống tập tin không thể được sử dụng trên một đèn
flash vì những đi thông qua bộ nhớ cache bộ đệm. Bình thường đĩa IO chậm; để
tăng tốc độ nó lên một bộ nhớ cache trong bộ nhớ được gọi là cửa hàng đệm
cache của IO dữ liệu vào đĩa. Trừ khi dữ liệu này được flushed trở lại đĩa, hệ
thống tập tin là trong một không phù hợp nói. Tuy nhiên, các hệ thống nhúng có
thể được cung off mà không tắt máy phù hợp và vẫn còn có dữ liệu phù hợp;
như vậy thường tập tin hệ thống và thiết bị chặn mô hình không đi tốt với
nhúng hệ thống.
Các phương pháp truyền thống để truy cập flash được sử dụng để được
thông qua FTL( Flash Translation Layer). Lớp này mô phỏng một thiết bị chặn

đèn flash và cấu hình lại chính nó. MTD hỗ trợ CFI tập lệnh của Intel và AMD.
1.2.3 Flash Disk
Ổ Flash được giới thiệu cho các ứng dụng lưu trữ hàng loạt. Như tên gọi của họ
cho thấy, ổ đĩa flash có nghĩa là ổ đĩa cục bộ trên một hệ thống dựa trên công
nghệ flash. Đĩa Flash nữa đi theo hai hương vị: ATA-based và tuyến tính.
1.
2. Table 4.1 NOR versus NAND Flash
NOR NAND
Các dữ liệu có thể được truy cập
tại ngẫu nhiên như SRAM. Cái
hoạt động từ ngày flash có thể
được:
+ Đọc thói quen: Đọc nội dung
của flash.
+Xoá bỏ thói quen: Xoá bỏ
là quá trình thực hiện tất cả
các bit trên một đèn flash 1. Xoá
bỏ về các chip NOR xảy ra
Các chip NAND chia lưu
trữ thành các khối, được chia
thành trang một lần nữa. Mỗi
trang được chia vào dữ liệu
thường xuyên và out-of-
band dữ liệu. The out-of-dữ
liệu ban nhạc được sử dụng để
lưu trữ các siêu dữ liệu như
ECC (Error-Correction Code)
và dữ liệu xấu chặn thông tin.
Truy cập
dữ liệu

thực hiện bởi kết nối dữ liệu
và lệnh đường đến thường
dòng IO 8 ngày chip flash.
Execution o
code
Mã số có thể được thực thi trực
tiếp từ NOR vì nó được kết nối
trực tiếp đến địa chỉ / dữ liệu bus
Nếu mã là trong flash NAND
nó cần đến được sao chép vào
bộ nhớ cho thực hiện.
Performanc Flash NOR được đặc trưng bằng
cách xóa chậm, chậm viết, và
nhanh chóng đọc.
Flash NAND được đặc trưng
bởi nhanh xóa, nhanh chóng
viết, và đọc nhanh.
Bad blocks Chip flash NOR không dự kiến
sẽ có xấu khối bởi vì họ có được
thiết kế để giữ hệ thống dữ liệu.
Những nhấp nháy được thiết
kế một về cơ bản là một thiết
bị lưu trữ giá thấp hơn, do đó,
mong rằng họ có khối xấu.
Thông thường các chip flash
đến với xấu đánh dấu trong
lĩnh vực này. Cũng NAND
flash bị nhiều lĩnh vực các vấn
đề của bit flipping nơi một
chút lộn khi nhận được bằng

6 xóa chu kỳ).
3. ATA dựa trên đĩa flash sử dụng giao diện đĩa tiêu chuẩn cho giao diện trên
bo mạch chủ, để họ xuất hiện như là IDE đĩa trên hệ thống. Một bộ điều
khiển ngồi trên các silic giống như đèn flash, nhưng không thực hiện FTL để
bản đồ flash đến lĩnh vực. Ngoài ra, nó thực hiện các giao thức để đĩa
flash xuất hiện như một đĩa bình thường vào hệ thống. Đây là phương pháp
lấy bằng CompactFlash thiết kế. Ưu điểm chính của việc sử dụng cách tiếp
cận này được phần mềm tương thích nhưng bất lợi là nó đã được đắt hơn bởi
vì các giải pháp toàn diện đã được thực hiện trong phần cứng. Linux xử lý
các thiết bị này như thường xuyên thiết bị IDE và trình điều khiển cho các
thiết bị này có thể được tìm thấy trong drivers / ide thư mục.
Các đĩa flash tuyến tính là cơ chế đó là làm việc của các M2000 hệ thống.
Đây là những NAND dựa trên các thiết bị có khả năng khởi động (nó có
một ROM khởi động được chấp nhận như là một phần mở rộng BIOS), một
bộ điều khiển mỏng mà sử dụng các thuật toán sửa lỗi, và phần mềm nào các
trueFFFS FTL thi đua. Vì thế những thiết bị này có thể được sử dụng để trực
tiếp khởi động hệ thống và có thể được sử dụng để chạy các hệ thống tập tin
thường xuyên trên một thiết bị blocklike. Những cái này ít tốn kém khi so
sánh với các nhấp nháy nhỏ gọn nhưng tại cùng một thời gian cho tất cả các
tính năng cần thiết như là một thiết bị chặn. Bởi vì người truy cập
những thiết bị đèn flash tương tự như một thiết bị truy cập vào bộ nhớ,
Linux thực hiện các trình điều khiển cho các mô hình theo MTD.
1,3 MTD Kiến trúc
Một thiết bị flash-based:
+Linux hỗ trợ các trình điều khiển đèn flash của tôi, nếu không làm cách nào để
cổng driver?
+ Nếu trình điều khiển Linux hỗ trợ đèn flash của tôi, làm cách nào để làm
cho nó phát hiện các flash trên
- Các MTD kiến trúc này được chia thành các thành phần sau:
-MTD Điểm: này cung cấp giao diện giữa các trình điều khiển đèn flash thấp

- Đình chỉ () / phục hồi ()
+Chức năng cho chip NAND chỉ
- Read_ecc () / write_ecc ()
- Read_oob () / write_oob ()
Nếu bạn có một CFI-bật đèn flash NOR hoặc IO một thiết bị tiêu chuẩn ánh
xạ 8 -- bit chip NAND. Nếu không, bạn cần phải thực hiện điều khiển MTD.
Một số thói quen có thể yêu cầu phần cứng hỗ trợ, vì thế bạn cần kiểm tra bảng
đèn flash dữ liệu của bạn để thực hiện các chức năng.
Mục dưới đây cho các mô tả về công việc khác hơn là đọc (), viết (), và xóa ()
thói quen.
+ khóa () và mở khóa (): Đây là được sử dụng để thực hiện flash khóa; một
phần flash được có thể viết hay xóa bảo vệ để ngăn chặn tình cờ ghi đè của
hình ảnh. Ví dụ, bạn có thể khóa tất cả các phân vùng trên mà bạn có chỉ đọc hệ
thống tập tin cho hầu hết các hệ thống thực thi trừ khi nâng cấp xong. Đây là
những xuất khẩu sang các applications người sử dụng ioctls MEMLOCK và
MEMUNLOCK.
+ đồng bộ (): Điều này được gọi là khi một thiết bị được đóng cửa hoặc phát
hành và nó bảo đảm rằng đèn flash là trong trạng thái an toàn.
+đình chỉ () andresume (): Đây là những chỉ hữu dụng khi bạn
bật CONFIG_PM lựa chọn xây dựng hạt nhân.
+ read_ecc () và write_ecc (): Những thói quen áp dụng cho flash NAND
chỉ. ECC là sửa chữa sai sót mã được sử dụng để phát hiện bất kỳ bit xấu trong
một trang. Những thói quen hành xử như là đọc bình thường () / ghi (), ngoại
trừ rằng một bộ đệm riêng biệt có chứa ECC cũng đọc hay viết cùng với các dữ
liệu.
+read_oob () và write_oob (): Những thói quen áp dụng cho flash NAND
chỉ. Mỗi flash NAND được chia thành hai 256 - hoặc 512-trang byte; mỗi của
các trang này có chứa một bổ sung 8 - hoặc 16-byte phụ tùng khu vực được gọi
là out -dữ liệu của ban nhạc, các cửa hàng của ECC, xấu chặn thông tin, và tập
tin bất kỳ hệ thống dữ liệu phụ thuộc. Các chức năng này được sử dụng để truy

9. #include <linux/errno.h>
10.#include <linux/interrupt.h>
11.#include <linux/mtd/map.h>
12.#include <linux/mtd/mtd.h>
13.#include <linux/mtd/cfi.h>
14.#include <linux/delay.h>
15.
16.Now we put all the APIs/macros that we expect the user to define.
17.
18.#define DUMMY_FLASH_ERASE_SIZE
19.#define PROBE_FLASH(map)
20.#define WRITE_FLASH_ONE_WORD(map, start, addr, data)
21.#define ERASE_FLASH_SECTOR(map, start, addr)
22.#define DUMMY_FLASH_ERASE_TIME
23.#define DUMMY_FLASH_SIZE
24. Một lời giải thích ngắn gọn về các đối số được truyền cho các API ở trên là
như sau.
- Bản đồ: Đây là một con trỏ đến một cấu trúc map_info tuyên bố trong
tiêu đề
file include / linux / mtd / map.h. Cấu trúc này được giải thích thêm
chi tiết tại mục 4.5.
-bắt đầu: Đây là địa chỉ bắt đầu của chip flash NOR. Đây là địa chỉ
thường được sử dụng cho các lập trình flash với lệnh xóa hoặc
ghi dữ liệu.
- addr: Đây là địa chỉ bù đắp từ chipâ € ™ s bắt đầu, nơi dữ liệu
cần phải được viết hoặc khu vực cần phải được xoá hoàn toàn.
- dữ liệu: đối số này cho viết API là một 32-bit, từ đó xác định những

cần phải được bằng văn bản tại địa chỉ được chỉ định.
Tiếp theo, chúng tôi xác định một cấu trúc chứa thông tin cá nhân để đèn

dummy_flash_init () và các chức năng thoát dummy_flash_exit (). Cái
hầu hết các lĩnh vực quan trọng là probethat. được gọi là để phát hiện nếu
một flash của một đặc biệt là loại có mặt tại một địa chỉ được chỉ định ở trên
diễn đàn. Lớp MTD duy trì một danh sách các cấu trúc. Những thói quen
thăm dò được truy cập khi
do_map_probe thường trình () được gọi bằng đèn flash, lập bản đồ điều
khiển.
42.static struct mtd_chip_driver dummy_chipdrv =
43.{
44..probe = dummy_probe,
45..destroy = dummy_destroy,
46..name = "dummy_probe",
47..module = THIS_MODULE
48.};
49. Bây giờ chúng tôi xác định những thói quen thăm dò. Chức năng này xác
nhận nếu một đèn flash có thể được tìm thấy tại bản đồ địa chỉ-> virt, được
làm đầy bởi các trình điều khiển lập bản đồ. Nếu nó là có thể phát hiện một
đèn flash, sau đó nó phân bổ cơ cấu mtd và dummy_private_info cấu trúc.
Cơ cấu mtd là đầy khác nhau driver thói quen như đọc, viết, xóa, vv. Cái cơ
cấu dummy_private_info là đầy đèn flash thông tin cụ thể. Tại chức năng
thăm dò là những hàng đợi chờ và mutex này. Đây là được sử dụng để ngăn
chặn đồng thời truy cập vào flash, mà là một yêu cầu cho hầu hết các thiết bị
đèn flash. Do đó bất cứ khi nào một hoạt động như đọc hoặc viết cần phải
được thực hiện, Điều này được thực hiện bằng cách sử dụng lĩnh vực nhà
nước, được thiết lập để FL_READY lúc khởi tạo. Nếu đèn flash là đang
được sử dụng, sau đó tiến trình cần chặn trên hàng đợi chờ cho đến khi nó
được đánh thức. Các mutex (spinlock) được dùng để ngăn ngừa những vấn
đề chủng tộc trên SMP sự mua trước máy hoặc trong trường hợp được kích
hoạt.
Tiếp theo, chúng tôi đi đến thói quen đọc. Những thói quen đọc đăng ký

65.memset(dummy_private_info, 0, sizeof(*dummy_private_info));
66.
67./* The probe function returns the number of chips identified */
68.dummy_private_info->number_of_chips = PROBE_FLASH(map);
69.if(!dummy_private_info->number_of_chips)
70.{
71.kfree(mtd);
72.return NULL;
73.}
74.
75./* Initialize mtd structure */
76.memset(mtd, 0, sizeof(*mtd));
77.mtd->erasesize = DUMMY_FLASH_ERASE_SIZE;
78.mtd->size = dummy_private_info->number_of_chips *
DUMMY_FLASH_SIZE;
79.for(size = mtd->size; size > 1; size >>= 1)
80.dummy_private_info->chipshift++;
81.mtd->priv = map;
82.mtd->type = MTD_NORFLASH;
83.mtd->flags = MTD_CAP_NORFLASH;
84.mtd->name = "DUMMY";
85.mtd->erase = dummy_flash_erase;
86.mtd->read = dummy_flash_read;
87.mtd->write = dummy_flash_write;
88.mtd->sync = dummy_flash_sync;
89.
90.dummy_private_info->chips = kmalloc(sizeof(struct flchip) *
91.dummy_private_info->number_of_chips, GFP_KERNEL);
92.memset(dummy_private_info->chips, 0,
93.sizeof(*(dummy_private_info->chips)));

123. set_current_state(TASK_UNINTERRUPTIBLE);
124. add_wait_queue(&chip->wq, &wait);
125. spin_unlock(chip->mutex);
126. schedule();
127. remove_wait_queue(&chip->wq, &wait);
128. if(signal_pending(current))
129. return -EINTR;
130. goto again;
131. }
132.
133. addr += chip->start;
134. chip->state = FL_READY;
135. map_copy_from(map, buf, addr, len);
136. wake_up(&chip->wq);
137. spin_unlock(chip->mutex);
138. return 0;
139. }
140.
141. static int dummy_flash_read(struct mtd_info *mtd, loff_t from,
142. size_t len,size_t *retlen, u_char *buf)
143. {
144. struct map_info *map = mtd->priv;
145. struct dummy_private_info_struct *priv = map->fldrv_priv;
146. int chipnum = 0;
147. int ret = 0;
148. unsigned int ofs;
149. *retlen = 0;
150.
151. /* Find the chip number and offset for the first chip */
152. chipnum = (from >> priv->chipshift);

mục 4,4 để thực hiện xóa thói quen.
Chức năng đồng bộ được gọi khi các thiết bị đèn flash được đóng lại.
Chức năng này có để đảm bảo rằng không có các chip flash đang sử dụng tại
thời điểm đóng cửa;
nếu sau đó chức năng làm cho quá trình kêu gọi chờ đợi cho đến khi tất cả
các con chip đi vào tình trạng không sử dụng, mục 4,5 cho các chức năng
đồng bộ flash dummy thực hiện.
Chức năng dummy_destroyis gọi trong trường hợp điều khiển đèn flash
được tải
như là một mô-đun. Khi đun được bốc dỡ, các dummy_destroy chức năng
() hiện tất cả các dọn dẹp.
179. static void dummy_destroy(struct mtd_info *mtd)
180. {
181. struct dummy_private_info_struct *priv =
182. ((struct map_info *)mtd->priv)->fldrv_priv;
183. kfree(priv->chips);


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status