책 소개
소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(https://github.com/AcornPublishing/microcos2-2nd)
이 책은 임베디드 시스템 프로그래머, 컨설턴트, 리얼타임 운영체제에 관심 있는 학생들을 위해 쓰여졌다. μC/OS-II는 고성능이면서 결정성 동작(deterministic)을 하는 리얼타임 커널이며, 이것은 상용 임베디드 제품에 사용될 수도 있으며, 이미 사용되기도 했다. 여러분은 자신의 커널을 직접 만드는 대신 μC/OS-II를 고려해 보기 바란다. 커널을 직접 만드는 것이 처음 생각처럼 쉽지 않다는 것을 알게 될 것이다. 여러분은 이 책을 공부하기 위해서 C와 기본적인 어셈블리 언어를 알고 있어야 한다. 마이크로 프로세서 구조도 어느 정도 이해하고 있어야 한다.
첫 번째 중요한 목표는 리얼타임 커널의 어려운 개념을 여러분이 쉽게 알 수 있도록 돕는데 있다. 이러한 커널의 동작을 이해함으로써 여러분이 개발하고자 하는 제품에 적용할 커널을 정확히 선택할 수 있을 것이다. 여기에 실린 대부분의 예제는 실제로 상용제품에도 사용될 수 있는 것들이다. 다음으로 중요한 목표는 여러분에게 실제 개발 제품에 적용할 수 있는 좋은 커널을 만들 수 있도록 하는데 있다. μC/OS-II는 프리웨어도 오픈 소스코드도 아니므로 μC/OS-II를 상용 제품에 적용하고자 한다면 라이센스를 받아야 한다(부록 B, μC/OS-II 라이센스 정책` 참조).
제1판은 12장으로 구성된 반면 이 책은 18장으로 구성됐다. 제1판의 6장(태스크간 통신과 동기화)을 여섯 장으로 나눴으며 이벤트 컨트롤 블록, 세마포어, 상호배제 세마포어, 이벤트 플래그, 메시지 메일박스, 메시지 큐를 각 장으로 나누어 설명한다. 이전 판에 인텔 80x86 군 프로세서를 위한 포트가 있었지만, 문맥전환 시 정수 레지스터만 지원하는 포트였다. 제2판에서는 한 장(Chapter)을 마련해서 80486과 펜티엄 프로세서에 기본적으로 있는 부동소수 레지스터까지 저장하고 복구할 수 있는 포트를 설명한다. 부록으로 ‘코딩 규약’과 ‘μC/OS-II’ 퀵 레퍼런스가 추가됐다.
부록 CD에는 μC/OS-II의 모든 소스코드와 인텔 80x86 프로세서에서 동작하는 포트(리얼모드, 라지모델)의 소스코드가 들어있다. 이 코드들은 마이크로소프트 Windows 2000이 동작하는 PC 상에서 개발했지만 Windows 95, 98, ME, NT, XP에서도 동작한다. 포함된 예제들은 도스창에서 실행할 수 있고, 컴파일러는 볼랜드 인터내셔널 C/C++ v4.51을 사용했다. μC/OS-II는 PC 상에서 테스트하고 개발했지만, 사실은 임베디드 시스템을 목적으로 하며, 다른 프로세서에서 사용할 수 있도록 쉽게 포팅(porting)할 수 있다.
[ 책 내용 ]
1장, μC/OS-II시작하기 - 즉시 μC/OS-II를 접해볼 수 있도록 구성했다. 여러 분이 μC/OS-II와 멀티태스킹에 대해 어느정도 개념이 있다고 가정했다. 제1판의 내용을 완전히 개편해서 1장을 썼다.
2장, 리얼타임 시스템 개념 - 리얼타임 시스템과 관련된 몇몇 개념을 소개한다. 전경/배경(Foreground/Background) 시스템, 크리티컬 섹션(critical sections), 자원(resources), 멀티태스킹(multitasking), 문맥전환(context switching), 스케줄링(scheduling), 재진입성(reentrancy), 태스크의 우선순위(task priority), 상호배제(mutual exclusion), 세마포어(semaphores), 태스크간 통신(intertask communications), 인터럽트(interrupts) 등의 개념을 다룬다.
3장, 커널 구조 - μC/OS-II의 내부 구조를 소개한다. 태스크와 태스크의 상태, 그리고 태스크 컨트롤 블록(TCB)을 배운다. μC/OS-II에서 어떻게 준비(Ready) 리스트와 태스크 스케줄링, IDLE 태스크를 구현했는지 설명한다. 또 CPU 사용율을 측정하는 방법과 인터럽트를 처리하는 방법, μC/OS-II를 초기화하고 시작하는 방법 등을 설명한다.
4장, 태스크 관리 - 태스크와 관련된 서비스 함수들을 다룬다. 태스크를 생성하고 삭제하는 서비스와 태스크의 스택 크기를 검사하는 기능, 태스크의 우선순위를 바꾸는 기능, 태스크를 중지하고 재개하는 기능, 태스크와 관련된 정보를 알아내는 기능을 설명한다.
5장, 시간 관리 - 사용자가 μC/OS-II에서 어떤 방식으로 지정한 시간만큼 태스크를 지연할 수 있는지 설명한다. 태스크가 깨어나는 방식과 32비트 틱 카운터 값을 가져오고 설정하는 방법을 다룬다.
6장, 이벤트 컨트롤 블록 - 동기화와 태스크간 통신을 수행하는 커널 오브젝트에 바탕이 되는 자료구조를 설명한다. 이 자료구조는 태스크와 ISR 또는 태스크 간의 통신을 가능케 해주고, 공유자원 액세스를 관리한다.
7장, 세마포어 관리 - 세마포어는 태스크가 공유자원을 액세스할 때 배타적으로 얻어야 하는 커널 오브젝트다. μC/OS-II가 세마포어를 어떤 식으로 구현하는지 설명한다.
8장, 상호배제 세마포어 - 상호배제 세마포어(뮤텍스)는 자원에 액세스할 때 배타적으로 얻어야 하는 바이너리 세마포어다. 뮤텍스는 필요한 경우 태스크의 우선순위를 자동으로 변경해서 우선순위 전도 문제를 줄여준다. 8장에서는 μC/OS-II가 뮤텍스를 어떤 식으로 구현하는지 설명한다. 뮤텍스는 이번 판에 추가된 새로운 서비스이다.
9장, 이벤트 플래그 관리 - 이벤트 플래그는 태스크가 기다릴 수 있는 비트이다. 태스크는 하나 또는 그 이상의 비트들이 켜지거나 꺼질 때를 기다릴 수 있다. 9장은 이벤트 플래그를 구현하는 법과 응용프로그램에서 사용할 수 있는 서비스를 설명한다. 이벤트 플래그는 이번 판에 새로 추가한 서비스이다.
10장, 메시지 메일박스 관리 - 태스크는 메시지 메일박스를 통해 메시지를 전달할 수 있다. 10장은 메시지 메일박스를 어떻게 구현하는지 설명한다.
11장, 메시지큐 관리 - 메시지큐는 메시지 메일박스와 비슷하지만. 메시지를 여러 개 보낼 수 있다는 점이 차이점이다. 11장은 메시지큐를 구현하는 법을 설명한다.
12장, 메모리 관리 - 고정크기 메모리 블록을 지원하는 μC/OS-II의 동적 메모리 관리자를 설명한다.
13장, 포팅 - μC/OS-II를 다른 프로세서에서 사용할 수 있도록 포팅할 때 고려해야 할 일반적인 사항들을 설명한다.
14장, 리얼모드, 라지모델, 부동소수 에뮬레이션을 지원하는 80x86 포트 - μC/OS-II를 인텔/AMD의 80x86 프로세서의 리얼모드 라지 모델에서 어떤 식으로 포팅했는지 설명한다.
15장, 리얼모드, 라지모델, 하드웨어 부동소수를 지원하는 80x86 포트 - 15장은 14장에서 설명한 포트를 확장한 것이다. 이 포트는 문맥전환시 80486, 5x86, 펜티엄 프로세서에 있는 부동소수 레지스터를 처리하는 법을 설명한다. 15장은 제2판에 새로 추가한 것이다.
16장, μC/OS-II 참고 매뉴얼 - 레퍼런스 매뉴얼(Reference Manual), μC/OS-II 응용프로그램을 작성하는 사람들이 참조할 수 있도록, μC/OS-II에서 제공하는 모든 시스템 서비스 함수를 설명한다. 각 함수에 대해, 간단한 함수설명과 함수선언, 위치한 소스파일의 이름, 전달인자와 리턴값의 의미, 주의할 사항과 관련 예제를 포함한다. 두 번째 판에서는 많은 서비스(뮤텍스, 이벤트 플래그)가 추가됐다. 이들 서비스를 16장에 추가했다.
17장, μC/OS-II 설정 매뉴얼 - μC/OS-II를 응용프로그램에서 사용할 경우, 각각의 설정을 위해 사용하는 각각의 #define 문의 의미를 설명한다. 이러한 설정을 통해 μC/OS-II의 필요한 부분만을 이미지에 포함해서 컴파일하도록 구성할 수 있다. 이 기능을 통해 μC/OS-II는 상당한 유연성을 가지게 되며 μC/OS-II를 위해 필요한 코드 및 데이터 메모리 영역을 최소화할 수 있다. 이번 판은 μC/OS-II를 더 세밀하게 설정할 수 있도록 하기 위해 세 배 이상의 설정 상수를 추가했다.
18장, PC 서비스 - 1장의 예제는 IBM/PC 호환기종을 사용한다고 가정한다. 18장은 PC에서 사용할 수 있는 서비스를 어떻게 캡슐화할 수 있는지 설명한다.
부록 A, C 코딩 규약 - 일상적으로 사용하는 코딩 규약을 설명한다.
부록 B, μC/OS-II라이센스 정책 - μC/OS-II를 소스코드와 오브젝트 형태로 배포할 때 지켜야할 라이센스 정책을 설명한다.
부록 C, μC/OS-II 퀵레퍼런스 - μC/OS-II 서비스의 퀵레퍼런스를 제공한다.
부록 D, TO 유틸리티 - TO는 도스창에서 경로명을 일일히 입력하지 않고 편리하게 디렉터리를 이동할 수 있는 DOS 유틸리티다.
부록 E, 참고문헌 목록 - 임베디드 리얼타임 시스템에 대해 좀 더 깊이 알고 싶어하는 사람을 위한 참고 문헌의 목록을 제공한다.
부록 F, 부록 CD - μC/OS-II설치 방법과 부록 CD의 내용을 설명한다.
(https://github.com/AcornPublishing/microcos2-2nd)
이 책은 임베디드 시스템 프로그래머, 컨설턴트, 리얼타임 운영체제에 관심 있는 학생들을 위해 쓰여졌다. μC/OS-II는 고성능이면서 결정성 동작(deterministic)을 하는 리얼타임 커널이며, 이것은 상용 임베디드 제품에 사용될 수도 있으며, 이미 사용되기도 했다. 여러분은 자신의 커널을 직접 만드는 대신 μC/OS-II를 고려해 보기 바란다. 커널을 직접 만드는 것이 처음 생각처럼 쉽지 않다는 것을 알게 될 것이다. 여러분은 이 책을 공부하기 위해서 C와 기본적인 어셈블리 언어를 알고 있어야 한다. 마이크로 프로세서 구조도 어느 정도 이해하고 있어야 한다.
첫 번째 중요한 목표는 리얼타임 커널의 어려운 개념을 여러분이 쉽게 알 수 있도록 돕는데 있다. 이러한 커널의 동작을 이해함으로써 여러분이 개발하고자 하는 제품에 적용할 커널을 정확히 선택할 수 있을 것이다. 여기에 실린 대부분의 예제는 실제로 상용제품에도 사용될 수 있는 것들이다. 다음으로 중요한 목표는 여러분에게 실제 개발 제품에 적용할 수 있는 좋은 커널을 만들 수 있도록 하는데 있다. μC/OS-II는 프리웨어도 오픈 소스코드도 아니므로 μC/OS-II를 상용 제품에 적용하고자 한다면 라이센스를 받아야 한다(부록 B, μC/OS-II 라이센스 정책` 참조).
제1판은 12장으로 구성된 반면 이 책은 18장으로 구성됐다. 제1판의 6장(태스크간 통신과 동기화)을 여섯 장으로 나눴으며 이벤트 컨트롤 블록, 세마포어, 상호배제 세마포어, 이벤트 플래그, 메시지 메일박스, 메시지 큐를 각 장으로 나누어 설명한다. 이전 판에 인텔 80x86 군 프로세서를 위한 포트가 있었지만, 문맥전환 시 정수 레지스터만 지원하는 포트였다. 제2판에서는 한 장(Chapter)을 마련해서 80486과 펜티엄 프로세서에 기본적으로 있는 부동소수 레지스터까지 저장하고 복구할 수 있는 포트를 설명한다. 부록으로 ‘코딩 규약’과 ‘μC/OS-II’ 퀵 레퍼런스가 추가됐다.
부록 CD에는 μC/OS-II의 모든 소스코드와 인텔 80x86 프로세서에서 동작하는 포트(리얼모드, 라지모델)의 소스코드가 들어있다. 이 코드들은 마이크로소프트 Windows 2000이 동작하는 PC 상에서 개발했지만 Windows 95, 98, ME, NT, XP에서도 동작한다. 포함된 예제들은 도스창에서 실행할 수 있고, 컴파일러는 볼랜드 인터내셔널 C/C++ v4.51을 사용했다. μC/OS-II는 PC 상에서 테스트하고 개발했지만, 사실은 임베디드 시스템을 목적으로 하며, 다른 프로세서에서 사용할 수 있도록 쉽게 포팅(porting)할 수 있다.
[ 책 내용 ]
1장, μC/OS-II시작하기 - 즉시 μC/OS-II를 접해볼 수 있도록 구성했다. 여러 분이 μC/OS-II와 멀티태스킹에 대해 어느정도 개념이 있다고 가정했다. 제1판의 내용을 완전히 개편해서 1장을 썼다.
2장, 리얼타임 시스템 개념 - 리얼타임 시스템과 관련된 몇몇 개념을 소개한다. 전경/배경(Foreground/Background) 시스템, 크리티컬 섹션(critical sections), 자원(resources), 멀티태스킹(multitasking), 문맥전환(context switching), 스케줄링(scheduling), 재진입성(reentrancy), 태스크의 우선순위(task priority), 상호배제(mutual exclusion), 세마포어(semaphores), 태스크간 통신(intertask communications), 인터럽트(interrupts) 등의 개념을 다룬다.
3장, 커널 구조 - μC/OS-II의 내부 구조를 소개한다. 태스크와 태스크의 상태, 그리고 태스크 컨트롤 블록(TCB)을 배운다. μC/OS-II에서 어떻게 준비(Ready) 리스트와 태스크 스케줄링, IDLE 태스크를 구현했는지 설명한다. 또 CPU 사용율을 측정하는 방법과 인터럽트를 처리하는 방법, μC/OS-II를 초기화하고 시작하는 방법 등을 설명한다.
4장, 태스크 관리 - 태스크와 관련된 서비스 함수들을 다룬다. 태스크를 생성하고 삭제하는 서비스와 태스크의 스택 크기를 검사하는 기능, 태스크의 우선순위를 바꾸는 기능, 태스크를 중지하고 재개하는 기능, 태스크와 관련된 정보를 알아내는 기능을 설명한다.
5장, 시간 관리 - 사용자가 μC/OS-II에서 어떤 방식으로 지정한 시간만큼 태스크를 지연할 수 있는지 설명한다. 태스크가 깨어나는 방식과 32비트 틱 카운터 값을 가져오고 설정하는 방법을 다룬다.
6장, 이벤트 컨트롤 블록 - 동기화와 태스크간 통신을 수행하는 커널 오브젝트에 바탕이 되는 자료구조를 설명한다. 이 자료구조는 태스크와 ISR 또는 태스크 간의 통신을 가능케 해주고, 공유자원 액세스를 관리한다.
7장, 세마포어 관리 - 세마포어는 태스크가 공유자원을 액세스할 때 배타적으로 얻어야 하는 커널 오브젝트다. μC/OS-II가 세마포어를 어떤 식으로 구현하는지 설명한다.
8장, 상호배제 세마포어 - 상호배제 세마포어(뮤텍스)는 자원에 액세스할 때 배타적으로 얻어야 하는 바이너리 세마포어다. 뮤텍스는 필요한 경우 태스크의 우선순위를 자동으로 변경해서 우선순위 전도 문제를 줄여준다. 8장에서는 μC/OS-II가 뮤텍스를 어떤 식으로 구현하는지 설명한다. 뮤텍스는 이번 판에 추가된 새로운 서비스이다.
9장, 이벤트 플래그 관리 - 이벤트 플래그는 태스크가 기다릴 수 있는 비트이다. 태스크는 하나 또는 그 이상의 비트들이 켜지거나 꺼질 때를 기다릴 수 있다. 9장은 이벤트 플래그를 구현하는 법과 응용프로그램에서 사용할 수 있는 서비스를 설명한다. 이벤트 플래그는 이번 판에 새로 추가한 서비스이다.
10장, 메시지 메일박스 관리 - 태스크는 메시지 메일박스를 통해 메시지를 전달할 수 있다. 10장은 메시지 메일박스를 어떻게 구현하는지 설명한다.
11장, 메시지큐 관리 - 메시지큐는 메시지 메일박스와 비슷하지만. 메시지를 여러 개 보낼 수 있다는 점이 차이점이다. 11장은 메시지큐를 구현하는 법을 설명한다.
12장, 메모리 관리 - 고정크기 메모리 블록을 지원하는 μC/OS-II의 동적 메모리 관리자를 설명한다.
13장, 포팅 - μC/OS-II를 다른 프로세서에서 사용할 수 있도록 포팅할 때 고려해야 할 일반적인 사항들을 설명한다.
14장, 리얼모드, 라지모델, 부동소수 에뮬레이션을 지원하는 80x86 포트 - μC/OS-II를 인텔/AMD의 80x86 프로세서의 리얼모드 라지 모델에서 어떤 식으로 포팅했는지 설명한다.
15장, 리얼모드, 라지모델, 하드웨어 부동소수를 지원하는 80x86 포트 - 15장은 14장에서 설명한 포트를 확장한 것이다. 이 포트는 문맥전환시 80486, 5x86, 펜티엄 프로세서에 있는 부동소수 레지스터를 처리하는 법을 설명한다. 15장은 제2판에 새로 추가한 것이다.
16장, μC/OS-II 참고 매뉴얼 - 레퍼런스 매뉴얼(Reference Manual), μC/OS-II 응용프로그램을 작성하는 사람들이 참조할 수 있도록, μC/OS-II에서 제공하는 모든 시스템 서비스 함수를 설명한다. 각 함수에 대해, 간단한 함수설명과 함수선언, 위치한 소스파일의 이름, 전달인자와 리턴값의 의미, 주의할 사항과 관련 예제를 포함한다. 두 번째 판에서는 많은 서비스(뮤텍스, 이벤트 플래그)가 추가됐다. 이들 서비스를 16장에 추가했다.
17장, μC/OS-II 설정 매뉴얼 - μC/OS-II를 응용프로그램에서 사용할 경우, 각각의 설정을 위해 사용하는 각각의 #define 문의 의미를 설명한다. 이러한 설정을 통해 μC/OS-II의 필요한 부분만을 이미지에 포함해서 컴파일하도록 구성할 수 있다. 이 기능을 통해 μC/OS-II는 상당한 유연성을 가지게 되며 μC/OS-II를 위해 필요한 코드 및 데이터 메모리 영역을 최소화할 수 있다. 이번 판은 μC/OS-II를 더 세밀하게 설정할 수 있도록 하기 위해 세 배 이상의 설정 상수를 추가했다.
18장, PC 서비스 - 1장의 예제는 IBM/PC 호환기종을 사용한다고 가정한다. 18장은 PC에서 사용할 수 있는 서비스를 어떻게 캡슐화할 수 있는지 설명한다.
부록 A, C 코딩 규약 - 일상적으로 사용하는 코딩 규약을 설명한다.
부록 B, μC/OS-II라이센스 정책 - μC/OS-II를 소스코드와 오브젝트 형태로 배포할 때 지켜야할 라이센스 정책을 설명한다.
부록 C, μC/OS-II 퀵레퍼런스 - μC/OS-II 서비스의 퀵레퍼런스를 제공한다.
부록 D, TO 유틸리티 - TO는 도스창에서 경로명을 일일히 입력하지 않고 편리하게 디렉터리를 이동할 수 있는 DOS 유틸리티다.
부록 E, 참고문헌 목록 - 임베디드 리얼타임 시스템에 대해 좀 더 깊이 알고 싶어하는 사람을 위한 참고 문헌의 목록을 제공한다.
부록 F, 부록 CD - μC/OS-II설치 방법과 부록 CD의 내용을 설명한다.
목차
목차
- 1장 μC/OS-II 시작하기
- 2장 리얼타임 시스템의 개념
- 3장 커널구조
- 4장 태스크 관리
- 5장 시간 관리
- 6장 이벤트 컨트롤 블록
- 7장 세마포어 관리
- 8장 상호배제 세마포어
- 9장 이벤트 플래그 관리
- 10장 메시지 메일박스 관리
- 11장 메시지큐 관리
- 12장 메모리 관리
- 13장 μC/OS-II 포팅
- 14장 80x86 포트 - 리얼모드, 라지모델, 부동소수 연산 에뮬레이션
- 15장 80x86 포트 - 리얼모드, 라지모델, 하드웨어 부동소수 연산
- 16장 μC/OS-II 레퍼런스 매뉴얼
- 17장 μC/OS-II 설정 매뉴얼
- 18장 PC 서비스
- 부록A C 코딩 규약
- 부록B μC/OS-II 라이센스 정책
- 부록C μC/OS-II 퀵 레퍼런스
- 부록D TO 유틸리티
- 부록E 참고문헌