2012-07-12 30 views
6

Có cơ sở dữ liệu nào không yêu cầu hệ điều hành để thực hiện các hoạt động không? Nếu có, vui lòng cung cấp các chi tiết như kích thước hoặc liên kết với chi tiết.cơ sở dữ liệu không cần hệ điều hành cho hệ thống nhúng

Ngôn ngữ lập trình là C.

Bắt buộc đối với lập trình hệ thống nhúng.

+0

Bạn có thể giải thích những gì bạn muốn không yêu cầu hệ điều hành bằng cách chỉnh sửa bài đăng gốc của bạn không? Tôi giả sử bạn có nghĩa là cơ sở dữ liệu bạn tìm kiếm sẽ biết làm thế nào để thực hiện truy cập đĩa riêng của mình. Tôi có đúng không? – octopusgrabbus

+1

Tại sao bạn không muốn tạo hệ thống cơ sở dữ liệu dựa trên tệp của riêng mình với các tệp nhị phân? Ý tôi là, bạn muốn có một cơ sở dữ liệu hỗ trợ cú pháp SQL? Và loại thiết bị nhúng nào? Một AVR/PIC/ARM đơn giản hay như vậy? Làm thế nào lớn/nhỏ dấu chân nên nó có? – DipSwitch

+1

"Tại sao không?" Bởi vì trong khi giáo dục, một nỗ lực đầu tiên có thể là kém so với các công cụ db trưởng thành do nhiều nhà phát triển có kinh nghiệm trong lĩnh vực đó làm việc. Nó cũng có thể lãng phí thời gian. –

Trả lời

3

Vâng, nó phụ thuộc vào cách bạn xác định 'hệ điều hành'.

  • Nếu bạn xác định nó là thứ gì đó có GUI chạy trên phần cứng x86; chắc chắn rồi; hầu hết các cơ sở dữ liệu sẽ chạy tốt trên các hệ thống khác.
  • Nếu bạn xác định nó như một cái gì đó thực hiện các thông số POSIX hoặc cho phép các chủ đề hoặc quy trình để chạy và cung cấp một biện pháp bảo mật, tốt, bạn sẽ mất một vài yêu cầu hoạt động đa luồng nhưng bạn vẫn sẽ được sử dụng tốt; Có rất nhiều lựa chọn.
  • Nếu bạn xác định nó là một cái gì đó mà không có bất kỳ hoạt động tập tin ở tất cả, và không thực hiện nhiều thư viện chuẩn C, bạn đang khá nhiều trong số may mắn.

Thiết bị dựa trên ARM của bạn gần như chắc chắn có thư viện chuẩn C đi kèm với chuỗi công cụ. Newlib là một lựa chọn phổ biến cho các hệ thống nhúng sâu; nó được bao gồm theo mặc định, ví dụ, các mã công cụ CodeSourcery và YARTGO miễn phí. Tuy nhiên, bạn cần triển khai một số syscalls trước khi nó hoạt động. Bạn có thể làm, giả sử, printf() và văn bản có xuất hiện trên bảng điều khiển không? Làm thế nào về malloc()? Nếu những chức năng đó và các chức năng khác không hoạt động, tôi khuyên bạn nên thực hiện chúng. Các syscalls cơ bản mà Newlib hy vọng là:

int  _system  (const char *); 
int  _rename  (const char *, const char *); 
int  _isatty  (int); 
clock_t _times  (struct tms *); 
int  _gettimeofday (struct timeval *, struct timezone *); 
void _raise  (void); 
int  _unlink  (void); 
int  _link   (void); 
int  _stat   (const char *, struct stat *); 
int  _fstat  (int, struct stat *); 
caddr_t _sbrk   (int); 
int  _getpid  (int); 
int  _kill   (int, int); 
void _exit   (int); 
int  _close  (int); 
int  _open   (const char *, int, ...); 
int  _write  (int, char *, int); 
int  _lseek  (int, int, int); 
int  _read   (int, char *, int); 

Hầu hết trong số này có thể khai, nhưng bạn cần, ví dụ, _write() cho printf() (và các hoạt động văn bản khác), _read() cho việc đọc các hoạt động, và _sbrk() cho malloc và các chức năng quản lý bộ nhớ khác. Xem, ví dụ: http://wiki.osdev.org/Porting_Newlib để thực hiện tối thiểu. Định nghĩa của bạn về các hàm này sẽ xác định cách cơ sở dữ liệu hoạt động; nếu _write() gửi một ký tự đến UART thì cơ sở dữ liệu của bạn sẽ không hữu ích lắm.

Với thư viện chuẩn làm việc, sqlite và các cơ sở dữ liệu khác sẽ hoạt động. Họ sẽ làm những việc như thế này trong shell.c từ hỗn hợp sqlite:

#include <stdlib.h> 
#include <string.h> 
#include <stdio.h> 
#include <assert.h> 
#include "sqlite3.h" 
#include <ctype.h> 
#include <stdarg.h> 
#include <signal.h> 
#include <pwd.h> 
#include <unistd.h> 
#include <sys/types.h> 

Bạn cần thực hiện một số điều đó. Điều này không yêu cầu hệ điều hành. Với một thư viện C, nó sẽ làm việc, nhưng không có một, bạn đang ở trên của riêng bạn.

Các vấn đề liên quan