본문 바로가기

Computer Science/기타

AUTOSAR 요약

728x90
반응형

AUTOSAR란 무엇인가?

- Automotive Open System Architecture의 약자, 자동차 SW 아키텍처를 표준화하기 위한 개방형 표준을 나타냄, ECU 및 SW 개발 통합을 위해 표준화된 플랫폼을 제공하는 것을 목표로 한다. 제조업체와 공급 업체 간의 SW 표준을 위한 표준화, SW 모듈화를 통한 재사용성, 기능적 확장을 위한 유연성 및 확장성을 제공한다. 이를 통해서 차량 SW 개발 프로세스를 개선하고 표준화된 인터페이스를 제공한다.

 

Adaptive AUTOSAR 플랫폼과 Classic AUTOSAR 플랫폼의 차이는?

- Classic은 실시간통신 및 제어 시스템에 사용, 제한된 리소스를 가진 전통 ECU에 적합한 정적인 아키텍처, 미리 정의된 컴포넌트 및 통신 스택 사용, 엔진 제어, 브레이크 시스템, 스티어링과 같은 기본적인 자동차 기능 담당, 기본 소프트웨어와 런타임 환경으로 나뉘며 이들을 위한 툴체인이 존재.

 

Basic SW는 자동차의 다양한 기능을 지원하기 위한 핵심 서비스를 제공. 하드웨어 추상화, 통신 스택, 운영체제 추상화, 메모리 관리 등 기본적인 기능을 담당. MCAL(하드웨어 추상화 계층, 다양한 마이크로 컨트롤러와 하드웨어 간 표준화된 인터페이스 제공), ECU Abstraction Layer(다양한 ECU에서 실행되는 SW 컴포넌트 간의 통신을 관리하는 계층), Communication Stack(CAN, LIN, FlexRay 같은 통신 프로토콜 지원하는 통신 스택), Memory Stack(메모리 할당 및 해제를 관리하며, 다양한 메모리 타입에 대한 추상화 제공.)

 

런타임 환경은 소프트웨어 컴포넌트 간의 상호 작용 및 실행을 관리하는 역할, 이벤트 처리, 타이밍 및 스케줄링, 오류 처리를 제공. OS(다양한 태스크 및 스레드의 스케줄링, 인터럽트 처리, 자원 관리와 같은 운영체제 기능 제공), Communication Stack Integration(통신 스택 통합하여 SW 컴포넌트 간 통신 지원), Diagnostic Stack Integration(자가진단 및 오류 처리를 위한 스택을 통합하여 안정적인 동작 보장.)

 

- Adaptive는 높은 컴퓨팅 성능과 유연성이 필요한 고급 용도로 사용, 동적인 아키텍처를 제공, 자동차 내에서 다양한 응용 프로그램 및 서비스를 실행하기 위한 확장성 제공, 주로 엔터테인먼트 시스템, 고급 운전자 지원 시스템, 자율주행에 사용, 런타임 운영체제와 이를 지원하는 툴체인을 포함.

 

A-SPICE란?

- 자동차 SW 개발 프로세스를 향상하기 위한 국제 표준 프로세스 평가 모델 중 하나이다. ISO/IEC 15504를 표준으로 기반으로 하며 자동차 SW 개발 분야에 특화된 내용을 추가로 제공한다. 일관된 개발 프로세스를 정의하고 표준화한다, 개발 프로세스의 성숙도를 측정하여 조직의 프로세스 능력을 이해하고 향상할 수 있도록 돕는다. 평가를 기반으로 조직은 식별된 결함 및 향상의 기회에 대응하여 지속적인 발전을 추구할 수 있다.

 

ISO-26262란?

- 자동차의 기능 안정성을 위한 국제 표준으로 자동차의 전기 및 전자 시스템의 개발 및 유지 보수 과정에서 발생할 수 있는 위험을 관리. 기능 안정성 보장, 위험 분석 평가, 시스템 생명 주기 동안 안정성 유지, 소프트웨어 품질 및 안전성 보장.

 

AUTOSAR의 Classic 플랫폼 영역과 Application 플랫폼 영역에서 Founation 영역은 둘의 핵심요소를 공유하는데 이게 무엇인지?

- ECU 추상화 계층, 통신 스택, 메모리 스택을 공유한다. 

 

Application 플랫폼 영역의 서로 통신 방식은 SOME/IP인데 해당 프로토콜이 무엇인지?

- 차량에서 ECU 디바이스간의 DATA 통신을 지원하기 위해 만들어진 이더넷 기반 프로토콜이다. 기본적으로 UDP 또는 TCP 통신을 하게 된다. 또한 헤더와 페이로드로 구성되어 있다. 실시간성이 중요한 서비스 지향적인 프로토콜이다. 따라서 주로 Adaptive AUTOSAR에서 사용된다.

 

