출고예상일 안내
주문하신 상품이 한국에서 현지 배송을 위한 출고단계가 이루어질 것으로 예상되는 날짜입니다. 상품을 준비하는 과정에서 내부적인 사정으로 인해 출고예상일에 다소 오차가 생길 수 있습니다.
여러 상품(예약상품포함)을 함께 주문하신 경우 출고예상일이 가장 늦은 날짜에 맞춰 함께 배송됩니다.

임베디드 시스템을 위한 소프트웨어 공학 총론
원제 : Software Engineering for Embedded Systems
시리즈 :
에이콘 임베디드 시스템 프로그래밍 시리즈
[43]
로버트 오샤나, 마크 크랠링 저 | 윤희병 역 | 에이콘출판 | 2015년 07월
ISBN : 9788960777415 / 1248쪽 188 x 250 (㎜)
이 상품에 궁금하신점이 있으세요? 1:1상담문의

-
코리아교육그룹 교육연구소
-
김희재
-
디렌드라 신하, 테자스 초프라
-
김영욱
- 19,800
- 26,820
- 31,500
- 23,400
출판사 리뷰
출판사 서평 ★ 이 책에서 다루는 내용 ★ ■ 임베디드 시스템을 위한 훌륭한 아키텍처 원칙 ■ 임베디드 프로젝트를 성공적으로 만드는 데 도움을 주는 설계 관례 ■ 디지털 신호 처리, 안전 필수 원칙, 개발 프로?세스를 비롯해 임베디드 시스템의 일부분을 이루는 세부 원칙 ■ 임베디드 시스템을 위한 사용자 인터페이스 개발 방법 ■ 임베디드 시스템 테스팅과 배포 전략, 품질 개발 프로세스 보장 전략 ■ 성능, 메모리, 전력에 대한 임베디드 소프트웨어 최적화 실무 기술 ■ 임베디드 시스템을 위한 다중 코어 소프트웨어 개발 고급 가이드라인 ■ 네트워킹... ★ 이 책에서 다루는 내용 ★ ■ 임베디드 시스템을 위한 훌륭한 아키텍처 원칙 ■ 임베디드 프로젝트를 성공적으로 만드는 데 도움을 주는 설계 관례 ■ 디지털 신호 처리, 안전 필수 원칙, 개발 프로세스를 비롯해 임베디드 시스템의 일부분을 이루는 세부 원칙 ■ 임베디드 시스템을 위한 사용자 인터페이스 개발 방법 ■ 임베디드 시스템 테스팅과 배포 전략, 품질 개발 프로세스 보장 전략 ■ 성능, 메모리, 전력에 대한 임베디드 소프트웨어 최적화 실무 기술 ■ 임베디드 시스템을 위한 다중 코어 소프트웨어 개발 고급 가이드라인 ■ 네트워킹, 스토리지, 자동차 세그먼트를 위한 임베디드 소프트웨어 개발 방법 ■ 임베디드 개발 프로세스 관리 방법 ■ 핵심 문제/이슈 로드맵과 본문 솔루션에 대한 참고 문헌 ■ 적용 방안이라는 맥락에서의 핵심 방법들에 대한 리뷰 ■ 시대를 뛰어 넘는 구현 세부 사항들을 보여주는 사례 ■ 핵심 아이디어 구현 방법, 결정된 선택 근거, 설계 가이드라인과 트레이드오프를 보여주는 짧고 간결한 사례 연구 ★ 이 책의 구성 ★ 1장, '임베디드와 실시간 시스템을 위한 소프트웨어 공학' 임베디드 시스템은 대규모 시스템의 특정 기능을 수행하기 위해 설계된 컴퓨터 시스템으로, 종종 하나 이상의 실시간 컴퓨팅 제약 사항을 갖는다. 이는 하드웨어와 기계적 부분을 포함하는 큰 장치의 부분으로서 내장된다. 이 시스템은 최종 사용자의 다양한 요구에 부응하면서 유연한 범용 컴퓨터와는 극명하게 비교된다. 범용 시스템에 성공적으로 적용됐던 소프트웨어 시스템의 개발 방법과 기법, 툴은 더 이상 임베디드 시스템에는 쉽게 적용되지 못한다. 모바일 임베디드 장치에서 동작하는 소프트웨어 시스템은 근접 최적 성능, 강건성, 분산, 역동성, 이동성 같은 더 전통적인 시스템에서 는 요구되지 않는 특징을 가져야 한다. 1장은 임베디드, 자원 제약, 모바일, 고도로 분산된 세계에 존재하는 소프트웨어 시스템의 핵심 특징을 조사한다. 그리고 이 분야의 맥락 속에서 소프트웨어 공학 방법의 핵심 부분에 대한 적용 가능성을 평가하고 기법(예를 들어 소프트웨어 설계, 컴포넌트 기반 개발, 소프트웨어 아키텍처, 시스템 통합, 테스트)도 다룬다. 1장은 임베디드와 실시간 소프트웨어를 개관적으로 설명한다. 2장, '임베디드 시스템 하드웨어/소프트웨어 공동 개발' 최신 임베디드 시스템에 대한 개발을 기획할 때 하드웨어와 소프트웨어를 독립적으로 고려하지 않는다. 지난 20여 년간 전용 하드웨어 구현에서 범용 임베디드 프로세스를 실행하는 소프트웨어로 시스템의 기능성이 이동된 반면, 칩과 시스템의 복잡성은 엄청날 정도의 성장률을 보였다. 2010년까지 소프트웨어를 개발하려는 노력이 하드웨어를 개발하려는 노력보다 더 커졌으며, 복잡성은 소프트웨어에 비례해 계속 증가하는 추세였다. 독립적인 하드웨어와 소프트웨어 설계 같은 전통적인 설계 기법은 칩 위에 복잡한 시스템을 만들기 위해 통합되는 이기종의 모델과 애플리케이션 때문에 도전이 되고 있다. 설계자는 하드웨어와 소프트웨어의 공동 설계에 사용되는 적절한 기법을 이용해 시스템의 특정 행위와 주어진 성능 목표, 기술이 드러날 수 있도록 시스템의 하드웨어와 소프트웨어 컴포넌트를 함께 작업하는 방법을 고려해야 한다. 3장, '임베디드 시스템을 위한 소프트웨어 모델링' 임베디드 시스템을 위해 모델을 생성하는 것은 아주 간단하거나 믿을 수 없을 정도로 복잡한 동적인 제어 시스템에 대한 시간과 비용 측면에서의 효과적인 접근법을 제공하며, 이 모든 것은 밀접하게 통합된 소프트웨어 집합에서 유지되는 단일 모델을 기반으로 한다. 최신 모델링 소프트웨어 툴을 이용하면 오프라인 시뮬레이션에서 초기 밸리데이션(validation)을 설계하고 수행할 수 있다. 이러한 모델은 차후 수행되는 모든 개발 단계의 기초를 형성한다. 임베디드 설계를 위해 모델을 생성하는 것은 전통적인 설계 접근법보다 더 다양한 이점을 제공한다. 하드웨어 프로토타이핑과 결합된 접근법을 이용하면 베리피케이션(verification)과 밸리데이션이 최종 테스팅 단계에서만 수행되는 것이 아니라 개발 전 기간에 걸쳐 수행되기 때문에 실수할 리스크가 줄어들고 개발 수명주기도 짧아진다. 시스템 모델을 베이시스(basis)로서 이용하면 훨씬 더 빠르고 신뢰성 있는 설계 평가와 예측을 만들어낼 수 있다. 반복적인 접근법은 성능과 신뢰성 관점에서 설계를 향상시키는 결과를 가져온다. 그리고 설계 팀과 설계 단계, 다양한 프로젝트 사이에서 모델을 재사용할 수 있기 때문에 자원에 들어가는 비용이 줄어들며, 물리적 프로토타입에 대한 종속성도 줄어든다. 자동 코드 생성 기법을 이용하면 개발 오류와 부담도 줄일 수 있다. 이러한 이점은 더 정확하고 강인한 제어 설계와 더 짧아진 시장 적시성, 설계 비용에 대한 감소로 이어진다. 4장, '임베디드 시스템을 위한 소프트웨어 설치 아키텍처와 패턴' 임베디드 컴퓨팅 시스템의 소프트웨어 아키텍처는 시스템이 어떻게 동작할 것인지 추론하거나 이해하는 것을 도와주는 시스템의 구조로 묘사할 수 있다. 소프트웨어 아키텍처는 시스템 개발 프로젝트뿐만 아니라 시스템을 위한 청사진으로 동작한다. 아키텍처는 성능, 변경 가능성, 보안성 같은 임베디드 시스템의 주요 품질에 대한 기본적인 프레임워크이며, 아키텍처 비전을 통합하지 않고는 시스템의 어떠한 품질도 획득할 수 없다. 아키텍처는 설계 접근법이 적절한 시스템의 개발로 이어진다는 것을 보장하는 초기 분석에서 만들어지는 산물이다. 4장은 임베디드 소프트웨어 아키텍처의 여러 양상에 대한 세부 사항을 다룬다. 5장, '실시간 빌딩 블록: 이벤트와 트리거' 4장까지는 임베디드 시스템을 개발하기 위한 높은 수준의 추상화와 시스템 설계 아키텍처, 구현 단계에서의 설계 패턴 적용 같은 접근법을 설명했다. 5장에서는 실시간 시스템의 두 가지 기본 개념과 설계 패턴을 소개한다. 여기서 두 가지 기본 개념은 비동기 이벤트(Event) 플래그를 설정하는 능력과 적절한 시기에 어떤 상황을 트리거(Trigger)하는 능력이다. 이들 두 가지 개념은 실시간 운영체제(RTOS)를 이용하지 않는 시스템뿐만 아니라 RTOS를 이용하는 시스템에도 모두 사용된다. 5장은 유스케이스로 시작해서 이벤트와 트리거를 구현하는 서로 다른 방식을 개발한다. 그리고 이들 각각에 대한 세부 구현 내용도 제시하며, 이들에 대한 장단점도 다룬다. 이벤트와 트리거 구현을 위한 소스는 이 장의 끝 부분에서 제공한다. 6장, '임베디드 소프트웨어에 대한 하드웨어 인터페이스' 임베디드 소프트웨어에 제공되는 하드웨어 인터페이스에 대해 다룬다. 그리고 하드웨어 인터페이스를 제공하는 레지스터와 인터럽트에 대해서도 다룬다. 그 외 프로젝트에서 하드웨어 팀과 임베디드 소프트웨어 팀 간 협력을 위한 인간적인 측면에 대해서도 논의한다. 협력은 설계 단계, 공동 개발 단계, 통합 단계, 디버깅 단계 동안 필요하며, 6장에서는 이들 각 단계에서 요구되는 협력의 개념에 대해 알아본다. 그리고 제품의 품질을 향상시키는 다양한 하드웨어 설계 양상과 하드웨어 버전을 지원하는데 도움을 주는 소프트웨어 설계 양상에 대해서도 다룬다. 7장, '임베디드 소프트웨어 프로그래밍과 구현 가이드라인' 임베디드 소프트웨어 개발에 일반적으로 사용되는 몇 가지 가이드라인을 제공한다. 프로그래밍 원칙에서 시작해 가독성, 테스트용이성, 유지 보수성을 포함한다. 7장은 하드웨어 고려 사항, 파일 구조, 개발 가이드라인을 비롯해 임베디드 소프트웨어 프로젝트를 어떻게 시작하는지 대한 논의를
★ 지은이의 말 ★
이 책의 편집을 위해 각 전문 지식 분야에서 기여가 가능한 임베디드 분야 선도 공학자들에게 기고를 요청했다. 그리고 이 책의 각 장이 자체로서 완전한 장이 될 수 있도록 집필 방향을 결정했다. 이는 저자가 하나의 장에서 주어진 목적을 완료할 수 있게 자신이 필요한 만큼의 정보를 모을 수 있음을 의미한다. 일부의 경우 여러 장에서 중복된 정보가 나타날 수도 있지만, 이것도 편집자가 의도적으로 만든 부분이다.
이 책의 목적은 여러 영역 간 자신의 입장을 번복하지 않고 다양한 주제를 상의할 수 있는 소프트웨어 공학 핸드북을 만드는 것이었다. 각 장의 집필을 맡은 저자들은 각자의 지식이 해당 주제에 잘 들어갈 수 있도록 자유로움과 유연성을 제공받았다. 각 장은 실용적이 되도록 설계 됐으며, 저자의 실세계 경험을 기반으로 집필됐다. 이 책은 300년 이상의 임베디드 시스템에 대한 경험을 포함하고 있다.
지난 10여 년간 컴퓨팅 세계는 큰 기계에서 작은 기계로, 고정식 기계에서 모바일 기계로, 데스크톱 기계에서 임베디드 장치로 이동했다. 데스크톱 시스템에 성공적으로 적용됐던 소프트웨어 시스템을 개발하는 방법과 기법, 툴은 더 이상 임베디드 애플리케이션에는 쉽게 적용되지 못한다. 모바일 임베디드 장치에서 동작하는 소프트웨어 시스템은 더 전통적인 시스템에서는 요구되지 않는 다음과 같은 특징을 가져야 한다.
• 근접 최적 성능
• 강건성
• 분산
• 역동성
• 이동성
이 책은 임베디드, 자원 제약, 모바일, 네트워크 세계에 존재하는 소프트웨어 시스템의 핵심 특징을 조사한다. 그리고 이들 도메인에서 소프트웨어 공학 방법과 기법의 핵심 부분(예를 들어 소프트웨어 설계, 컴포넌트 기반 개발, 소프트웨어 아키텍처, 시스템 통합, 테스트)에 대한 적용 가능성을 평가한다.
★ 옮긴이의 말 ★
정말 기나긴 시간이었다. 2년 전 4월 말, 우연히 아마존을 탐색하던 중 이 책이 곧 발간된다는 사실을 발견하곤 바로 에이콘출판사에 번역 요청을 드렸고, 곧 바로 출판사 사장님의 승인이 떨어져 번역이 시작됐다. 임베디드 소프트웨어 분야에서 10여 년 동안 강의와 연구를 해왔고, 2012년에는 『임베디드 소프트웨어 개론』이라는 책을 펴내고 이 책으로 국방대, 서강대, 고려대 등 여러 대학에서 강의도 했지만, 하드웨어를 이해시키면서 임베디드 소프트웨어를 강의하고 싶었다. 내 마음 한구석에 늘 자리 잡고 있었던 아쉬운 마음을 한 번에 사로잡았던 책이 바로 이 책이었다.
그만큼 이 책은 하드웨어와 소프트웨어의 공동 설계를 비롯해 임베디드 시스템 개발의 전 수명주기에 걸쳐 필요한 모든 내용을 담고 있다고 해도 과언이 아니다. 특히 각계각층 독자들의 요구를 충족시키기 위해 임베디드 시스템 개발을 위한 5계층 체계와 임베디드 시스템의 6단계 하드웨어/소프트웨어 공동 설계 모델을 정립하고, 5계층과 6단계 공동 설계 모델을 네 가지의 최신 사례연구와 결합시켜 책의 구조를 제시한 것은, 이 책만이 가진 장점 중의 장점이다. 또한 책의 완성도와 이해도를 높이기 위해 임베디드 소프트웨어 산업 분야에서 수십 년 이상 경험을 쌓으면서 세계적으로 명성을 떨치는 두 명의 전문 편집자가 책 구성부터 편집, 발간까지 책임을 맡았으며, 책의 전문성과 신뢰성을 높이기 위해 개요부터 사례 연구까지 각 해당 분야에서 왕성히 활동하고 있던 세계적인 선도공학자 16명이 저자로 참여했다.
이 책은 임베디드 소프트웨어 분야의 전문가가 되길 원하는 모든 사람에게 개념부터 사례 연구까지, 더 나아가 미래 추세까지 제공하는 임베디드 시스템을 위한 소프트웨어 공학 분야의 전문 백과사전이라 할 수 있다. 특히 그 동안 임베디드 하드웨어와 소프트웨어 분야에 각각 종사하던 독자들이 늘 아쉽게 생각하면서 접해보고 싶었던 임베디드 시스템의 하드웨어/소프트웨어 공동 설계, 소프트웨어 성능 공학, 임베디드 소프트웨어의 성능/메모리/전력 최적화, 임베디드 시스템의 애자일 개발 등을 함께 다루고 있어, 해당 분야에 종사하는 개발자뿐만 아니라 이 분야에 관심을 가진 모든 사람에게도 큰 도움을 제공하는 귀중한 안내서가 될 것이다.
목차
1장 임베디드와 실시간 시스템을 위한 소프트웨어 공학
__소프트웨어 공학
__임베디드 시스템
____임베디드 시스템은 반응 시스템이다
__실시간 시스템
____실시간 시스템의 유형: 소프트와 하드
____하드 실시간 시스템의 사례
____실시간 이벤트의 특성
____효율적 실행과 실행 환경
__실시간 시스템 설계에서의 도전
____반응 시간
____장애로부터 복구
____임베디드 시스템 소프트웨어 구축 프로세스
__분산과 멀티프로세서 아키텍처
__임베디드 시스템을 위한 소프트웨어
____슈퍼 루프 아키텍처
__임베디드 시스템을 위한 하드웨어 추상화 계층(HAL)
__정리
2장 임베디드 시스템 하드웨어/소프트웨어 공동 개발
__오늘날의 임베디드 시스템: 사례
__HW/SW 프로토타이핑 사용자
__HW/SW 프로토타이핑 선택 사항
__프로토타이핑 결정 기준
__올바른 프로토타입 선택
__산업 설계 사슬
__설계 흐름의 변경 필요성
__가상 프로토타입의 다양한 유형
__가상 프로토타입의 간략한 역사
__독점 오퍼에 대한 제한 사항
__가상 프로토타입을 빠르게 만드는 것
__표준화: SystemC TLM-2.0 시대
____SystemC TLM-2.0 추상화 레벨
__아키텍처 가상 프로토타입
__소프트웨어 가상 프로토타입
__정리: 가상화 중요성의 증가
3장 임베디드 시스템을 위한 소프트웨어 모델링
__언제 그리고 왜 임베디드 시스템을 모델로 만들려고 하는가?
__모델링
__모델링 언어는 무엇인가?
__모델링 언어의 사례
__V 다이어그램의 약속
__왜 임베디드 시스템을 모델로 만들려고 하는가?
__언제 임베디드 시스템을 모델로 만들려고 하는가?
____임무와 안전 필수 애플리케이션
____고도로 복잡한 애플리케이션과 시스템
__운용의 복잡성
__결함 비용과 검출 시간
__규모가 큰 개발 팀은 모델링을 요구한다
__모델링은 종종 유일한 선택이다
__모델링은 훌륭하지만, 모든 모델이 틀리지는 않는가?
__자신의 프로토타입을 가져야 한다: 이제 어떻게 해야 하는가?
__정리
__다음 단계: 시도하라!
____DC 모터를 이용한 폐회로 제어
____다운로드 가능 킷을 이용한 프로토타이핑 더 배우기
____NI 상태 차트 모듈을 이용한 애플리케이션 설계
____브러시를 갖는 DC 모터의 H 브리지 회로의 설계와 시뮬레이션
____모델리카 모델을 이용한 다중 도메인의 물리적 모델링
__참고 문헌
4장 임베디드 시스템을 위한 소프트웨어 설치 아키텍처와 패턴
__아키텍처와 설계 개요
____아키텍처는 시스템 전역 최적화에 관한 것이다
__세 가지 설계 레벨
__설계 패턴이란?
____설계 패턴을 이용하기 위해 객체지향 기법을 이용해야만 하는가?
____아키텍처 사례
____패턴 사용
____트레이드오프 결정
__소프트웨어 아키텍처 범주와 뷰
____주 아키텍처 뷰
____2차 관점
__정리
__참고 문헌
5장 실시간 빌딩 블록: 이벤트와 트리거
__이벤트와 트리거
__실내 온도 구성단위
__이벤트 시스템
__이벤트 처리
__이벤트 메소드
__이벤트 데이터 구조
__재진입
____인터럽트 불능과 가능
____EnterCritical과 ExitCritical
____세마포어
____Enter/ExitCritical을 이용한 구현
__이벤트 처리
__통합
__트리거
__LED 깜박이기
__설계 아이디어
__틱 타이머
__트리거 인터페이스
__트리거 디스크립터
__데이터 할당
__SetTrigger
__IncTicks
__재진입 만들기
__초기화
__깜박이기!
__삐 소리 내기!
__실시간 양상
__정리와 소스코드
6장 임베디드 소프트웨어에 대한 하드웨어 인터페이스
소개
하드웨어 팀과의 협업
____능동적 협업
____앰버서더
____레지스터 설계 툴
____공동 개발 활동
____시스템 통합
__유용한 하드웨어 설계 양상
____하드웨어 이벤트 통지
____하드웨어에서의 작업 시작
____비트 필드 정렬
____고정 비트 위치
____블록 버전 번호
____디버그 후크
__다중 하드웨어 버전 지원
____컴파일 시간 스위치
____빌드 시간 스위치
____실행 시간 스위치
__자가 적응 스위치
__어려운 하드웨어 상호작용
____정확한 레지스터 접근
____동일 레지스터에서의 혼합 비트 유형
____에지와 레벨 인터럽트
__테스팅과 문제 해결
__일시적 후크
____영구적 후크
__정리
__성공 사례
7장 임베디드 소프트웨어 프로그래밍과 구현 가이드라인
__소개
____고품질 프로그래밍의 원칙
____임베디드 프로그래밍이 일반 프로그래밍과 다른 점
__임베디드 소프트웨어 프로젝트 시작
____하드웨어 플랫폼 입력
____프로젝트 파일/구성
____팀 프로그래밍 가이드라인
____구문 표준
____소스코드에서의 안전성 요구 사항
__변수 구조
____변수 선언
____데이터 유형
____정의
8장 임베디드 운영체제
__포어그라운드/백그라운드 시스템
__실시간 커널
____실시간 운영체제(RTOS)
____임계 구간
____태스크 관리
____태스크 우선순위 할당
____스택 크기 결정
____유휴 태스크
__우선순위 레벨
__준비 목록
____선점형 스케줄링
__스케줄링 시점
____라운드로빈 스케줄링
__문맥 스위칭
__인터럽트 관리
____CPU 인터럽트 처리
____비커널 인식 인터럽트 서비스 루틴(ISR)
____다중 인터럽트 우선순위를 가진 프로세서
____공통 장소에 대한 모든 인터럽트 벡터
____유일 장소에 대한 모든 인터럽트 벡터
__클록 틱(또는 시스템 틱)
__대기 목록
__시간 관리
__자원 관리
____자원 관리, 불능/가능 인터럽트
____자원 관리, 세마포어
____자원 관리, 우선순위 전환
____자원 관리, 상호 배제 세마포어(뮤텍스)
____자원 관리, 교착상태(또는 죽음의 포옹)
__동기화
____동기화, 세마포어
____동기화, 크레딧 트래킹
____쌍방 랑데부
__메시지 패싱
____메시지
____메시지 큐
____제어 흐름
____클라이언트와 서버
__메모리 관리
__정리
9장 임베디드 시스템에서 설계에 의한 소프트웨어 재사용
__소프트웨어 재사용이 문제가 되는 이유
__소프트웨어 재사용의 제한 사항
__소프트웨어 재사용의 종류
__계층에 의한 재사용 구현
__다음 레벨로 이동
__컴포넌트 팩토리 소개
__팩토리 하드웨어 구성
__팩토리 소프트웨어 구성
__팩토리가 재사용성을 지원하는 방법
__RTOS 불가지론
__임의 확장성
__정리
__참고 문헌
10장 임베디드 시스템을 위한 소프트웨어 성능 공학
__사례: eNodeB 애플리케이션에서 지연과 처리량
__성능 패턴과 안티패턴
__참고 문헌
11장 임베디드 소프트웨어의 성능 최적화
__코드 최적화 프로세스
__개발 툴 이용
____컴파일러 최적화
____기본 컴파일러 구성
____최적화 보장 활동
____추가 최적화 구성
____프로파일러 이용
__배경: 임베디드 아키텍처 이해
____자원
__기본 C 최적화 기법
____올바른 데이터 유형 선택
____함수 호출 관례
____포인터와 메모리 접근
____제한과 포인터 대역
____루프
____추가 팁과 비법
__일반 루프 변환
____루프 언롤링
____다중 샘플링
____부분 합
____소프트웨어 파이프라이닝
__최적화 기법 애플리케이션 사례: 교차 상관관계
____준비
____최초 구현
____1단계: 분수 연산을 위한 인트린식 사용과 루프 카운트 명시
____2단계: 데이터 정렬 명시와 다중 샘플링 알고리즘 수정
____3단계: 어셈블리 언어 최적화
12장 임베디드 소프트웨어의 메모리 최적화
__소개
__코드 크기 최적화
____컴파일러 플래그와 플래그 마이닝
____크기와 성능








































