6

操作を実行するためにオペレーティングシステムを必要としないデータベースはありますか?はいの場合、サイズや詳細とのリンクなどの詳細を提供してください。

プログラミング言語はCです。

組み込みシステムのプログラミングに必要です。

4

1 に答える 1

5

それは、「オペレーティング システム」をどのように定義するかによって異なります。

  • x86 ハードウェアで実行される GUI を使用するものとして定義する場合。承知しました; ほとんどのデータベースは、他のシステムでも問題なく動作します。
  • POSIX仕様を実装するものとして定義するか、スレッドまたはプロセスの実行を許可し、セキュリティ対策を提供するものとして定義すると、マルチスレッド操作を必要とするいくつかが失われますが、それでも問題ありません。多くのオプションがあります。
  • ファイル操作がまったくなく、C 標準ライブラリの多くを実装していないものとして定義した場合、ほとんど運がありません。

ARM ベースのデバイスには、ほぼ確実に、ツールチェーンに同梱されている C 標準ライブラリがあります。 Newlibは、深く組み込まれたシステムの一般的な選択肢です。たとえば、無料の CodeSourcery および YARTGO ツールチェーンにデフォルトで含まれています。ただし、それが機能する前に、いくつかのシステムコールを実装する必要があります。printf()コンソールにテキストを表示したり、発言したりできますか? どうmalloc()ですか?これらの機能やその他の機能が機能しない場合は、それらを実装することをお勧めします。Newlib が想定する基本的なシステムコールは次のとおりです。

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

これらのほとんどはスタブにすることができますが、たとえば、_write()printf() (およびその他の書き込み操作)、_read()読み取り操作、および_sbrk()malloc やその他のメモリ管理関数に必要です。たとえば、最小限の実装についてはhttp://wiki.osdev.org/Porting_Newlibを参照してください。これらの関数の定義によって、データベースの動作が決まります。_write() が文字を UART に送信すると、データベースはあまり役に立ちません。

標準ライブラリが機能していれば、sqliteやその他のデータベースが機能するはずです。彼らは、sqlite 合併の shell.c で次のようなことを行います。

#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>

それらの実装が必要です。これには、オペレーティング システムは必要ありません。C ライブラリがあれば動作しますが、C ライブラリがないと自力で作業できます。

于 2012-07-12T17:41:29.640 に答える