본문 바로가기
나머지/IT개발.잡다한것.

레지스터파일, 메모리뱅크

by 무늬만학생 2012. 3. 6.
반응형

질문 
안녕하십니까?

교수님의 저서의 “메모리 구조”편을 보면..
(물론, 다른 책을 보더라도 마찬가지이겠지만 말입니다.)
“레지스터 파일”과 “메모리 뱅크”라는 용어가 나옵니다.
결론부터 말씀드리면, 이 용어의 의미를 모르겠습니다.
레지스터와 메모리의 개념,의미는 알겠는데, 
왜 “파일”과 “뱅크”라는 용어가 붙었는지요 ?
“레지스터”와 “레지스터 파일”은 어떻게 다른지요 ?
“메모리”와 “메모리 뱅크”는 어떻게 다른지요 ?

그럼... 좋은 밤 되십시요...!!!

답변

 저는 기회가 있을 때마다 공학이나 기술에서 용어가 중요함을 강조해왔습니다. 용어를 정확히 이해하지 못하면 그 다음에는 아무 것도 제대로 할 수 없습니다. 뿐만 아니라 다른 사람과 대화도 안됩니다. 같은 용어를 놓고 말하는 사람과 듣는 사람이 다른 뜻으로 생각한다면 대화가 될 수 없으며, 더구나 기술의 세계에서는 큰 일이 나지요.

   하지만, 무릇 기술 용어라는 것은 한두개도 아니고 시대적으로 계속 변하거나 새로 생겨서 이것들이 모두 사전이나 교과서에 실려 있지도 않을 뿐 아니라 실려 있다고 하더라도 그 의미가 정확하다고 보장되지 못합니다. 따라서, 아주 일반적이고 교과서적으로 정착된 용어가 아니라면 이를 일일이 사전적으로 찾아서 이해하기란 여간 어려운 일이 아닙니다.
   하물며, 보편적인 기술 용어도 아니고 특정한 회사에서 임의로 사용하는 용어라면 더욱 난해한 경우가 많지요. 질문하신 내용중에 메모리 뱅크란 말은 매우 보편적인 말이지만 레지스터 파일은 그에 비하면 좀 생소하다고 볼 수 있겠지요...

   이러하기 때문에 많은 경우 용어의 의미는 문맥 속에서 찾아내야 합니다. 눈치가 중요하다는 말입니다. 아니, 눈치는 물론 코치, 발치까지 동원해야 합니다. 이러한 예리한 감각과 많은 생각, 많은 경험이 추가되면 거의 대부분의 용어는 그냥 보면 알게 됩니다. 그런 것을 인생에서는 경륜이라 하고 기술의 세계에서는 경력이라고 하며, 그런 경력이 풍부한 사람을 고수라 할 수 있겠지요...
   질문하신 2가지 용어도 이러한 눈치를 발휘하면서 제 책을 읽으신다면 충분히 그 의미를 미루어 짐작하실 수 있습니다.

   어쨌거나, 그럼 먼저 "레지스터 파일"이라는 용어를 살펴 보십시다. 종래의 마이크로프로세서에서는 기껏해야 몇개 정도의 레지스터를 가지고 있었습니다. 이런 몇개의 레지스터는 그냥 레지스터일 뿐이지 이를 레지스터 파일이라고 부르지는 않습니다. 그러다가, 8051과 같이 마이크로콘트롤러들이 등장하면서 CPU 소자의 내부에 수십 바이트에서 수 킬로 바이트에 이르는 SRAM이 내장되었습니다. 이는 단지 데이터 메모리이지 레지스터는 아닙니다. 이렇게 설명을 하는데, 여기서 또 데이터 메모리와 레지스터는 뭐가 다르냐고 묻고 들어오면 답답해집니다. 데이터 메모리는 그냥 데이터를 저장하는 메모리일 뿐입니다. 각 메모리의 위치는 어드레스로 지정합니다. 하지만, 레지스터는 똑같이 SRAM이기는 하지만 일반적으로 번지가 아니라 이름을 가지지요. 그리고, 단순히 데이터를 저장하는 기능만 가지는 것이 아니라 처리 기능을 가집니다. 이를테면 데이터 메모리에서는 연산을 상상하기 어렵지만 레지스터에서는 연산이 가능하다는 것입니다.
   그런데, 80C196KC에서는 분명히 내부 RAM인데 이것이 레지스터의 역할을 한다는 것입니다. 무려 232 바이트의 내부 SRAM이 데이터 메모리는 물론 레지스터로 사용됩니다. 너무나도 그 수가 많아서 일일이 이름을 짓지 못하고 번지로 부르지요. 여기서는 덧셈, 뺄셈은 물론이고 곱셈과 나눗셈까지 합니다. 232바이트 전체가 누산기와 같죠. 대신에 80C196KC에는 종래와 같은 개념의 범용 레지스터는 없습니다. 단지, 프로그램 카운터 PC, 스택 포인터 SP, 상태 레지스터 PSW 정도만 있지요. 이처럼 8051과 80C196KC는 전혀 개념적으로 다릅니다. 그래서, 8051을 누산기 중심형 마이크로프로세서라고 하고, 80C196KC는 레지스터 중심형 마이크로프로세서라고 하지요. 어느 것이 더 좋으냐고요? 물어보나마나 레지스터 중심형이 훨씬 진보된 방식이지요. 성능이 훨씬 높습니다.
   이렇게 종래의 레지스터가 아니라 내부 RAM으로 된 많은 수의 레지스터, 즉 내부 데이터 메모리와 레지스터의 역할을 모두 수행하는 SRAM을 인텔에서는 종래의 레지스터와 구별하여 레지스터 파일이라고 불렀습니다. 이런 생각을 하면서 제 책을 다시 읽어보세요... 어때요? 시원하게 이해가 되지요...? 8051부터 마이크로프로세서를 제대로 공부해온 독자라면 제 책을 읽으면서 스스로 이런 것이 터특이 되어야 정상입니다. 저자는 독자들에게 그런 기대 섞인 상상을 하면서 책을 썼기 때문에 굳이 이런 문제에 대하여 구체적인 설명을 하지 않았습니다. 그런 시시콜콜한 것까지 일일이 설명하다보면 책이 되지도 않고요. 보시다시피 그런 설명을 생략했는데도 제 책은 1336페이지나 되지 않습니까...

   그러면 다음에는 "메모리 뱅크"라는 용어를 살펴 봅시다. 이는 기본적으로 메모리 영역을 블록으로 나눈 것을 지칭합니다. 하지만, 대부분의 경우 메모리 영역을 그냥 나눈 것을 임의로 뱅크라고 부르지는 않습니다. 동일한 번지가 여러 쌍 존재할 때 이 하나하나를 뱅크라고 부르지요. 예를 들어 8051의 경우를 보면 외부 메모리 영역이 0000H~FFFFH 번지에 64KB의 프로그램 메모리가 존재합니다. 그런데, 동일한 0000H~FFFFH 번지에 데이터 메모리도 존재할 수 있습니다. 이때 프로그램 메모리와 데이터 메모리는 각각 메모리 뱅크라고 부를 수 있습니다.
   다시 말하면 메모리 뱅크란 동일한 영역에 존재하는 메모리들의 블록입니다. 우리말로는 "벌"이라는 의미에 가깝다고 할 수 있죠. 한 벌, 두 벌, ... 하는. 이것들은 번지가 같기 때문에 이런 뱅크들을 구분해 주는 하드웨어 신호선이 필요합니다. 그렇지 않으면 동작이 중복되어 올바른 액세스가 불가능하겠지요. 8051의 경우 프로그램 메모리 뱅크를 액세스하게 하는 신호는 -PSEN이며, 데이터 메모리 뱅크를 액세스하게 하는 신호는 -RD 및 -WR 죠.
   이러한 메모리 뱅크 개념은 메모리 용량을 확장하는 기법으로도 흔히 사용됩니다. 예를 들면 원래 외부 메모리 용량은 64KB 밖에 안되는데 사용자가 이 64KB 내에 여러개의 뱅크를 만들어 놓는 것이지요. 그리고는 별도의 신호를 이용하여 필요할 때마다 이 뱅크들중에서 1개만 선택하여 주는 것입니다. 80C196KC의 경우에는 원래 외부에 프로그램과 데이터를 구분하지 않고 64KB만을 사용하라고 되어 있지만, CPU가 외부 메모리에서 명령어를 읽어올 때마다 INST 신호가 1로 출력되므로 프로그램 메모리와 데이터 메모리를 따로 사용할 수 있습니다. 이런 기법에 대하여는 제가 [초보자 특별 교실]에 기술 노트로 자세하게 정리하여 놓은 것이 있으니 읽어보시기 바랍니다.

   결론적으로 다시한번 강조합니다. 아주 교과서적인 용어가 아니라면 기술용어의 의미는 현재 보고 있는 책 안에서 찾아 이해하십시오. 기본적인 지식과 눈치, 코치를 동원하면 충분히 알 수 있게 되어 있습니다. 그렇게 알되 결코 설렁설렁 엉터리로 알아서는 안됩니다. 눈치로 때려잡아 알더라도 정확하게 알아야 합니다.
   하지만, 기본적이고 교과서적인 용어는 반드시 참고서적을 통하여 정확히 알아두어야 합니다. 예를 들어 마이크로프로세서 책을 보다가 "AND 게이트"가 무슨 말인지를 모른다면 반드시 디지털공학 책을 뒤져서 알고 가야 합니다. 또한 "오픈 콜렉터"가 무슨 말인지 모른다면 반드시 전자회로 책을 뒤져서 이해하고 가야 합니다.

   공부를 이렇게 하다보면 처음에는 어렵고 더딘 듯하지만, 공부하는 과정이 즐겁고 재미있으며 결국에는 이렇게 하는 것이 훨씬 더 빠른 방법이라는 것을 깨닫게 될 것입니다... 설렁설렁 넘어가면 처음갈 때는 빠르지만 같은 용어가 나올 따마다 막히고 주저하게 되며, 제대로 알고 넘어가면 처음 갈 때는 느리지만 같은 용어가 또 나오면 이제는 무사통과이기 때문입니다. 


출처 :  http://cpu.kongju.ac.kr/ezboard/ezboard.cgi?db=qa_80196_2000&action=remote&page=1&num=12&dbf=200302040001 

  http://cpu.kongju.ac.kr

반응형

댓글0