[FreeRTOS] 데드락과 디버깅 도구

seopppio·2024년 11월 11일

FreeRTOS

목록 보기
12/14

교착상태의 사례(Dead LOCK)


Task1이 스캐너 리소스를 사용하기 위해 1번 뮤텍스락을 건다
Task2는 CD Writer 리소스를 사용하기 위해 2번 뮤텍스락 건다
이후 서로 상대방의 리소스에 뮤텍스락을 걸려고 한다 -> 실패

task1에서 임계구역에 접근하기 위해 m1 뮤텍스락 건다
task2도 임계구역 접근하기 위해 m2 뮤텍스락 건다

이후 각 테스크에서 서로 접근하기 위해 뮤텍스락 거는데, 잠겨 있으니 둘 다 blocked 된다

예방 방법

이러한 것들을 데드락이라고 하는데, 이러한 방식을 만들지 말고, 하나의 뮤텍스 락으로만 건다
프린터 스캐너 두개의 장비를 다 사용해야하는 경우에는 테스크1이든 2든 하나의 뮤텍스로 잠그고 푸는 것으로 하여, 예방한다

데드락 사례 분석

  • 로켓
    로켓 발사 중, 데드락을 확인되면 이것을 푸는 알고리즘이 있어도 이미 상황이 종료될 수 있다

  • 자동차
    데드락 발생하고 풀어도 이미 사고가 났을 수도 있다

하드리얼타임을 필요하는 시스템에서는 데드락을 회피하는 알고리즘이 무색할 수 있다. 임계 시간 안에 작동하지 못할 경우 매우 위험하기에 예방이 더 중요

데드락 정의

두 개의 테스크가 각자 다른 테스크에서 쓰고 있는 자원을 상호간에 무한정 기다리는 상태

보통 운영체제는 공유자원의 배타적인 사용을 뮤텍스 같은 형식으로 보장한다
하지만 하나의 태스크가 다수의 공유자원을 요구 하는 경우도 있는데 이때 교착상태 가능성 있다

  • 교착 상태 예방 간단한 방법
  1. 프로세스 진행 전에 모든 필요 자원 획득하기
  2. 순서대로 자원 획득하기

Open Bench Logic Sniffer

로직 분석기

0개의 댓글