본문 바로가기

분류 전체보기42

세마포어의 용도/종류/문제 그리고 공유데이터 보호 방법 앞의 내용에 바로 이어서 세마포어의 다양한 면에 대해서 얘기해보겠습니다. [다중 세마포어] 세마포어 함수들이 초기화되거나, 내려가거나, 올라간 세마포어를 인식하기 위해서 인자 값을 사용하는 것을 알게 되었을 거라고 생각합니다. 대부분의 RTOS는 원하는 만큼 세마포어를 가질 수 있도록 하기 때문에 각각의 세마포어 함수들은 사용하려는 세마포어를 인식해야만 합니다. 모든 세마포어들은 서로 독립적입니다. 한 태스크가 세마포어 A를 가지고 있다면 다른 태스크는 세마포어 B를 기다리지 않고 가질 수 있습니다. 같은 맥락에서 한 태스크가 세마포어 C를 기다리고 있다고 하면 다른 태스크가 세마포어 D를 풀어 줘도 여전히 기다려야 하는 것이지요. 다중 세마포어를 사용하는 장점은 뭘까요? 태스크가 세마포어를 가질 때마다.. 2020. 6. 3.
RTOS 문제 해결 툴 - 세마포어 RTOS가 태스크와 태스크 간의 마이크로프로세서 전환과 인터럽트 같은 실행 순서의 변경으로 인해 어떻게 새로운 종류의 공유 데이터 문제를 일으킬 수 있는지 말해봤었죠. 문제가 있다면 해결법이 있는 법. RTOS는 이런 문제를 해결할 수 있는 새로운 툴 역시 제공합니다. 그 중 하나가 세마포어입니다. 세마포어의 어원을 찾아 올라가면 오래된 때로 올라가야 합니다. 과거 철도에서는 기차들이 서로 충돌하면 사업에 대단히 안좋을 것임이 명백하기 때문에 걱정이 쌓여갔습니다. 그래서 철도의 까치발 신호기로 신호를 사용했는데 이것의 이름이 세마포어입니다. 1번 기차가 가운데 영역에 들어오면 바로 전에 있는 세마포어가 자동으로 내려갑니다. 2번 기차가 도착할 때 기차의 승무원은 세마포어가 내려가 있는 것을 보고 세마포어.. 2020. 6. 3.
태스크의 독자적인 데이터 구조에 대해서 각각의 태스크는 레지스터 값들이나 프로그램 카운터, 스택 등을 포함하는 고유의 콘텍스트를 가지고 있습니다. 그러나 다른 글로벌 변소, 정적 변수, 초기화된 변수, 초기화되지 않은 변수 같은 다른 데이터들은 시스템의 태스크 사이에서 공유됩니다. 윈도 또는 유닉스에 익숙한 사람이라면 RTOS에 있는 태스크는 프로세스보다는 스레드에 가깝다는 것을 알 수 있겠죠. 물론 전통적인 RTOS의 경우에 그렇다는 얘기입니다. 많이 쓰는 리눅스나 윈도우 CE는 데스크톱 운영체제의 축소형이라서 프로세스도 가지고 있고 스레드도 가지고 있습니다. 프로세스에서 스레드들을 사용하기 때문에 태스크는 프로세스에 더 가깝다고 할 수 있겠죠. RTOS는 일반적으로 다른 태스크에서는 사용할 수 없는 독자적인 데이터 구졸르 보입니다. 태스크.. 2020. 6. 3.
알토스의 기본단위 태스크(Task)를 알아보자 알토스로 작성되는 소프트웨어의 가장 기본적인 단위는 태스크입니다. 태스크를 작성하는 일은 매우 쉬운 편인데요, 대부분의 RTOS에서 태스크는 단순히 서브루틴에 불과합니다. 프로그램의 어떤 부분에서 각각의 태스크에 대해서 어떤 서브루틴이 시작점인지 뒤에서 다룰 태스크의 우선 순위 같은 변수와 태스크를 위한 스택이 메모리에 어디에 위치하고 있는지 등의 내용을 가지고 태스크를 시작하는 RTOS의 함수를 한 번 또는 여러번 호출할 수 있습니다. 대부분의 RTOS들은 현실적으로 원하는 만큼 태스크를 가질 수 있고요. RTOS에서 각각의 태스크는 항상 몇 가지 상태 중의 하나입니다. 1) 실행 상태(러닝) : 마이크로프로세서가 이 태스크의 명령어를 수행하고 있다는 것을 의미합니다. 시스템이 여러 개의 프로세서들을 .. 2020. 6. 3.