この記事では、OpenHarmonyカーネルがホストする標準ライブラリとLinux標準ライブラリの主な違いについて説明します。
処理する
- OpenHarmonyユーザーモードプロセスの優先度は静的優先度のみをサポートし、ユーザーモードの構成可能な優先度の範囲は10(最高の優先度)〜31(最低の優先度)です。
- OpenHarmonyのユーザーモードスレッドの優先度は静的優先度のみをサポートし、ユーザーモードの構成可能な優先度の範囲は0(最高の優先度)〜31(最低の優先度)です。
- OpenHarmonyスケジューリング戦略は、SCHED_RRおよびSCHED_FIFOをサポートします。
- sched_yield()はアクティブにCPUを放棄するプロセスであり、thrd_yield()はアクティブにCPUを放棄するスレッドです。
羊
Linux mmapとの違い
mmapインターフェースのプロトタイプは次のとおりです。void * mmap(void * addr、size_t長さ、int prot、intフラグ、int fd、off_tオフセット)。
その中でも、パラメーターfdのライフサイクルは、Linux glibcのライフサイクルとは異なります。具体的には、glibcは、マッピングのためにmmapを正常に呼び出した直後にfdハンドルを解放できます。OpenHarmonyカーネルでは、ユーザーは、マッピングが成功した直後に関連するfdを閉じることはできません。munmapのマッピングを解除した後にのみ、fdのclose操作を許可します。ユーザーがfdのクローズ操作を実行しない場合、オペレーティングシステムはプロセスの終了時にfdを再利用します。
コード例
Linuxは現在、次の条件をサポートしています。
int main(int argc, char *argv[])
{
int fd;
void *addr = NULL;
...
fd = open(argv[1], O_RDONLY);
if (fd == -1){
perror("open");
exit(EXIT_FAILURE);
}
addr = mmap(NULL, length, PROT_READ, MAP_PRIVATE, fd, offset);
if (addr == MAP_FAILED) {
perror("mmap");
exit(EXIT_FAILURE);
}
close(fd); /* close immediately, OpenHarmony do not support this way */
...
exit(EXIT_SUCCESS);
}
OpenHarmonyは次の状況をサポートします。
int main(int argc, char *argv[])
{
int fd;
void *addr = NULL;
...
fd = open(argv[1], O_RDONLY);
if (fd == -1){
perror("open");
exit(EXIT_FAILURE);
}
addr = mmap(NULL, length, PROT_READ, MAP_PRIVATE, fd, offset);
if (addr == MAP_FAILED) {
perror("mmap");
exit(EXIT_FAILURE);
}
...
munmap(addr, length);
close(fd); /* close after munmap */
exit(EXIT_SUCCESS);
}
ファイルシステム
**システムディレクトリ:**ユーザーはそれを変更したり、デバイスをマウントしたりできません。/ dev、/ proc、/ app、/ bin、/ data、/ etc、/ lib、/ system、/ usrディレクトリが含まれます。
ユーザーディレクトリ:ユーザーはこのディレクトリでファイルの作成、読み取り、書き込みを行うことができますが、デバイスをマウントすることはできません。ユーザーディレクトリは/ storageディレクトリを指します。
システムディレクトリとユーザーディレクトリに加えて、ユーザーは自分でフォルダを作成してデバイスをマウントできます。ただし、マウントされたフォルダとそのサブフォルダを繰り返しマウントしたりネストしたりすることはできません。また、空でないフォルダはマウントできません。
信号
- 信号のデフォルトの動作は、STOP、CONTINUE、およびCOREDUMP関数をサポートしていません。
- シグナルを介して、スリープ状態のプロセス(たとえば、プロセスがスリープ関数を呼び出してスリープ状態に入る)をウェイクアップすることはできません。理由:シグナルメカニズムにはウェイクアップ機能がなく、プロセスがCPUによって実行されるようにスケジュールされている場合にのみ、シグナルコンテンツを処理できます。
- プロセスが終了すると、SIGCHLDが親プロセスに送信され、送信アクションはキャンセルできません。
- 信号は信号1〜30のみをサポートします。受信機は同じ信号を複数回受信し、コールバック関数を1回だけ実行します。
時間
OpenHarmonyの現在の時刻精度はティックで計算され、システムはデフォルトで10ms /ティックに設定されます。スリープおよびタイムアウトシリーズ関数の時間誤差は20ms以下です。