1. Trang chủ
  2. » Luận Văn - Báo Cáo

Truy lỗi xâm phạm vùng nhớ trong hệ thống nhúng bằng fpga

124 13 0

Đ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 124
Dung lượng 2,57 MB

Nội dung

Đại Học Quốc Gia Tp Hồ Chí Minh TRƯỜNG ĐẠI HỌC BÁCH KHOA HỒ NAM TRUY LỖI XÂM PHẠM VÙNG NHỚ TRONG HỆ THỐNG NHÚNG BẰNG FPGA Chuyên ngành: Khoa Học Máy Tính LUẬN VĂN THẠC SĨ TP HỒ CHÍ MINH, tháng 07 năm 2010 TRƯỜNG ĐẠI HỌC BÁCH KHOA Khoa Khoa học & Kỹ thuật Máy tính CỘNG HOÀ Xà HỘI CHỦ NGHIà VIỆT NAM Độc Lập - Tự Do - Hạnh Phúc -oOo Tp HCM, ngày 02 tháng 07 năm 2010 NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên: Hồ Nam Giới tính: Nam ;/ Nữ … Ngày, tháng, năm sinh: 30/05/1982 Nơi sinh: Nghi Lộc, Nghệ An Chuyên ngành: Khoa học Máy tính MSHV: 00708739 Khoá: 2008 1- TÊN ĐỀ TÀI : TRUY LỖI XÂM PHẠM VÙNG NHỚ TRONG HỆ THỐNG NHÚNG BẰNG FPGA 2- NHIỆM VỤ LUẬN VĂN : 3- NGÀY GIAO NHIỆM VỤ : 4- NGÀY HOÀN THÀNH NHIỆM VỤ : 5- HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN : TS Đinh Đức Anh Vũ Nội dung đề cương Luận văn thạc sĩ Hội Đồng Chuyên Ngành thông qua CÁN BỘ HƯỚNG DẪN (Họ tên chữ ký) CHỦ NHIỆM BỘ MÔN QUẢN LÝ CHUYÊN NGÀNH (Họ tên chữ ký) TS Đinh Đức Anh Vũ TS Đinh Đức Anh Vũ CƠNG TRÌNH ĐƯỢC HỒN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH Cán hướng dẫn khoa học : TS Đinh Đức Anh Vũ Cán chấm nhận xét 1: Cán chấm nhận xét 2: Luận văn thạc sĩ bảo vệ Trường Đại học Bách Khoa, ĐHQG Tp HCM ngày tháng năm 2010 Thành phần Hội đồng đánh giá luận văn thạc sĩ gồm: Xác nhận Chủ tịch Hội đồng đánh giá LV Bộ môn quản lý chuyên ngành sau luận văn sửa chữa (nếu có) Chủ tịch Hội đồng đánh giá LV Bộ môn quản lý chuyên ngành Luận văn cao học: Truy lỗi xâm phạm vùng nhớ hệ thống nhúng FPGA LỜI CAM ĐOAN Tôi cam đoan rằng, ngoại trừ kết tham khảo từ cơng trình ghi rõ luận văn, cơng việc trình bày luận văn tơi thực chưa có phần nội dung luận văn nộp để lấy cấp trường trường khác Ngày 01 tháng 07 năm 2010 Hồ Nam Trang Luận văn cao học: Truy lỗi xâm phạm vùng nhớ hệ thống nhúng FPGA LỜI CẢM ƠN Tôi xin gởi lời cảm ơn chân thành sâu sắc đến TS Đinh Đức Anh Vũ, người Thầy tận tình hướng dẫn tơi suốt q trình thực luận văn cao học tạo điều kiện để tơi hồn thành luận văn Tôi xin gởi lời cảm ơn đến ban giám đốc, đồng nghiệp công ty NXP Semiconductors Vietnam, nơi mà tơi gắn bó suốt bốn năm vừa qua, góp ý tạo điều kiện thuận lợi cho sử dụng thiết bị công ty suốt thời gian làm luận văn Và xin cảm ơn anh Nguyễn Quốc Huân phụ trách phận sale công ty cung cấp cho sample chip anh Nguyễn Xuân Vũ tư vấn giúp tơi hồn chỉnh thiết kế board mạch nhúng ARM7 Tơi xin cảm ơn gia đình động viên tạo điều kiện tốt để tơi tiếp tục theo đuổi việc học tập nghiên cứu Tôi trân trọng dành tặng thành luận văn cho tất người gia đình Tơi gởi lịng tri ân đến tất bạn bè, người động viên, thăm hỏi giúp đỡ thiết thực giúp tơi hồn tất luận văn Trang Luận văn cao học: Truy lỗi xâm phạm vùng nhớ hệ thống nhúng FPGA TÓM TẮT LUẬN VĂN Những năm trở lại đây, ứng dụng cho hệ thống nhúng dần trở nên phức tạp Điều địi hỏi cần có phương pháp công cụ giúp phát ngăn chặn lỗi hư nhớ (do chương trình bị lỗi truy cập phá hủy vùng nhớ chương trình khác mà khơng phép) giai đoạn phát triển phần mềm Tuy nhiên, hầu hết vi xử lý nhúng thiếu trang bị phần cứng MMU (Memory Management Unit), thành phần phần cứng quan trọng giúp triển khai chế bảo vệ nhớ hệ thống máy tính đa dụng, chế bảo vệ nhớ dựa vào MMU làm tăng chi phí phần cứng giảm hiệu suất hệ thống khơng phù hợp cho hệ thống nhúng Các nghiên cứu gần đưa giải pháp phần cứng, phần mềm kết hợp phần cứng lẫn phần mềm tập trung vào việc giảm chi phí phần cứng hiệu suất hệ thống Các giải pháp phần cứng địi hỏi phải tích hợp phần cứng vào vi xử lý (on-chip), giải pháp phần mềm cho thấy không hiệu cao truy tìm lỗi thời gian thực thi (run-time) Giải pháp cách kết hợp phần cứng lẫn phần mềm cần phần cứng tích hợp on-chip vào vi xử lý chưa áp dụng cho ứng dụng xây dựng dựa hệ điều hành nhúng Đề tài đề nghị cách tiếp cận cách xây dựng phần cứng truy tìm lỗi thời gian thực thi (run-time) đặt bên ngồi vi xử lý (off-chip) Nó kết nối vào bus nhớ (memory bus) để giám sát trình truy xuất nhớ ứng dụng dựa hệ điều hành đa nhiệm thời gian thực Kết thực nghiệm cho thấy, truy lỗi off-chip truy tìm lỗi tràn vùng nhớ đệm tác vụ (task), lỗi truy xuất vùng nhớ không phép truy xuất vào code/data tác vụ khác lỗi truy xuất xâm phạm vô ý vào vùng nhớ hệ điều hành Bên cạnh đề tài tiến hành đánh giá so sánh khả định thời thời gian thực (real-time schedulability) hệ thống nhúng áp dụng mơ hình truy lỗi off-chip Hệ thống nhúng sử dụng giải pháp truy lỗi off-chip làm cho khả định thời thời gian thực bị giảm khoảng 9,7% Trang Luận văn cao học: Truy lỗi xâm phạm vùng nhớ hệ thống nhúng FPGA ABSTRACT Recently, application in embedded systems has increasingly become complex This requires having tools to prevent or detect memory corruption errors during the software development process Unfortunately, most of embedded processors lack to be equipped a MMU (Memory Management Units), a hardware component supporting memory protection mechanism in general purpose computer system, because the MMU-based methods cause embedded system incurred hardware cost and performance penalty In this paper, a method to detect memory corruption at run-time by combining hardware/software is described Our solution is an off-chip detector based on FPGA by hooking on memory bus to monitor memory access for multitasking Real-time Operating System (RTOS) application In experimental evaluation, some testbeds are used and it gives good results Besides, a comparison of real-time schedulability is carried out Using our solution causes the real-time schedulability of the system dropped-off about 9,7% Trang Luận văn cao học: Truy lỗi xâm phạm vùng nhớ hệ thống nhúng FPGA MỤC LỤC MỤC LỤC .8 DANH MỤC HÌNH 11 DANH MỤC BẢNG .13 Chương GIỚI THIỆU ĐỀ TÀI 14 1.1 1.2 1.3 1.4 Lý thực đề tài 14 Mục tiêu giới hạn đề tài 16 Tóm lược kết đạt 17 Cấu trúc luận văn 17 Chương NHỮNG CƠNG TRÌNH LIÊN QUAN 18 2.1 2.2 Hệ thống máy tính hỗ trợ chế bảo vệ (protection mechenism) 18 Bảo vệ vùng nhớ với hỗ trợ từ phần cứng .20 2.2.1 Sử dụng Memory Managnament Units (MMU) 21 2.2.2 Kỹ thuật bảo vệ vùng nhớ sử dụng bảng bảo vệ (Permissions Table) cached PLB (Protection Look-aside Buffers) 22 2.2.3 Sử dụng Memory Protection Units (MPU) 23 2.3 Bảo vệ vùng nhớ phần mềm 23 2.4 Kết hợp phần cứng phần mềm 25 2.5 Kết luận 26 Chương 3.1 3.2 CƠ SỞ LÝ THUYẾT 27 Hệ điều hành nhúng .27 Vấn đề bảo vệ vùng nhớ hệ thống nhúng .28 3.2.1 Tác vụ (Task) 28 3.2.2 Các lỗi run-time .29 3.2.3 Bảo vệ vùng nhớ 31 Chương CÔNG CỤ TRUY LỖI XÂM PHẠM VÙNG NHỚ OFF-CHIP 34 4.1 4.2 4.3 Đặt vấn đề 34 Hướng giải 34 Mơ hình truy lỗi xâm phạm vùng nhớ off-chip .35 4.3.1 Thiết kế MemMON 35 4.3.2 Task Domain Config 37 4.3.3 Vùng nhớ cấp phát động (dynamic memory allocation) 38 4.3.4 Shared Domain Config 39 4.3.5 Ring Buffer 40 4.3.6 Giải thuật cập nhật trình truy lỗi trường hợp chuyển đổi ngữ cảnh (Context Switch) 40 4.3.7 Wrapper cho hàm dịch vụ cho hệ điều hành nhúng 42 4.3.8 Giải thuật cho hai hàm MM_DISBALE() MM_ENABLE() 42 4.3.9 Giải thuật cho hai hàm MM_DOMAIN_ENTER(int dom_id) MM_DOMAIN_EXIT() 43 4.3.10 Giải thuật cho hàm thao tác vùng nhớ cấp phát động 44 4.3.11 Interrupt 46 4.4 Kết luận 47 Chương 5.1 5.2 HIỆN THỰC 48 Sơ đồ khối thiết kế phần cứng hệ thống 48 Board nhúng ARM7 .49 Trang Luận văn cao học: Truy lỗi xâm phạm vùng nhớ hệ thống nhúng FPGA 5.3 5.4 Cấu hình ánh xạ nhớ hệ thống 50 Hiện thực MemMON .50 5.4.1 ADDR_DATA_CAP .52 5.4.2 MEM_ARM_REG .55 5.4.3 MEM_HOST_REG 57 5.4.4 RING_BUFFER 59 5.4.5 TASK_DOMAIN_CONFIG 60 5.4.6 SHARED_DOMAIN_CONFIG 62 5.4.7 OS_SERVICE_CONFIG .63 5.5 Porting uCOS-II cho board ARM7 LPC2220 64 5.6 Thay đổi hàm OSCtxSw(), OSIntCtxSw() 66 5.7 Thay đổi hàm OS_CPU_IRQ_ISR() 67 5.8 Wrapper cho OS Services 68 5.9 Chương trình Monitoring Viewer 69 5.10 Kết luận 70 Chương CHIP THỰC NGHIỆM ĐÁNH GIÁ GIẢI PHÁP TRUY LỖI OFF .71 6.1 Testbed 71 6.1.1 Truy lỗi xâm phạm vùng kernel 72 6.1.2 Truy lỗi tràn vùng nhớ stack 73 6.1.3 Truy lỗi truy cập vùng nhớ task khác 73 6.1.4 Truy lỗi vùng nhớ cấp phát động 74 6.2 Tài nguyên phần cứng FPGA 75 6.3 Đo hiệu đáp ứng thời gian thực uCOS-II sử dụng MemMON .75 6.3.1 Đo thời gian đáp ứng interrupt .76 6.3.2 Đo thời gian đáp ứng chuyển đổi ngữ cảnh 76 6.3.3 Đo thời gian đáp ứng sử dụng message queue 76 6.3.4 Đo thời gian đáp ứng sử dụng semaphore .77 6.3.5 Đo thời gian đáp ứng sử dụng nhớ cấp phát động 77 6.4 Khả định thời thời gian thực (realtime schedulability) sử dụng MemMON 78 6.5 Kết luận 81 Chương 7.1 7.2 7.3 KẾT LUẬN 82 Tổng kết 82 Những đóng góp đề tài 82 Hướng phát triển 83 TÀI LIỆU THAM KHẢO 84 Phụ Lục A VERILOG CODE HIỆN THỰC MEMMON 87 Phụ Lục B PHẦN MỀM ĐIỀU KHIỂN MEMMON 106 Phụ Lục C WRAPPER CHO OS SERVICES 111 Phụ Lục D CHI TIẾT KẾT QUẢ ĐO ĐẠC 114 D.1 Interrupt latency 114 D.2 Context Switch 114 D.3 Message queue .115 D.4 Semaphore 115 D.5 Memory Alloc & Free 116 Phụ Lục E HÌNH ẢNH ĐO ĐẠC TRÊN OSCILLOSCOPE 117 E.1 Interrupt latency 117 E.2 Context Switch 118 Trang Luận văn cao học: Truy lỗi xâm phạm vùng nhớ hệ thống nhúng FPGA E.3 E.4 E.5 E.6 E.7 E.8 Message Queue 119 Semaphore 119 Memory Alloc & Free 120 Task DIJISTRA 121 Task FFT 121 Task SHA 122 BẢNG ĐỐI CHIẾU THUẬT NGỮ ANH - VIỆT 123 Trang 10 Luận văn cao học: Truy lỗi xâm phạm vùng nhớ hệ thống nhúng FPGA (*((volatile unsigned long *)(MM_ENCHECK_REG))) = 1; // enable check again asm ("MSR CPSR_c,R4"); // restore interrupt state } extern inline attribute ((always_inline)) void MM_DOMAIN_EXIT() { /* a table entry : dom_id |en/dis bit(1)|*/ volatile unsigned long dom_en_dis_tbl_entry; asm ("MRS R4,CPSR"); asm ("ORR R5,R4,#0x80|0x40"); // disable interrupt asm ("MSR CPSR_c,R5"); (*((volatile unsigned long *)(MM_ENCHECK_REG))) = 0; // disable check first dom_en_dis_tbl_entry = (*((volatile unsigned long *)(MM_TSK_DOM_EN_DIS_TABLE_BASE - OSTCBCur->OSTCBId*4))); dom_en_dis_tbl_entry = dom_en_dis_tbl_entry & 0x00000001; // clear the old dom_id and keep the en/dis bit (*((volatile unsigned long *)(MM_TSK_DOM_EN_DIS_TABLE_BASE OSTCBCur->OSTCBId*4))) = dom_en_dis_tbl_entry; // domain zero behaves as without checking (*((volatile unsigned long *)(MM_DOMID_REG))) = 0; // domain zero behave as without checking (*((volatile unsigned long *)(MM_ENCHECK_REG))) = 1; // enable check again asm ("MSR CPSR_c,R4"); // restore interrupt state } Trang 110 Luận văn cao học: Truy lỗi xâm phạm vùng nhớ hệ thống nhúng FPGA Phụ Lục C WRAPPER CHO OS SERVICES File os_service.c #define GCC_INLINE_FUNC extern inline attribute ((always_inline)) // Memory management GCC_INLINE_FUNC void *MM_OSMemGet(OS_MEM *pmem, INT8U *err, INT8U tskid) { void *ret_val; unsigned long mem_base; unsigned long mem_block_id; MM_DISABLE(); ret_val = OSMemGet(pmem, err); if (ret_val != NULL) { // Get memory base addr mem_base = *((volatile unsigned long *)(MM_HEAPSEG_REG)); // Get block id mem_block_id = (((unsigned long)ret_val - mem_base)& 0x00FFFFFF) >> 9; // Set task permission, now allow for both read/write operations mem_base = *((volatile unsigned long *)(MM_HEAPSEG_REG + (mem_block_id + 1)* 4)); // read current task permission for this block *((volatile unsigned long *)(MM_HEAPSEG_REG + (mem_block_id + 1)* 4)) = mem_base |(0x03 > 9; // Set task permission, now allow for both read/write operations mem_base = *((volatile unsigned long *)(MM_HEAPSEG_REG + (mem_block_id + 1)* 4)); // read current task permission for this block *((volatile unsigned long *)(MM_HEAPSEG_REG + (mem_block_id + 1)* 4)) = mem_base & ~(0x03

Ngày đăng: 15/02/2021, 17:26

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w