ADAS란?

- 고급 운전자 지원 시스템으로 차량 운전자에게 운전 중의 안전성과 편의성을 향상하기 위한 기술이다. 주로 카메라, 레이더, 라이다 등의 센서 기술을 활용하여 주행 중 정보를 수집하고 처리하여 운전자에게 경고 및 조향, 제동등의 기능을 수행하도록 한다. 자동 비상 제동, 차선 유지 보조, 자동 크루즈 컨트롤, 전후방 감지 및 경고 시스템, 주차 보조 시스템 등이 존재한다.

 

CAN 통신이란?

- CAN 통신이란 Controller Area Network 통신으로 전자 제어 유닛인 ECU 및 센서들이 서로 통신하기 위해 사용되는 표준화된 네트워크 프로토콜이다. CAN 통신은 멀티마스터 통신으로 여러 개의 노드가 동시에 통신할 수 있고, 프레임 단위로 데이터를 주고받는 프레임 구조, 통신 우선순위 적용, 에러 검출 및 복구, CAN High 및 CAN low 전선으로 구성되어 단순한 구조로 설치 및 유지 보수를 쉽게 한다, 실시간 통신을 지원한다.

 

<언어 관련>

 

C와 C++의 차이는?

- C는 절차 지향, C++는 객체 지향이다. 절차 지향은 순차적으로 처리하고, 객체 지향은 데이터와 메소드를 엮어서 처리한다. 객체 지향은 캡슐화, 상속성 같은 특징을 가지며, 구조화되어 있다.

 

C++의 상속관계와 다형성은?

- 상속은 자신의 멤버 변수와 멤버 함수를 자식 클래스에게 물려주는 것, 자식 클래스가 부모 클래스의 속성을 재사용한다. 

다형성은 객체들의 타입이 다르면 같은 함수를 호출해도 서로 다른 동작을 하게 된다. 하나의 코드로 다양한 타입의 객체를 처리할 수 있다.

 

Constructor와 Destructor는?

- 전자는 생성자, 후자는 소멸자이다. C++은 객체 생성 및 제거에 생성자와 소멸자가 사용된다. 생성자를 이용하면 객체의 생성과 동시에 멤버 변수를 초기화할 수 있다. 생성자는 특별한 메서드로 클래스 이름과 동일한 이름으로 구현된다. 생성자를 따로 구현하지 않는다면 객체 생성 시 Default로 멤버 변수가 NULL로 초기화된다. 생성자는 입력 매개 변수를 다르게 함으로써 중복 정의 할 수 있다.

소멸자는 객체를 더 이상 사용하지 않을 때, 객체를 제거하기 위해서 호출하는 함수이다. 객체의 메모리 반환을 위해서 사용한다.

 

C++의 Virtual이란?

- 가상함수는 파생 클래스에서 재정의 할 것으로 기대하는 멤버 함수를 의미한다. 즉, 부모클래스에서 선언한 함수를 자식 클래스에서 재정의 할 것을 알려주며, 오버라이딩 할 때 사용한다. C++은 기본적으로 정적 바인딩이기 때문에 컴파일 타임에 정해진다. 동적 바인딩을 하기 위해서 Virtual 이 필요하다. 동적 바인딩을 통해서 어떤 포인터에 의해 접근되었는지 상관없이, 참조된 인스턴스의 실제 클래스형에 따라 재정의 된다.

 

가상함수의 동작 원리는?

- 가상함수는 가상 테이블에 의존한다. 함수가 Virtual로 선언되었으면, 해당 클래스는 가상 함수 주소를 보관하는 고유한 가상 테이블이 생성된다. 이 포인터는 가상 테이블의 시작 주소를 가리키는 포인터이다. 가상 테이블을 사용해 가상 함수가 호출될 때 어느 주소에 있는 함수가 호출되어야 하는지 결정한다.

 

오버로딩과 오버라이딩이란?

- 오버로딩은 함수명이 동일한 함수를 중복 정의 하는 것이다. 파라미터의 개수, 자료형에 따라 여러 개의 같은 이름의 함수를 만들 수 있다.

오버라이딩은 상속 관계에서 함수 재정의에 사용된다. 부모 클래스 함수를 재정의해서 사용한다.

 

endl과 \n의 차이는?

- 둘 다 줄 바꿈을 위해서 사용된다. 그러나 endl은 출력 버퍼를 비우는 과정이 있어서 바로 출력이 되고 속도가 좀 더 느리다.

 

malloc과 new의 차이는?

