저자 한국어판 서문 ... ⅳ 역자 서문 ... ⅴ 들어가며 ... xii 01 1장 임베디드, 실시간 시스템 1.1 소개 ... 1 1.2 임베디드 시스템은 무엇인가? ... 1 1.3 임베디드 시스템의 특성 ... 2 1.4 실시간 시스템 ... 3 1.5 실시간 운영체제와 실시간 커널 ... 3 1.6 프로세스, 태스크, 스레드 ... 4 1.7 실시간 시스템의 구조 ... 5 1.8 임베디드 시스템 개발 ... 7 02 2장 RTOS를 사용한 시스템과의 첫 만남 2.1 운영 환경 ... 9 2.2 스레드X 데모 시스템 설치 ... 9 2.3 2개의 스레드를 사용하는 예제 시스템 ... 9 2.4 스레드X 객체 생성 ... 12 2.5 예제시스템 컴파일과 실행 ... 14 2.6 시스템과 출력결과 분석 ... 14 2.7 02_sample_system.c 예제 ... 15 2.8 생각해볼 문제 ... 20 03 3장 RTOS 개념과 용어 정의 3.1 고개 ... 21 3.2 우선순위 ... 21 3.3 준비 스레드와 중지 스레드 ... 22 3.4 우선순위 기반 선점형 스케줄링 ... 23 3.5 라운드 로빈 스케줄링 ... 24 3.6 확정성 ... 25 3.7 커널 ... 26 3.8 RTOS ... 26 3.9 문맥 전환 ... 26 3.10 타임 슬라이드 ... 26 3.11 인터럽트 처리 ... 27 3.12 스레드 기아현상 ... 27 3.13 우선순위 역전현상 ... 28 3.14 우선순위 상속 ... 29 3.15 선점 한계치 ... 29 3.16 생각해볼 문제 ... 30 04 4장 시스템 개발을 위한 RTOS 구성요소 4.1 소개 ... 31 4.2 공개 자원의 정의 ... 31 4.3 스레드X 데이터 타입 ... 32 4.4 스레드 ... 33 4.5 메모리 풀 ... 34 4.6 응용 프로그램 타이머 ... 36 4.7 뮤텍스 ... 37 4.8 카운팅 세마포어 ... 38 4.9 이벤트 플래그 그룹 ... 38 4.10 메시지 큐 ... 39 4.11 스레드 동기화와 통신용 구성요소 요약 ... 40 4.12 생각해볼 문제 ... 41 05 5장 ARM 마이크로프로세서 소개 5.1 소개 ... 43 5.2 역사 ... 43 5.3 기술적 특징 ... 44 5.3.1 시스템 온 칩 호환성 ... 44 5.3.2 낮은 전력 소모 ... 45 5.3.3 향상된 코드 밀도 ... 45 5.3.4 다용도 레지스터 집합 ... 46 5.3.5 CPSR 정의 ... 48 5.3.6 프로세서 모드 ... 48 5.4 ARM 전력 절약 지원 ... 50 06 6장 스레드의 핵심 구성요소 6.1 소개 ... 51 6.2 스레드 제어 블록 ... 51 6.3 스레드 서비스 요약 ... 53 6.4 스레드 생성 ... 53 6.5 스레드 제거 ... 59 6.6 스레드 식별 ... 60 6.7 스레드 정보 얻기 ... 60 6.8 선점 한계치 변경 ... 61 6.9 우선순위 변경 ... 62 6.10 제어 양도 ... 62 6.11 스레드 실행 재개 ... 63 6.12 스레드 수면 ... 63 6.13 스레드 일시 중지 ... 63 6.14 응용 프로그램 스레드 종료 ... 64 6.15 타임 슬라이스 변경 ... 64 6.16 스레드 일시 중지 중단 ... 65 6.17 스레드 실행 개요 ... 66 6.18 스레드 상태 ... 67 6.19 스레드 설계 ... 68 6.19.1 스레드 수를 최소화하라 ... 69 6.19.2 우선순위를 주의깊게 선택하라 ... 69 6.19.3 우선순위 수를 최소화하라 ... 69 6.19.4 선점 한계치 사용을 고려하라 ... 70 6.19.5 우선순위 상속을 고려하라 ... 70 6.19.6 라운드 로빈 스케줄링 사용을 고려하라 ... 70 6.19.7 타임 슬리이싱 사용을 고려하라 ... 71 6.20 스레드 내부 ... 71 6.21 요약 ... 73 6.22 생각해볼 문제 ... 73 07 7장 상호배제 문제와 고려사항 7.1 소개 ... 75 7.2 크리티컬 섹션 보호 ... 75 7.3 공유 자원에 대한 독점적 접근 제공 ... 76 7.4 뮤텍스 제어 블록 ... 77 7.5 뮤텍스 서비스 요약 ... 77 7.6 뮤텍스 생성 ... 78 7.7 뮤텍스 제거 ... 79 7.8 뮤텍스 소유권 얻기 ... 79 7.9 뮤텍스 정보 얻기 ... 81 7.10 뮤텍스 중지 목록에 우선순위 적용하기 ... 81 7.11 뮤텍스 소유권 놓기 ... 82 7.12 교착 상태 피하기 ... 83 7.13 뮤텍스로 크리티컬 섹션을 보호하는 예 ... 84 7.14 예제 시스템 출력 ... 91 7.15 07_sample_system.c 예제 ... 92 7.16 뮤텍스 내부 동작 ... 96 7.17 요약 ... 97 7.18 생각해볼 문제 ... 98 08 8장 메모리 관리 - 바이트 풀과 블록 풀 8.1 소개 ... 99 8.2 메모리 바이트 풀 요약 ... 99 8.3 메모리 바이트 풀 제어 블록 ... 101 8.4 메모리 바이트 풀 사용에 따른 함정 ... 101 8.5 바이트 풀 서비스 요약 ... 102 8.6 메모리 바이트 풀 생성 ... 102 8.7 메모리 바이트 풀에서 할당받기 ... 103 8.8 메모리 바이트 풀 제거 ... 104 8.9 메모리 바이트 풀 정보 얻기 ... 105 8.10 메모리 바이트 풀 중지 목록에 우선순위 적용하기 ... 105 8.11 바이트 풀에 메모리 돌려주기 ... 106 8.12 메모리 바이트 풀 예제 - 스레드 스택 할당 ... 107 8.13 메모리 바이트 풀 내부 ... 108 8.14 메모리 블록 풀 요약 ... 110 8.15 메모리 블록 풀 제어 블록 ... 111 8.16 메모리 블록 풀 서비스 요약 ... 112 8.17 메모리 블록 풀 생성 ... 112 8.18 메모리 블록 할당 ... 113 8.19 메모리 블록 풀 제거 ... 114 8.20 메모리 블록 풀 정보 얻기 ... 115 8.21 메모리 블록 풀 중지 목록에 우선순위 적용 ... 115 8.22 메모리 블록 돌려주기 ... 116 8.23 메모리 블록 풀 예제 - 스레드 스택 할당 ... 117 8.24 메모리 블록 풀 내부 ... 118 8.25 요약 및 비교 ... 119 8.27 생각해볼 문제 ... 120 09 9장 내부 시스템 클럭과 응용프로그램 타이머 9.1 소개 ... 121 9.2 내부 시스템 클럭 서비스 ... 122 9.3 응용프로그램 타이머 제어 블록 ... 123 9.4 응용프로그램 타이머 서비스 요약 ... 124 9.5 응용프로그램 타이머 생성 ... 125 9.6 응용프로그램 타이머 활성화 ... 126 9.7 응용프로그램 타이머 변경 ... 127 9.8 응용프로그램 타이머 비활성화 ... 128 9.9 응용프로그램 타이머 제거 ... 128 9.10 응용프로그램 타이머 정보얻기 ... 129 9.11 타이머로 스레드 성능 측정하는 예제 시스템 ... 129 9.12 09_sample_system.c 예제 ... 133 9.13 응용프로그램 타이머 내부 ... 138 9.14 요약 ... 139 9.15 생각해볼 문제 ... 140 10 10장 이벤트 알림과 카운팅 세마포어를 이용한 동기화 10.1 소개 ... 141 10.2 카운팅 세마포어 제어 블록 ... 142 10.3 교착 상태 피하기 ... 143 10.4 우선순위 역전현상 피하기 ... 143 10.5 카운팅 세마포어 관련 서비스 요약 ... 144 10.6 카운팅 세마포어 생성 ... 144 10.7 카운팅 세마포어 제거 ... 145 10.8 카운팅 세마포어 인스턴스 얻기 ... 146 10.9 카운팅 세마포어 정보 얻기 ... 146 10.10 카운팅 세마포어 중지 목록에 우선순위 적용 ... 147 10.11 카운팅 세마포어 인스턴스 추가 ... 148 10.12 카운팅 세마포어와 뮤텍스 비교 ... 148 10.13 뮤텍스 대신 바이너리 세마포어를 사용하는 예제 시스템 ... 149 10.14 10a_sample_system.c 예제 ... 152 10.15 카운팅 세마포어를 사용하는 생산지 - 소비자 응용프로그램 예제 ... 157 10.16 10b_sample_system.c 예제 ... 160 10.17 카운팅 세마포어 내부 ... 165 10.18 요약 ... 165 10.19 생각해볼 문제 ... 166 11 11장 이벤트 플래그 그룹으로 스레드 동기화하기 11.1 소개 ... 167 11.2 이벤트 플래그 그룹 제어 블록 ... 168 11.3 이벤트 플래그 그룹 제어 서비스 요약 ... 169 11.4 이벤트 플래그 그룹 생성 ... 169 11.5 이벤트 플래그 그룹 제거 ... 170 11.6 이벤트 플래그 그룹에서 플래그 얻기 ... 171 11.7 이벤트 플래그 그룹 정보 얻기 ... 174 11.8 이벤트 플래그 그룹 내 이벤트 플래그 세트하기 ... 175 11.9 스레드 2개를 동기화하기 위해 이벤트 그룹을 쓰는 예제시스템 ... 178 11.10 11_sample_system.c 예제 ... 181 11.11 이벤트 플래그 그룹 내부 ... 186 11.12 요약 ... 187 11.13 생각해볼 문제 ... 187 12 12장 메시지 큐를 통한 스레드간 통신 12.1 소개 ... 189 12.2 메시지 큐 제어 블록 ... 190 12.3 메시지 큐 서비스 요약 ... 191 12.4 메시지 큐 생성 ... 192 12.5 메시지 큐에 메시지 발신 ... 193 12.6 메시지 큐에서 메시지 수신 ... 194 12.7 메시지 큐 제거 ... 194 12.8 메시지 큐 내용 버리기 ... 195 12.9 메시지 큐 선두로 메시지 송신 ... 196 12.10 메시지 큐 정보 얻기 ... 196 12.11 메시지 큐 중지 목록에 우선순위 적용 ... 197 12.12 스레드간 통신에 메세지 큐를 사용하는 예제 시스템 ... 198 12.13 12_sample_system.c 예제 ... 201 12.14 메시지 큐 내부 ... 206 12.15 요약 ... 207 12.16 생각해볼 문제 ... 208 13 13장 ARM 예외 처리 13.1 소개 ... 209 13.2 스레드X의 ARM 예외 처리 구현 ... 210 13.2.1 리셋 벡터 초기화 ... 210 13.2.2 스레드 스케줄링 ... 213 13.2.3 스레드X 인터럽트 처리 ... 216 13.2.4 내부 인터럽트 처리 ... 218 14 14장 사례 연구 - 멀티스레드 시스템 설계 14.1 소개 ... 221 14.2 문제 정의 ... 223 14.3 문제 분석 ... 225 14.4 시스템 설계 ... 226 14.4.1 스레드 설계 ... 226 14.4.2 공개 자원 설계 ... 228 14.5 구현 ... 231 14.6 VAM 시스템 예제 ... 246 14.7 요약 ... 254 Appendix 부록 부록 소개 ... 257 A 메모리 블록 풀 서비스 ... 259 B 메모리 바이트 풀 서비스 ... 268 C 이벤트 플래그 그룹 서비스 ... 277 D 인터럽트 제어 서비스 ... 285 E 뮤텍스 서비스 ... 287 F 메시지 큐 서비스 ... 295 G 카운팅 세마포어 서비스 ... 307 H 스레드 서비스 ... 315 I 내부 시스템 클럭 서비스 ... 335 J 응용프로그램 타이머 서비스 ... 338 K 스레드X API ... 347 찾아보기 ... 353 부록CD 소개 ... 370