레이블이 Embedded Systems Architecture인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Embedded Systems Architecture인 게시물을 표시합니다. 모든 게시물 표시
2008년 7월 10일 목요일
BSP
BSP(board support package) 는 OS 제공자에 의해 제공되는 추가의 컴포넌트이며, 그 주요한 목적은 운영체제와 범용 디비아스 드라이버 사이에 가상 계층을 제공하기 쉽게 하는 것이다. BSP는 OS가 새로운 하드웨어 환경에 더 쉽게 포팅될 수 있도록 만들어준다. 왜냐하면 그 것은 하드웨어에 독립적인 소스 코드와 하드웨어에 의존적은 소스 코드의 시스템 안에 집적해 주기 때문이다. BSP는 하드웨어를 최적화할 수 있는 소프트웨어의 상위 계층에 서브루틴들을 제공하며, 컴파일시 유연성을 제공한다. 이러한 루틴들은 시스템 어플리케이션 소프트웨어의 나머지로부터 컴파일된 디바이스 드라이버 코드를 가르키고 있기 때문에, BSP는 범용 디바이스 드라어버 코드의 런타임 포팅 가능성을 제공한다.BSP는 아키텍처에 특화된 디바이스 드라이버 설정 관리와 범용 디바이스 드라이버에 접근할 수 있는 OS(또는 소프트웨어 상위계층)을 위한 API를 제공한다. BSP는 또한 시스템 안에서의 디바이스 드라이버(하드웨어)와 OS의 초기화를 관리하는 책임을 맡고 있다.
2008년 7월 9일 수요일
메모리 관리
커널은 태스크를 통해 임베디드 시스템 안에서 프로그램 코드를 관리한다. 커널은 시스템 내에서 태스크들을 로드하고 실행하는 어떤시스템을 가지고 있어어 한다. CPU는 캐시 또는 RAM안에 있는 태스크 코드를 실행만 하기 때문이다. 동일한 메모리 공간을 고유하는 다중 태스크 코드를 보호하기 위해서는 보안 시스템 메커니즘을 필요로 한다. 또한 OS는 그것들을 관리하고 있는 태스크들과 동일한 메모리 공간 안에 있어야 하기 때문에, 보호 메커니즘은 메모리 안에 있는 그 자신의 코드를 관리하고 자신이 관리하는 태스크 코드로부터 보호 매커니즘을 루틴을 보호해야 한다. 일반적으로 커널의 메모리 관리기능은 다은과 같은 사항들을 포함한다.
● 논리(물리) 메모리와 태스크 메모리 레퍼런스 사이에서 매핑을 관리한다.
● 이용 가능한 메모리 공간으로 어떤 프로세스가 로드될지를 결정한다.
● 시스템을 구성하는 메모리 프로세스를 위한 메모리를 할당 및 해제한다.
● C 언어의 'alloc'과 'dealloc' 함수처럼,(프로세스 내에서) 코드 요청의 메모리 할당 및 해제 또는 특정 버퍼 할당 및 해제 루틴을 지원한다.
● 시스템 컴포넌트들의 메모리 사용을 추적한다.
● 프로세스 메모리 보호를 보장한다.
대부분의 OS 프로세스들은 보통 실행되는 루틴에 따라 kernel mode와 user mode의 두 모두 중 하나에서 동작한다. 커널 루틴들은 미들웨어 또는 어플리케이션과 같은 소프트웨어의 상위 계층들과는 다른 메모리 공간 및 계층 안의 커널모드(관리자모드)에서 동작한다. 전형적으로 소프트웨어의 이러한 상위 계층들은 사용자 모드에서 동작하며, 시스템호출(system call), 커널의 서브루틴으로서의 상위 레벨 인터페이스를 통해서만 커널 모드에서 동작하는 것에 접근이 가능하다.
처리를 위해 RAM으로 로드 될때 다중 프로세스는 동일한 물리 메모리를 공유하고 있기 때문에, 프로세스들이 하나의 물리 메모리 공간의 안팎으로 교체될 때 서로서로에게 의도 하지 않은 영향을 미치지 못하도록 보호 메커니즘이 있어야 한다. 보통 운영체제에 의해 메모리 스와핑이라는 방법으로 해결하는데 이것은 메모리의 일부분이 런타임시 메모리 안팎으로 교체되는것을 말한다.
● 논리(물리) 메모리와 태스크 메모리 레퍼런스 사이에서 매핑을 관리한다.
● 이용 가능한 메모리 공간으로 어떤 프로세스가 로드될지를 결정한다.
● 시스템을 구성하는 메모리 프로세스를 위한 메모리를 할당 및 해제한다.
● C 언어의 'alloc'과 'dealloc' 함수처럼,(프로세스 내에서) 코드 요청의 메모리 할당 및 해제 또는 특정 버퍼 할당 및 해제 루틴을 지원한다.
● 시스템 컴포넌트들의 메모리 사용을 추적한다.
● 프로세스 메모리 보호를 보장한다.
대부분의 OS 프로세스들은 보통 실행되는 루틴에 따라 kernel mode와 user mode의 두 모두 중 하나에서 동작한다. 커널 루틴들은 미들웨어 또는 어플리케이션과 같은 소프트웨어의 상위 계층들과는 다른 메모리 공간 및 계층 안의 커널모드(관리자모드)에서 동작한다. 전형적으로 소프트웨어의 이러한 상위 계층들은 사용자 모드에서 동작하며, 시스템호출(system call), 커널의 서브루틴으로서의 상위 레벨 인터페이스를 통해서만 커널 모드에서 동작하는 것에 접근이 가능하다.
처리를 위해 RAM으로 로드 될때 다중 프로세스는 동일한 물리 메모리를 공유하고 있기 때문에, 프로세스들이 하나의 물리 메모리 공간의 안팎으로 교체될 때 서로서로에게 의도 하지 않은 영향을 미치지 못하도록 보호 메커니즘이 있어야 한다. 보통 운영체제에 의해 메모리 스와핑이라는 방법으로 해결하는데 이것은 메모리의 일부분이 런타임시 메모리 안팎으로 교체되는것을 말한다.
2008년 7월 5일 토요일
버스
■ 버스란?
버스는 임베디디 보드상에 있는 모든 주요한 컴포넌트들 사이에서, 다양한 데이터 신호들과 어드레스 신호, 그리고 제어신호들(클럭 신호, 요청신호, 응답신호, 데이터 유형등)을 운반해 주는 선들의 모임. 여기서 주요 컴포넌트들이란 I/O 서브시스템들과 메모리 서브시스템, 그리고 주프로세서를 들수 있다.
■ 버스의 종류
1. 시스템 버스(system bus, 메인버스, 로컬버스, 프로세서 메모리 버스)
외부 주 메모리와 캐시를 주 CPU에 연결하고, 브리지들을 다른 버스에 연결하는 것을 말함. 일반적으로 매우 짧고, 고속이며, 관례적인버스이다.
2. 백플레인 버스(backplane bus)
한 버스에 메모리, 주 프로세서, 그리고 I/O를 상호 연결하고 있는 버스
3. I/O 버스
확장 버스, 외부 버스, 호스트 버스라고 불리며, 남아 있는 컴포넌트들을 주 CPU에 연결하거나, 컴포넌트들끼리 연결하거나, 브리지를 통해 시스템버스에 연결하거나, I/O 통신 포트를 통해 임베디드 시스템 그자체에 연결하는등 시스템 버스의 확장 형태처럼 동작한다.
※ 시스템 버스와 I/O 버스 사이의 주요한 차이점은 I/O 버스상에 IRQ(interrupt request) 제어신호의 존재 가능성이다.
버스는 임베디디 보드상에 있는 모든 주요한 컴포넌트들 사이에서, 다양한 데이터 신호들과 어드레스 신호, 그리고 제어신호들(클럭 신호, 요청신호, 응답신호, 데이터 유형등)을 운반해 주는 선들의 모임. 여기서 주요 컴포넌트들이란 I/O 서브시스템들과 메모리 서브시스템, 그리고 주프로세서를 들수 있다.
■ 버스의 종류
1. 시스템 버스(system bus, 메인버스, 로컬버스, 프로세서 메모리 버스)
외부 주 메모리와 캐시를 주 CPU에 연결하고, 브리지들을 다른 버스에 연결하는 것을 말함. 일반적으로 매우 짧고, 고속이며, 관례적인버스이다.
2. 백플레인 버스(backplane bus)
한 버스에 메모리, 주 프로세서, 그리고 I/O를 상호 연결하고 있는 버스
3. I/O 버스
확장 버스, 외부 버스, 호스트 버스라고 불리며, 남아 있는 컴포넌트들을 주 CPU에 연결하거나, 컴포넌트들끼리 연결하거나, 브리지를 통해 시스템버스에 연결하거나, I/O 통신 포트를 통해 임베디드 시스템 그자체에 연결하는등 시스템 버스의 확장 형태처럼 동작한다.
※ 시스템 버스와 I/O 버스 사이의 주요한 차이점은 I/O 버스상에 IRQ(interrupt request) 제어신호의 존재 가능성이다.
2008년 7월 4일 금요일
파이프라인
■ 파이프라인이란?
파이프라인은 RISC 프로세서가 명령어를 실행하기 위해 사용하는 메커니즘이다. 파이프 라인 한 명령어가 해독되어 실행되는 동안, 다음 명령어를 미리 읽어올 수 있도록 함으로써 실행 속도를 향상시켜 준다. 파이프라인은 자동차를 제조하기 위해 특별한 작업을 수행하는 각 단계를 자동차 제조 라인으로 비유할 수도 있다.
■ 3단 파이프라인의 구조
1. Fetch : 메모리에서 명령어를 로드한다.
2. Decode : 실행한 명령어를 해독한다.
3. Execute : 명령어를 처리하고 그 결과를 레지스터에 저장한다.
■ ARM9 5단 파이프라인
Fetch - Decode - Execute - Memory - Write
■ ARM10 6단 파이프라인
Fetch - Issue - Decode - Execute - Memory - Write
파이프라인은 RISC 프로세서가 명령어를 실행하기 위해 사용하는 메커니즘이다. 파이프 라인 한 명령어가 해독되어 실행되는 동안, 다음 명령어를 미리 읽어올 수 있도록 함으로써 실행 속도를 향상시켜 준다. 파이프라인은 자동차를 제조하기 위해 특별한 작업을 수행하는 각 단계를 자동차 제조 라인으로 비유할 수도 있다.
■ 3단 파이프라인의 구조
1. Fetch : 메모리에서 명령어를 로드한다.
2. Decode : 실행한 명령어를 해독한다.
3. Execute : 명령어를 처리하고 그 결과를 레지스터에 저장한다.
■ ARM9 5단 파이프라인
Fetch - Decode - Execute - Memory - Write
■ ARM10 6단 파이프라인
Fetch - Issue - Decode - Execute - Memory - Write
인터럽트(interrupt)
■ 인터럽트란?
주 프로세스에 의한 명령어열의 실행 동안 어떤 이벤트에 의해 발생된 신호를 말한다.
■ 인터럽트의 종류
1. 소프트웨어 인터럽트
주 프로세서에 의해 실행되고 있는 현재 명령어열 안에 있는 어떤 명령어에 의해 내부적으로 발생
2. 내부 하드웨어 인터럽트
주 프로세서의 의해 실행되는 현재 명령어열과 관련된 문제 때문에 발생한 이벤트 에 의해 초기화. 오버플로우 또는 0으로의 나눗셈과 같은 잘못된 산술연산, 디버깅 (싱글 스텝, 브레이크 포인트), 유효하지 않는 명령어(오피코드)등과 같은 하드웨어의특징(제한)때문에 발생. 익셉션 또는 트랩이라고 불림
3. 외부 하드웨어 인터럽트
주 CPU가 아닌 하드웨어(예를 들어, 보드 버스, I/O등)에 의해 초기화된 인터럽트 인터럽트를 실제 발생시키는 것은 초기 디바이스 드라이버 코드 안에 잠재적인 인터럽트 소스를 활성화시키거나 비활성화시키는 레지스터 비트를 통해 소프트웨어로 결정
■ 외부 인터럽트의 처리
외부 이벤트에 의해 발생된 인터럽트에서 주 프로세서는 IRQ(interrupt request level) 핀 또는 포트라고 불리는 입력 핀을 통해 외부 중재 하드웨어(ex : 인터럽트 컨트롤러)에연결되어 있거나 인터럽트를 발생시키고자 할 때 주 프로세서에게 신호를 보내는 전용 인터럽트 포트를 가진 보드상의 다른 컴포넌트에 직접연결된다. 이런 종류의 인터럽트들은 레벨 트리거(level-triggered) 또는 에지 트리거(edge-triggered)중 하나의 방법으로 발생한다. 레벨 트리거 인터럽트는 IRQ 신호가 어떤 레벨에 있을때(ex : HIGH or LOW) 초기화된다. 에지 트리거 인터럽트는 IRQ 라인상 변화(LOW 에서 HIGH : 상승에지, HIGH 에서 LOW : 하강에지)가 발생할 때 발생한다.
주 프로세스에 의한 명령어열의 실행 동안 어떤 이벤트에 의해 발생된 신호를 말한다.
■ 인터럽트의 종류
1. 소프트웨어 인터럽트
주 프로세서에 의해 실행되고 있는 현재 명령어열 안에 있는 어떤 명령어에 의해 내부적으로 발생
2. 내부 하드웨어 인터럽트
주 프로세서의 의해 실행되는 현재 명령어열과 관련된 문제 때문에 발생한 이벤트 에 의해 초기화. 오버플로우 또는 0으로의 나눗셈과 같은 잘못된 산술연산, 디버깅 (싱글 스텝, 브레이크 포인트), 유효하지 않는 명령어(오피코드)등과 같은 하드웨어의특징(제한)때문에 발생. 익셉션 또는 트랩이라고 불림
3. 외부 하드웨어 인터럽트
주 CPU가 아닌 하드웨어(예를 들어, 보드 버스, I/O등)에 의해 초기화된 인터럽트 인터럽트를 실제 발생시키는 것은 초기 디바이스 드라이버 코드 안에 잠재적인 인터럽트 소스를 활성화시키거나 비활성화시키는 레지스터 비트를 통해 소프트웨어로 결정
■ 외부 인터럽트의 처리
외부 이벤트에 의해 발생된 인터럽트에서 주 프로세서는 IRQ(interrupt request level) 핀 또는 포트라고 불리는 입력 핀을 통해 외부 중재 하드웨어(ex : 인터럽트 컨트롤러)에연결되어 있거나 인터럽트를 발생시키고자 할 때 주 프로세서에게 신호를 보내는 전용 인터럽트 포트를 가진 보드상의 다른 컴포넌트에 직접연결된다. 이런 종류의 인터럽트들은 레벨 트리거(level-triggered) 또는 에지 트리거(edge-triggered)중 하나의 방법으로 발생한다. 레벨 트리거 인터럽트는 IRQ 신호가 어떤 레벨에 있을때(ex : HIGH or LOW) 초기화된다. 에지 트리거 인터럽트는 IRQ 라인상 변화(LOW 에서 HIGH : 상승에지, HIGH 에서 LOW : 하강에지)가 발생할 때 발생한다.
2008년 7월 1일 화요일
DMA란?
1. DMA의 개념
이러한 DMA 컨트롤러는 입출력장치와 관련된 개념입니다. 일반적으로 이러한 입출력 창치는 직접 시스템 버스에 접속되지 않습니다. 그 이유는 입출력 장치가 다양하고, 각기 전송속도의 차이가 나며, 데이터의 형식과 길이가 다르기 때문입니다. 그래서 입출력 장치를 제어하기 위해서는 입출력 제어기가 필요합니다. 그리고, 입출력 제어기는 입출력 장치의 제어와 타이밍을 조절하는 역할을 하고, CPU와 입출력 장치의 통신을 담당합니다. 또한 데이터의 버퍼링이나 오류를 검출하는 역할을 수행합니다. 물론 CPU는 해당 입출력 제어기를 통하여 입출력 동작을 수행하고요. 그런면에서 DMA는 넓은 의미에서 입출력 제어기의 범위로 이해하셔도 무방합니다.
2. 보통메모리 제어방식
질문자가 말한 보통의 메모리 제어방식은 아마도 인터럽트를 통한 입출력 제어 방식을 의미하는 것 같습니다. 이러한 인터럽트 방식은 I/O동작이 입출력 제어기와 입출력 장치사이에서 진행되는 동안에는 CPU가 다른 작업을 할 수 있습니다.
동작순서를 살펴보면,
1. CPU가 I/O제어기에 명령을 보내고, CPU는 다른 작업을 수행 합니다.
2. 제어기는 I/O 장치를 제어하여 I/O 명령을 수행 합니다.
3. I/O 명령 수행이 완료되면, 제어기는 CPU 로 인터럽트 신호를 보냅니다.
4. CPU는 인터럽트 신호를 받는 즉시 원래의 프로그램으로 돌아와서 수행을 계속한다.
하지만 이런 인터럽트 방식은 많은 문제점이 있는데, 이를 해결하기 위해 다중 인터럽선을 사용하는방식, 데이지 체인 방식, 소프트웨어 폴링 방식 같은 것을 사용하기도 합니다.그러나 인터럽트 방식은 기억장치와 I/O 장치간의 데이터 통신에 CPU가 직접개입을 하여야 하는데, 이로인하여, 이동되는 데이터들이 반드시 CPU를 경유해야 한다는 단점이 있습니다. 이것을 해결하기 위해 등장한 것이 DMA 방식입니다.
3. DMA 방식
이러한 DMA방식은 CPU의 개입없이 I/O장치와 기억장치 사이에 데이터 전송이 일어나므로 이를 직접메모리 제어 방식이라 부르는 것입니다. DMA 커트롤러는 CPU를 사용하지 않으므로 I/O장치의 주소와 연산지정자(읽기/쓰기), 주기억 장치 영역의 시작주소, 전송될 데이터 단어들의 수를 알 수 있도록 구성되어야 합니다. 또한 사이클 훔침이라해서 CPU가 주기억 장치를 엑세스 하지 않는 동안에 시스템의 버스를 사용하는 기능이 필요합니다.
주기억 장치의 데이터 블록을 디스크에 저장하는 DMA과정을 살펴보면,
1. CPU가 DMA 컨트롤러에게 명령을 보냅니다.
2. DMA 는 CPU로 BUS REQ 신호를 보냅니다.
3. CPU가 DMA에세 BUS GRANT 신호를 보냅니다.
4. DMA가 메모리에서 데이터를 읽어 디스크에 저장합니다.<--(요것이 핵심)
5. 전송할 데이터가 남아 있으면, 위의 과정 반복
6. 모든 데이터 전송이 끝나면, CPU에게 INTR신호를 보냄
하지만 이런 DMA제어기를 이용한 I/I데이터 전송의 문제는 지원에 한계가 있으며, 버퍼링을 위한 내부 기억장치가 따로 필요하는 단점이 있습니다.
4. 채널
일반적으로 DMA 제어에서 채널을 의미하는 것은 IOP입니다. IOP는 입출력 프로세서를 의미하는데, 이러한 IOP는 4가지로 구성됩니다.
1. I/O명령을 실행할 수 있는 프로세서
2. 데이터 블록의 임시 저장을 위한 로컬메모리
3. 시스템 버스에 대한 인터페이스 및 버스 마스터 회로
4. I/O버스 중재 회로,
혹은 OS의 디바이스 드라이브 루틴 프로그램들이 IOP에서 실행되기도 합니다.
*PS : 그리고, 32비트 cpu의 경우 DMA방식을 사용하는 이유는 일반적인 입출력 장치가 32비트수를 필요로 하지 않기 때문이기도 합니다. 또한 멀티라는 개념이 등장하면서 이러한 기술들이 활용되었기 때문이기도 합니다.
이러한 DMA 컨트롤러는 입출력장치와 관련된 개념입니다. 일반적으로 이러한 입출력 창치는 직접 시스템 버스에 접속되지 않습니다. 그 이유는 입출력 장치가 다양하고, 각기 전송속도의 차이가 나며, 데이터의 형식과 길이가 다르기 때문입니다. 그래서 입출력 장치를 제어하기 위해서는 입출력 제어기가 필요합니다. 그리고, 입출력 제어기는 입출력 장치의 제어와 타이밍을 조절하는 역할을 하고, CPU와 입출력 장치의 통신을 담당합니다. 또한 데이터의 버퍼링이나 오류를 검출하는 역할을 수행합니다. 물론 CPU는 해당 입출력 제어기를 통하여 입출력 동작을 수행하고요. 그런면에서 DMA는 넓은 의미에서 입출력 제어기의 범위로 이해하셔도 무방합니다.
2. 보통메모리 제어방식
질문자가 말한 보통의 메모리 제어방식은 아마도 인터럽트를 통한 입출력 제어 방식을 의미하는 것 같습니다. 이러한 인터럽트 방식은 I/O동작이 입출력 제어기와 입출력 장치사이에서 진행되는 동안에는 CPU가 다른 작업을 할 수 있습니다.
동작순서를 살펴보면,
1. CPU가 I/O제어기에 명령을 보내고, CPU는 다른 작업을 수행 합니다.
2. 제어기는 I/O 장치를 제어하여 I/O 명령을 수행 합니다.
3. I/O 명령 수행이 완료되면, 제어기는 CPU 로 인터럽트 신호를 보냅니다.
4. CPU는 인터럽트 신호를 받는 즉시 원래의 프로그램으로 돌아와서 수행을 계속한다.
하지만 이런 인터럽트 방식은 많은 문제점이 있는데, 이를 해결하기 위해 다중 인터럽선을 사용하는방식, 데이지 체인 방식, 소프트웨어 폴링 방식 같은 것을 사용하기도 합니다.그러나 인터럽트 방식은 기억장치와 I/O 장치간의 데이터 통신에 CPU가 직접개입을 하여야 하는데, 이로인하여, 이동되는 데이터들이 반드시 CPU를 경유해야 한다는 단점이 있습니다. 이것을 해결하기 위해 등장한 것이 DMA 방식입니다.
3. DMA 방식
이러한 DMA방식은 CPU의 개입없이 I/O장치와 기억장치 사이에 데이터 전송이 일어나므로 이를 직접메모리 제어 방식이라 부르는 것입니다. DMA 커트롤러는 CPU를 사용하지 않으므로 I/O장치의 주소와 연산지정자(읽기/쓰기), 주기억 장치 영역의 시작주소, 전송될 데이터 단어들의 수를 알 수 있도록 구성되어야 합니다. 또한 사이클 훔침이라해서 CPU가 주기억 장치를 엑세스 하지 않는 동안에 시스템의 버스를 사용하는 기능이 필요합니다.
주기억 장치의 데이터 블록을 디스크에 저장하는 DMA과정을 살펴보면,
1. CPU가 DMA 컨트롤러에게 명령을 보냅니다.
2. DMA 는 CPU로 BUS REQ 신호를 보냅니다.
3. CPU가 DMA에세 BUS GRANT 신호를 보냅니다.
4. DMA가 메모리에서 데이터를 읽어 디스크에 저장합니다.<--(요것이 핵심)
5. 전송할 데이터가 남아 있으면, 위의 과정 반복
6. 모든 데이터 전송이 끝나면, CPU에게 INTR신호를 보냄
하지만 이런 DMA제어기를 이용한 I/I데이터 전송의 문제는 지원에 한계가 있으며, 버퍼링을 위한 내부 기억장치가 따로 필요하는 단점이 있습니다.
4. 채널
일반적으로 DMA 제어에서 채널을 의미하는 것은 IOP입니다. IOP는 입출력 프로세서를 의미하는데, 이러한 IOP는 4가지로 구성됩니다.
1. I/O명령을 실행할 수 있는 프로세서
2. 데이터 블록의 임시 저장을 위한 로컬메모리
3. 시스템 버스에 대한 인터페이스 및 버스 마스터 회로
4. I/O버스 중재 회로,
혹은 OS의 디바이스 드라이브 루틴 프로그램들이 IOP에서 실행되기도 합니다.
*PS : 그리고, 32비트 cpu의 경우 DMA방식을 사용하는 이유는 일반적인 입출력 장치가 32비트수를 필요로 하지 않기 때문이기도 합니다. 또한 멀티라는 개념이 등장하면서 이러한 기술들이 활용되었기 때문이기도 합니다.
피드 구독하기:
글 (Atom)