- malloc은 C언어에서, new는 c++에서 주로 사용된다. malloc은 함수이고, new는 연산자이다. malloc은 힙 영역에서, new는 동적 메모리 영역에서 할당된다. malloc은 단순히 메모리를 할당하고, 초기화 또는 소멸자 호출을 담당하지 않는다. 따라서 사용자가 직접 초기화를 진행해야 한다. malloc은 할당된 메모리 주소를 가리키는 포인터이고, new는 객체의 위치를 참조하는 포인터이다. new는 할당할 타입이 명시되기 때문에 타입 안정성이 높다. malloc은 amollc을 통해서 메모리를 해제하고, new는 delete를 통해서 헤제한다. 스마트 포인터를 통해서 참조 횟수가 0이면 자동으로 객체를 해제한다.

 

struct와 class의 차이는?

- 둘 다 객체를 구조화하는 역할을 한다. struct는 기본적으로 모든 멤버가 public으로 선언된다. class에서는 모든 멤버가 private으로 선언된다. struct는 데이터를 담는데 중점을 둔. 경량의 데이터 구조를 나타내는 데 사용된다. C++에서는 클래스 사용이 권장된다.

 

얕은 복사 VS 깊은 복사?

- 객체를 생성하고 어떻게 초기화하냐에 따라서 달라진다. 얕은 복사는 실제 데이터가 아닌 단지 메모리 주소만을 복사한다, 깊은 복사는 변수가 관리하는 리소스 자체를 복사한다. 따라서 얕은 복사에 비해서 작업 시간과 리소스의 소모가 따른다.

 

정적 바인딩 VS 동적 바인딩?

- 바인딩은 함수가 호출될 때 함수의 주소를 연결해 주는 것을 의미한다. 정적 바인딩은 컴파일 시점에 발생하고, 이후에 유지된다. 속도가 빠르고 컴파일 타임에 에러 탐색이 가능하다. 동적 바인딩은 런타임 중에 실행과정에서 변경되는 바인딩을 말한다. 가상 함수 호출 시 오버라이딩된 가상 함수를 동적으로 찾아 호출 시 사용, 적응성이 높지만, 타입 체크로 수행 속도 저하 발생 가능, 런타임 에러 발생 가능.

 

파이썬과 C++의 차이점은?

- 둘 다 객체 지향 언어라는 특징이 있지만, 파이썬은 인터프리터 언어로 코드를 한 줄씩 실행하지만, C++은 컴파일러 언어이며 코드를 한 번에 어셈블리어로 번역한 후에 실행한다.

 

Dynamic Linking과 Static Linking의 차이는?

- 링킹은 여러 코드와 라이브러리를 연결해 실행할 수 있는 하나의 파일로 만드는 작업을 의미한다. 정적 링킹은 실행파일 생성 시 라이브러리를 함께 포함하여 실행파일로 만든다. 그러나 실행파일을 만들 때마다 라이브러리 파일이 포함되기 때문에 메모리 낭비가 발생한다. 또한 라이브러리가 바뀔 때마다 다시 컴파일 및 링킹을 해야 한다. 

동적 링킹은 라이브러리 주소만 갖고 있다가 필요할 때마다 불러오는 방식이다. 메모리 낭비가 줄어들지만 속도가 느리고, 불일치 문제가 발생할 수 있다는 단점이 있다.

 

정적 캐스팅과 동적 캐스팅의 차이는?

- 정적 캐스팅은 형변환에 대한 타입 체크를 컴파일 시간에 수행한다, 기본 데이터 타입 간의 변환, 하위 클래스에서 상위 클래스로의 포인터나 참조 타입 변환, 상수성 제거

동적 캐스팅은 실행 타임에 객체의 실제 타입을 체크하여 안전한 다운 캐스트 수행, 다형성과 함께 사용 즉, 클래스가 가상함수를 포함할 때 의미가 있다.

 

프로그램 빌드 과정

- 전처리(주석 제거, define 치환) -> 컴파일(컴파일러를 통해서 어셈블리어로 변환) -> 어셈블러(어셈블러를 통해서 오브젝트파일로 변환) -> 링킹(링커로 오브젝트 파일들을 묶어서 실행 파일로 변환, 운영체제가 로딩할 수 있도록 주소 정보를 할당한 파일을 만들어 낸다. 번역된 파일들을 하나로 연결해 실행 가능한 파일로 만들어준다.) 

 

이렇게 빌드가 완료된 실행 파일은 실행 속도가 빠르다.

 

포인터와 배열의 차이는?

- 배열은 변수 선언과 함께 자신의 데이터를 저장할 공간을 배열의 크기만큼 연속적인 공간을 가진다. 포인터는 자신이 데이터를 저장할 공간을 갖지 않고 공간이 있는 위치를 저장하는 메모리 주소를 갖는다. 둘 다 메모리 주소를 뜻하지만, 배열은 포인터 상수라서 다른 번지를 가리킬 수 없고, 포인터는 변수라 대입이 가능하다.

728x90
반응형