하버드 아키텍처: 두 판 사이의 차이

내용 삭제됨 내용 추가됨
잔글편집 요약 없음
5번째 줄:
이 말은 [[하바드 마크 I]](Harvard Mark I) 하는 릴레이 컴퓨터로부터 나온 것으로 이 머신은 명령을 [[천공 테이프]]에 메모리해 데이터를 [[릴레이]]의 ON/OFF 상태로 메모리했다. 이러한 초기의 머신에서는 메모리 영역이 지극히 작았기 때문에 [[CPU]] 내부에 모든 메모리 영역이 포함되어 있어 명령 메모리 영역을 데이터로서 취급할 수가 없었다(프로그래밍은 완전히 오프 라인의 작업이며, 프로그램의 내용을 컴퓨터 자신이 참조하거나 갱신하거나 하는 것은 있어 이득이 없었다.).
 
[[폰노이먼 아키텍쳐]]에서는 [[CPU]]는 메모리로부터 명령을 읽고, 메모리로부터 데이터를 읽고 쓰기도 한다. 명령과 데이터는 같은 신호 버스와 메모리를 사용하기 때문에 이러한 액세스하는 경우 동시에 발생할 수가 없다. 하버드 아키텍쳐의 컴퓨터에서는 명령을 메모리로부터 읽는 것으로 데이터를 메모리로부터 읽는 것은 동시에 할 수 있다. 하버드 아키텍쳐의 컴퓨터는 명령의 처리가처리를 완료하는 것과 동시에끝내자마자 다음의 명령을 읽어들일 수 있기 때문에 보다 고속화가 가능이라고빠른 속도를 낼 수 있다고 말할 수 있다. 그렇지만 이러한 처리 속도의속도를 향상을 위해서는높이려면 보다 많은 전기 회로를 필요로회로가 한다필요하다.
 
== 하버드 아키텍쳐의 부활 ==
최근에 CPU의 성능은 메모리의 속도와 비교해 크게 향상했다. 성능을 성능 향상을 위해서는높이려면 주 메모리의 액세스접근 횟수를 줄이는 노력이 필요하다. 명령을 처리할 때마다 주메모리에주 메모리에 액세스할접근할 필요가 있다고 한다면 성능 향상은 전망할 수 없다. 이른바 「메모리 속박 문제」이다.
 
메모리는 고속화할속도가 올라가면 있지만값이 가격이비싸질 상승이 예상된다있다. 이것을이를 해결하는 방법은 [[캐쉬캐시]]로 불리는 소규모의작은 규모의 고속의 메모리를 준비하는 것이다. [[CPU]]는 필요로 하는 메모리의 내용이 캐쉬에캐시에 존재하면 성능성능이 향상된다. 하지만 반대로 필요한 메모리의 내용이 캐쉬에캐시에 없으면, 메모리로부터 캐쉬에캐시에 내용을 가져오는 것이다. 이 캐쉬의 조정이 컴퓨터의 설계로 중요한 관점이 되고 있다.
 
최신의 고성능성능이 좋은 CPU 설계에서는 하버드와 폰노이먼 양쪽두 쪽 모두의 아키텍쳐를 도입하고 있다. 캐쉬캐시 메모리 장치는 보통 명령용과 데이터용으로 분할되고분리되어 있는 것이 일반적이다있다. 하버드 아키텍쳐는 CPU와 캐쉬의캐시의 관계에 활용되고 있다. 캐시에 캐쉬오류가 오류가가 발생하면일어나면 주 메모리로부터 데이터를 가져 오고, 명령 캐쉬나캐시나 데이터 캐쉬에캐시에 저장한다. 따라서, 폰노이먼 아키텍쳐는 CPU 외부에 적용된다.
 
하버드 아키텍쳐는 특수한 디지털 신로 처리 프로세스에서 자주 사용되고 있다쓰인다. 예를 들면이를테면, 아날로그 디바이스장치 회사의 [[Blackfin]] 프로세서는 하버드 아키텍쳐를 활용하고 있다.
 
또한 범용 마이크로 콘트롤러의 상당수는 하버드 아키텍쳐를아키텍쳐에 베이스로기반을 하고두고 있다. 마이크로칩 테크놀로지사의 PIC 마이크로 콘트롤러 등이 그 예이다. 이러한 프로세서는 프로그램과 데이터를 저장하는 작은 메모리를 내장하고 있는 것이 특징이다. 그 때문에 [[RISC]]와 하버드 아키텍쳐를 활용해 1 머신 사이클로 1 명령을 실행할 수 있게 되는 것이다.
 
== 명령/ 데이터 분리 캐쉬 문제 ==
범용 마이크로 프로세서로 캐쉬 메모리 장치를 명령 캐쉬와캐시와 데이터 캐쉬를캐시를 분리했을 경우에 보다 성능이 좋은 write back형의 캐쉬를 사용하면 문제가 발생한다. write back형에는 캐쉬에 있는 내용을 CPU로 고쳐 썼을 경우에 그것을 주메모리에 동시에 써 되돌리지 말고 그대로 보관 유지해 두는 방식이다. 한편, 주 메모리도 동시에 고쳐 쓰는 캐쉬를캐시를 write through형 캐쉬라고 말한다. write back형 캐쉬는 그 캐쉬 라인을 다른 캐쉬 라인으로 옮겨놓을 때 주메모리에주 메모리에 써 되돌리는지 CPU는 명시적으로 캐쉬캐시 플래시를 지시했을 때에 주 메모리에 전체를 써 되돌린다.
 
특정 용도가 아닌 컴퓨터에서는 [[컴파일러]]를 사용하고 실행 파일을 만든다. 이 때 실행 파일을 메모리 맵 파일로 하고 있으면, 명령열이명령 줄이 데이터 캐쉬에캐시에 남게 된다. 그러므로 때문에컴파일한 컴파일 바로 즉시실행하면 실행하려고명령 했을 경우,줄이 명령열이 주메모리에메모리에 써 되돌려지지 않은 경우에 실행이 실패할 가능성이 있다. 인터프리터와 컴파일러가 일체화하고 있는 일부의 고급 언어나 어떤 종류의 개발 환경을 제공하는 소프트웨어에서는 한층 더 현저하게 발생한다. 이러한 경우 컴파일 결과는 그 소프트웨어의 데이터 영역에 있고 있어 그 영역에 트리키인 수법으로 점프 하는점프하는 것으로 실행하려고 한다. 이 또한 명령열이명령 줄이 메모리에 써 되돌려지지 않기 때문에 실행이 실패하는 일이 있다.
 
이것은 일부분 하버드 아키텍쳐에 일어나는 문제며, 본질적으로는 [[폰노이먼 아키텍쳐]]이기 때문에 발생하는 문제이다.