블로그 이미지
No pain, no gain!
lepoussin

Tag

Notice

Recent Post

Recent Comment

Recent Trackback

Archive

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
  • total
  • today
  • yesterday
05-19 16:05

'2009/05/03'에 해당되는 글 7건

  1. 2009.05.03 임베디드 리눅스 - 인터럽트
  2. 2009.05.03 임베디드 리눅스 - 메모리 맵
2009. 5. 3. 01:42 Embedded System/Embedded Linux
모든 보드는 고유한 하드웨어 인터럽트 관리 방식을 갖는데, 이는 대부분 보드에 사용된 PIC(Programmable Interrupt Controller) 인터페이스 때문이다. 다음은 PIC의 기본 기능에 대한 설명이다.
  • 마이크로프로세서는 보통 적은 수의 인터럽트만을 처리할 수 있으므로, 보드에 인터럽트를 필요로 하는 많은 장치가 연결된 경우에는 이를 다 처리할 수 없게 된다. 이를 위해 인터럽트 컨트롤러가 사용되는데, 인터럽트 컨트롤러는 여러 개의 인터럽트를 하나의 인터럽트 라인으로 다중화(multiplexing)하여 프로세서의 인터럽트 처리 능력을 높여준다.
  • PIC는 인터럽트의 하드웨어적 우선순위를 제공한다. 이것은 프로세서가 자체적으로 하드웨어 인터럽트 우선순위를 지원하지 않는 경우에는 유용하게 사용된다. 프로세서가 높은 우선순위의 인터럽트를 처리하고 있는 동안 PIC는 프로세서에게 낮은 우선순위의 인터럽트를 보내지 않는다. 또한 두 개의 장치가 동시에 인터럽트를 발생시킨 경우 PIC는 우선 순위 레지스터를 살펴보고 어느 인터럽트가 더 높은 우선순위를 갖는지 판단하여 높은 우선순위의 인터럽트를 먼저 CPU에 전달한다.
  • 트리거(trigger) 방식을 변환한다.
    1. 에지-트리거 인터럽트
      • 신호가 어떤 상태에서 다른 상태로(보통은 하이(high)에서 로우(low)로) 넘어가는 순간 발생
      • 인터럽트 공유 못함
      • ISA 버스 구조에서 사용되는 오래된 방식
    2. 레벨-트리거 인터럽트
      • 프로세서가 처리할 때까지 인터럽트 라인을 하이(high)로 유지
      • 인터럽트 공유 가능하지만 부적절한 설계된 경우 무한 인터럽트 루프에 빠질 수 있음

※ 출처 : ITC "임베디드 리눅스 시스템 설계와 개발"
posted by lepoussin
2009. 5. 3. 00:34 Embedded System/Embedded Linux
임베디드 리눅스 시스템에서 볼 수 있는 세 가지 형태의 주소가 있다.
  1. 물리 주소(혹은 CPU가 변환하지 않는 주소) : 이 주소는 실제 메모리 버스상에서 사용되는 주소이다.
  2. 가상 주소(혹은 CPU가 변환하는 주소) : 이 주소는 CPU가 올바른 주소 영역으로 인식하는 영역이다. 예를 들면 커널에서 주로 사용되는 메모리 할당자인 kmalloc() 함수는 가상 주소를 반환한다. 이 가상 주소는 MMU에 의해 물리 주소로 변환된다.
  3. 버스 주소 : 이 주소는 CPU 외의 장치들에서 사용되는 메모리 주소이며, 버스의 종류에 따라 주소 영역이 달라질 수 있다.
시스템의 메모리 맵을 구성하기 위한 원칙은 다음과 같은 사항들로 나누어질 수 있다.
  1. 프로세서 메모리 맵 : 이것은 제일 먼저 생성해야하는 메모리 맵이다. 이것은 CPU가 (사용자 공간과 커널 공간 등의) 여러 주소 공간을 처리하는 방식과 다양한 메모리 영역 내에 보드상의 각 장치들의 메모리 관리 정책을 결정한다.
  2. 보드 메모리 맵 : 일단 프로세서 메모리 맵이 구성되면 다음으로 프로세서 메모리 영역 내에 보드상의 각 장치들에 대한 메모리 맵을 구성해야 한다. 이것은 하드웨어와 버스 컨트롤러에 대한 이해가 요구된다.
  3. 소프트웨어 메모리 맵 : 다음으로는 부트로더나 리눅스 커널과 같은 소프트웨어들에 대한 메모리 맵을 구성해야 한다. 리눅스 커널은 스스로 자신의 메모리 맵을 구성하고 코드나 힙과 같은 다양한 커널 섹션들이 위치할 장소를 결정한다.
    1. 리눅스 커널 레이아웃 - 링커 스크립트
    2. 부트 메모리 할당자
    3. 가상 주소 공간상에 메모리와 IO 매핑 생성
    4. 커널에 의한 메모리 할당 구역(zone) 생성

※ 출처 : ITC "임베디드 리눅스 시스템 설계와 개발"
posted by lepoussin