implementazione mutex nel sistema embedded basato su braccio

3

Ho implementato un mutex su un sistema embedded che ha un processore armv7 e uno scheduler di base

Ci sono diverse istruzioni nel set di istruzioni armv7 utilizzate per l'efficienza energetica.

Due di queste istruzioni sono WFE (wait for event) e WFI (attendere l'interrupt), le istruzioni immettono il processore in modalità di attesa finché non viene generato un evento o viene generato un interrupt di conseguenza.

Anche il processore uscirà dalla modalità inattiva se la condizione che accompagnava l'istruzione è vera.

Potrei usare uno a queste istruzioni quando non sono riuscito ad acquisire il mutex, quindi il processore sarà inattivo attraverso il restante segmento di tempo finché non viene generato un interrupt del timer e quindi lo scheduler passerà a un'altra attività.

Se non sono interessato al consumo di energia, esiste davvero un motivo per utilizzare queste istruzioni anziché il ciclo di occupato?

    
posta omer12433 15.04.2017 - 13:14
fonte

1 risposta

0

Ricorda che sia WFI che WFE sospendono la CPU, quindi entrambi impediranno alla CPU di eseguire altre attività.

Se per "mutex" intendi "kernel-level-spinlock", allora sì, puoi usare WFE e SEV istruzioni per evitare il loop occupato.

Se per "mutex" si intende la primitiva a livello di sistema operativo che può sospendere un "thread" di esecuzione (non una CPU), non è possibile utilizzarli direttamente da un mutex. Se thread non riesce ad acquisire un mutex, dovrebbe aggiungersi alla coda di attesa e chiamare lo scheduler del kernel. È responsabilità dello scheduler eseguire WFI quando non ci sono attività da eseguire.

Anche se il consumo di energia non è un problema, potresti pensare a quanto il ciclo occupato può influire sulle prestazioni del bus di memoria: accostarlo a letture non necessarie può rallentare altre CPU / hardware che accedono allo stesso bus.

    
risposta data 06.09.2018 - 14:15
fonte

Leggi altre domande sui tag