2012-07-12 50 views
6

¿Existe alguna base de datos que no requiera que el sistema operativo realice las operaciones? En caso afirmativo, proporcione los detalles como el tamaño o enlaces con detalles.base de datos sin sistema operativo requerido para el sistema integrado

Lenguaje de programación es C.

requerido para la programación de sistemas embebidos.

+0

¿Podría explicar lo que quiere decir que no requiere un sistema operativo editando su publicación original? Supongo que quiere decir que la base de datos que busca sabrá cómo realizar su propio acceso al disco. ¿Estoy en lo correcto? – octopusgrabbus

+1

¿Por qué no quieres crear tu propio sistema de base de datos basado en archivos binarios? Quiero decir, ¿quieres una base de datos que admita la sintaxis de SQL? ¿Y qué tipo de dispositivo integrado? Un simple AVR/PIC/ARM más o menos? ¿Qué tamaño de espacio debería tener? – DipSwitch

+1

"¿Por qué no?" Porque a pesar de ser educativo, es probable que un primer intento sea pobre en comparación con los motores db maduros trabajados por múltiples desarrolladores con experiencia en esa área. También puede perder tiempo. –

Respuesta

3

Bueno, depende de cómo se defina el 'sistema operativo'.

  • Si lo define como algo con una GUI que se ejecuta en hardware x86; Por supuesto; la mayoría de las bases de datos funcionarán bien en otros sistemas.
  • Si lo define como algo que implementa la especificación POSIX o permite la ejecución de subprocesos o procesos y proporciona una medida de seguridad, bueno, perderá algunos que requieren una operación de subprocesos múltiples, pero igual estará bien; hay muchas opciones.
  • Si lo define como algo que no tiene ninguna operación de archivo y no implementa gran parte de la biblioteca estándar C, no tiene mucha suerte.

Su dispositivo basado en ARM casi con certeza tiene una biblioteca estándar C que se envía con la cadena de herramientas. Newlib es una opción popular para sistemas profundamente integrados; está incluido por defecto en, por ejemplo, las cadenas de herramientas gratuitas CodeSourcery y YARTGO. Sin embargo, debe implementar algunas llamadas de sistema antes de que funcione. ¿Puedes hacer, por ejemplo, printf() y hacer que el texto aparezca en una consola? ¿Qué hay de malloc()? Si esas y otras funciones no funcionan, sugiero que las implemente. Las llamadas al sistema básicas que NEWLIB Espera son:

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

mayoría de estos pueden ser talones, pero es necesario, por ejemplo, _write() de printf() (y otras operaciones de escritura), _read() para las operaciones de lectura y _sbrk() para malloc y otras funciones de administración de memoria. Ver, por ejemplo, http://wiki.osdev.org/Porting_Newlib para una implementación mínima. Sus definiciones de estas funciones determinarán cómo funciona la base de datos; si _write() envía un carácter al UART, entonces su base de datos no será muy útil.

Con la biblioteca estándar funcionando, sqlite y otras bases de datos deberían funcionar. Que van a hacer este tipo de cosas en shell.c de la fusión 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> 

Usted necesita una cierta aplicación de esos. Esto no requiere un sistema operativo. Con una biblioteca C, funcionará, pero sin una, estás solo.

Cuestiones relacionadas