2012-07-12 10 views
6

Esiste un database che non richiede il funzionamento del sistema operativo? Se sì, si prega di fornire i dettagli come dimensioni o collegamenti con i dettagli.database senza sistema operativo richiesto per il sistema integrato

linguaggio di programmazione è C.

Necessario per la programmazione di sistemi embedded.

+0

Vuoi approfondire cosa intendi non richiedere il sistema operativo modificando il tuo post originale? Suppongo che intendi che il database che cerchi saprebbe come eseguire il proprio accesso al disco. Ho ragione? – octopusgrabbus

+1

Perché non vuoi creare il tuo sistema di database basato su file con file binari? Voglio dire, vuoi un database che supporti la sintassi SQL? E che tipo di dispositivo incorporato? Un semplice AVR/PIC/ARM o così? Quanto dovrebbe essere grande/piccolo? – DipSwitch

+1

"Perché no?" Perché mentre è educativo, un primo tentativo rischia di essere povero rispetto ai motori db maturi su cui lavorano molti sviluppatori con esperienza in quell'area. Potrebbe anche perdere tempo. –

risposta

3

Bene, dipende da come si definisce "sistema operativo".

  • Se lo si definisce come qualcosa con una GUI che gira su hardware x86; sicuro; la maggior parte dei database funzionerà correttamente su altri sistemi.
  • Se lo si definisce come qualcosa che implementa le specifiche POSIX o in altro modo consente l'esecuzione di thread o processi e fornisce una misura di sicurezza, beh, ne perdi alcuni che richiedono operazioni con multithreading, ma starai comunque bene; ci sono molte opzioni.
  • Se lo si definisce come qualcosa che non ha alcuna operazione di file e non implementa gran parte della libreria standard C, si è praticamente sfortunati.

Il dispositivo basato su ARM dispone quasi certamente di una libreria standard C fornita con la toolchain. Newlib è una scelta popolare per i sistemi profondamente integrati; è incluso per impostazione predefinita in, ad esempio, il toolkit CodeSourcery e YARTGO gratuiti. Tuttavia, è necessario implementare alcune syscalls prima che funzioni. Puoi fare, ad esempio, printf() e il testo appare su una console? Che ne pensi di malloc()? Se quelle e altre funzioni non funzionano, ti suggerisco di implementarle. Le chiamate di sistema di base che si aspetta newlib sono:

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

La maggior parte di questi possono essere stub, ma è necessario, per esempio, _write() per printf() (e altre operazioni di scrittura), _read() per le operazioni di lettura e _sbrk() per malloc e altre funzioni di gestione della memoria. Vedere, ad esempio, http://wiki.osdev.org/Porting_Newlib per un'implementazione minima. Le tue definizioni di queste funzioni determineranno il funzionamento del database; se _write() invia un carattere alla UART, il tuo database non sarà molto utile.

Con la libreria standard funzionante, sqlite e altri database dovrebbero funzionare. Faranno cose come questa nel shell.c dalla fusione 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> 

Hai bisogno di qualche implementazione di quelli. Questo non richiede un sistema operativo. Con una libreria C, funzionerà, ma senza uno, sei da solo.