Czy Linux jest w stanie pracować jako RTOS, RTOS hard?

Zimny kot
2017-08-08 21:38
Zimny kot
0

Cześć, zastanawiam się czy linux jest w stanie pracować jako RTOS, RTOS hard.Chciałbym realizować na linuxie jedną rzecz która będzie się wykonywała co 100ms. Minimalne zwłoki czasowe są dopuszczalne, na poziomie kilku ms, maksymalnie kilkudziesięcu ms.


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

void *myfunc1 (void *myvar);
void *myfunc2 (void *myvar);

int main(void)
{
    pthread_t thread1, thread2;

    char *msg1 = "First";
    char *msg2 = "Second";
    int ret1 = 0;
    int ret2 = 0;

    ret1 = pthread_create(&thread1, NULL, myfunc1, (void*) msg1);
    ret2 = pthread_create(&thread2, NULL, myfunc2, (void*) msg2);

    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);

    printf("First thread ret: %d", ret1);
    printf("Second thread ret: %d", ret2);

    return 0;
}

void *myfunc1 (void *myvar)
{
    while(1)
    {
                //update_db();
        printf("Thread1\n");
        usleep(500000);
    }
}

void *myfunc2 (void *myvar)
{
    while(1)
    {
                //update_output();
        printf("Thread2\n");
        usleep(100000);
    }
}

Czy da się uruchomić ten program, aby miał wysoki priorytet? Tak samo zależy mi aby wątek pthread2 którego zadaniem jest wysterowanie pinów wykonywał się co 100ms., Wątek pthread1 którry realizuje zadanie zadanie odczytu i zapisu do bazy danych jest mniej istotny, opóźnienia mogą być. Czasem zapis do DB trwa długo np. 800ms, i pthread1 blokuje pthread2 który ma "ważniejsze zadanie". Chciałbym uzyskać efekt podobny do FreeRTOS tzn. mieć task o najwyższym priorytecie.

edytowany 1x, ostatnio: furious programming, 2017-08-08 22:50

Pozostało 580 znaków

2017-08-08 21:49
Moderator

Rejestracja: 12 lat temu

Ostatnio: 1 godzina temu

1

To hard RTOS czy "minimalne zwłoki czasowe są dopuszczalne"?

Ogólnie Linux nie będzie działał jako hard RTOS co najwyżej jako soft (zakładam, że nawet napisanie własnego schedulera nie wiele da). Aczkolwiek jest projekt, który próbuje to uzyskać, ale wygląda na to, że to więcej niż tylko zmiana schedulera.


Pozostało 580 znaków

Zimny kot
2017-08-08 22:17
Zimny kot
0

No dobra moja pomyłka, nie hard ale soft. Ważne aby zrealizować zadanie wysterowania pinów z możliwie jak najmniejszą zwłoką czasową. Można dodać priorytety do pthread'ów?

Pozostało 580 znaków

2017-08-09 12:42
Moderator

Rejestracja: 12 lat temu

Ostatnio: 1 godzina temu

0

@Zimny kot a chociażby sprawdziłeś co masz napisane w man pthread_create? Bo sekcji SEE ALSO ja znalazłem coś takiego man pthread_setschedprio


Pozostało 580 znaków

2017-08-09 12:50

Rejestracja: 6 lat temu

Ostatnio: 2 godziny temu

0

man sched_setscheduler

Pozostało 580 znaków

2017-08-09 13:39

Rejestracja: 9 lat temu

Ostatnio: 4 minuty temu

0

Linux jako RTOS to pewnie taki Golf ze spojlerami.
Ale jest kilka takich projektów.
https://en.wikipedia.org/wiki/RTLinux
https://www.zephyrproject.org/

Możesz jeszcze poszukać pod hasłem Embedded - tu masz opis czym to się różni:
https://www.safaribooksonline[...]linux/059600222X/ch01s02.html


RTLinux to już chyba porzucony projekt. Zephyr to raczej embedded - taka alternatywa dla FreeRTOS. - Frebiee 2017-08-09 18:32

Pozostało 580 znaków

2017-08-09 18:32

Rejestracja: 5 lat temu

Ostatnio: 6 godzin temu

0

Kiedyś usłyszałem, że jądro Linux jest soft-realtime, tzn. zdecydowana większość deadline jest dotrzymywana. Czy to prawda - nie wiem - spróbuj sam.

Jeśli potrzebujesz zrobić z desktopowego Linuxa - RTOS to masz kilka opcji: możesz spróbować, czy wystarczyłoby Ci gdybyś skompilował jądro z łatami PREEMPT_RT (wydaje mi się że jest to kwestia wyboru opcji podczas kompilacji jajka). Druga opcja, która zapewni Ci hard realtime z dotrzymywaniem terminów w okolicach pojedynczych ms jest Xenomai (https://xenomai.org/). Od razu uprzedzam, że to drugie rozwiązanie jest mocno hardcorowe i może być przerostem formy nad treścią dla tego co chcesz zrobić.

edytowany 1x, ostatnio: Frebiee, 2017-08-09 18:33
Nie poleciłeś FreeRTOS - coś z nim nie tak? - vpiotr 2017-08-09 19:30
FreeRTOS jest jak najbardziej w porządku, ale raczej na małych procesorach:-) OP pytał o Linuxa i tego się trzymam. - Frebiee 2017-08-09 19:53

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0