Diferencias entre la biblioteca estándar del kernel de Hongmeng y la biblioteca estándar de Linux

Este artículo describe las diferencias clave entre la biblioteca estándar alojada por el kernel de OpenHarmony y la biblioteca estándar de Linux.

proceso

  1. La prioridad del proceso del modo de usuario de OpenHarmony solo admite la prioridad estática y el rango de prioridad configurable del modo de usuario es 10 (prioridad más alta) -31 (prioridad más baja).
  2. La prioridad de subprocesos del modo de usuario de OpenHarmony solo admite prioridad estática y el rango de prioridad configurable del modo de usuario es 0 (prioridad más alta) -31 (prioridad más baja).
  3. La estrategia de programación de OpenHarmony admite SCHED_RR y SCHED_FIFO.
  4. sched_yield () es el proceso que abandona activamente la CPU; thrd_yield () es el hilo que abandona activamente la CPU.

RAM

Diferencias con mmap de Linux

El prototipo de la interfaz mmap es: void * mmap (void * addr, size_t length, int prot, int flags, int fd, off_t offset).

Entre ellos, el ciclo de vida del parámetro fd es diferente al de Linux glibc. Específicamente, glibc puede liberar el identificador fd inmediatamente después de llamar exitosamente a mmap para mapeo. En el kernel de OpenHarmony, los usuarios no pueden cerrar el fd relacionado inmediatamente después de que el mapeo sea exitoso, y solo permiten la operación de cierre de fd después de desmapear munmap. Si el usuario no realiza la operación de cierre de fd, el sistema operativo recuperará el fd cuando el proceso finalice.

Ejemplo de código

Linux actualmente admite las siguientes condiciones:

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 admite las siguientes situaciones:

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

Sistema de archivos

** Directorio del sistema: ** Los usuarios no pueden modificarlo ni montar el dispositivo. Contiene los directorios / dev, / proc, / app, / bin, / data, / etc, / lib, / system, / usr.

Directorio de usuario: el usuario puede crear, leer y escribir archivos en este directorio, pero no puede montar el dispositivo . El directorio de usuarios se refiere al directorio / storage.

Además de los directorios del sistema y los directorios de usuarios, los usuarios pueden crear carpetas por sí mismos para montar dispositivos. Sin embargo, tenga en cuenta que la carpeta montada y sus subcarpetas no pueden montarse repetidamente o anidarse, y las carpetas no vacías no pueden montarse.

señal

  • El comportamiento predeterminado de la señal no admite las funciones STOP, CONTINUE y COREDUMP.
  • No es posible despertar un proceso que está durmiendo (por ejemplo: el proceso llama a la función dormir para entrar en sueño) a través de una señal. Razón: el mecanismo de señal no tiene función de activación, y el contenido de la señal se puede procesar si y solo cuando el proceso está programado para ejecutarse por la CPU.
  • Una vez finalizado el proceso, SIGCHLD se enviará al proceso principal y la acción de envío no se puede cancelar.
  • La señal solo admite las señales 1 a 30. El receptor recibe la misma señal varias veces y solo ejecuta la función de devolución de llamada una vez.

Hora

La precisión de tiempo actual de OpenHarmony se calcula en tick, y el sistema predeterminado es 10ms / tick. El error de tiempo de las funciones de la serie de suspensión y tiempo de espera es <= 20 ms.

Supongo que te gusta

Origin blog.csdn.net/qq_46388795/article/details/108532557
Recomendado
Clasificación