[06-2]
이번글은 메모리의 논리주소와 물리주소에 대한글입니다.
먼저 메모리란 무엇인지에 대해서 알아보도록 하겠습니다!
주기억 장치의 종류로 크게 RAM, ROM가 있습니다. 이중에서도 "메모리"라는 용어는 보통 RAM을 가르키는 단어입니다.
그래서 RAM(메모리)에 대해서 살펴보도록 하겠습니다!!ㅎㅎ
참고로 ROM에 대한 부분은
https://information-factory.tistory.com/270
위의 블로그를 참고해주시면 되겠습니다.
(간단하게 정리하면 ROM은 메인보드에 이미 만들어져서 딸려 나오는 "비휘발성" 부품입니다. BIOS가 ROM에 들어간다고 보시면 되겠습니다)
메모리는 "휘발성 저장 장치"입니다. 그리고 메모리의 종류는 DRAM, SRAM, SDRAM, DDR SDRAM이 있습니다.
이번글은 메모리의 종류를 설명하는 글은 아니기에 SDRAM, DDR SDRAM만 간단하게 살펴보고 물리주소와 논리주소에 대해서 설명드리도록 하겟습니다.
SDRAM은 CPU의 클럭 신호와 동기화 된 조금더 발전된 DRAM입니다.
DDR SDRAM은 요즘 가장 흔히 쓰는 RAM입니다.(RAM을 살 때 보통 거의다 DDR SDRAM입니다)
DDR SDRAM은 "대역폭"을 넓혀 속도를 빠르게 만든 SDRAM입니다.
대역폭(data rate)란? '데이터'를 주고받는 길의 너비를 의미합니다. 1차선보다는 4차선이 회전력이 좋겠지요 ㅎㅎ
요즘은 DDR2, DDR3, DDR4, DDR5 이런식으로 대역폭이 더 늘어나고 성능도 뛰어난 RAM이 생산되고있습니다.
DDR SDRAM의 성능차이는 아래의 글을 참고해주시면 되겠습니다.
https://www.crucial.kr/articles/about-memory/difference-among-ddr2-ddr3-ddr4-and-ddr5-memory
그러면 간단하게 RAM의 종류에 대해 알아보았으므로 논리주소와 물리주소를 설명드리도록 하겠습니다.
저희가 더블클릭으로 프로그램을 실행하면 OS가 메모리의 "사용자 영역"에" "프로세스 생성"을 통해 더블클릭한 프로그램을 실행할 수 있도록 해줍니다.
(프로세스 생성은 https://cjbworld.tistory.com/26 이곳을 참고바랍니다)
그런데 메모리에 저장된 정보는 시시각각 정보들이 변합니다. 실행하는 프로그램이 적재되고 실행이 끝난 프로그램은 삭제되고... 그리고 같은 프로그램을 여러개를 실행하더라도 적재되는 주소는 달라집니다.
그래서 CPU는 모든 프로그램들의 메모리 주소를 기억하지 못합니다.
그러면 어떻게 기억을 해서 실행하는 것일까요? 바로 이것을 해결해주는 개념이 "논리 주소"와 "물리 주소"의 개념입니다.
물리주소는 메모리가 사용하는 주소이며, 논리주소는 CPU와 실행중인 프로그램이 사용하는 주소입니다.
물리주소는 말 그대로 실제로 저장된 하드웨어 상의 주소를 의미하고, 논리 주소는 실행중인 프로그램들에게 각각 부여된 0번지 부터 시작되는 주소를 의미합니다.
그러면 CPU는 어쨋뜬 논리주소를 가지고 물리주소에 접근해서 실제로 데이터를 읽고, 쓰고 저장하는 등등의 작업을 수행해야하는데 어떻게 이것이 가능할까요?
바로 CPU와 주소버스 사이에 위치한 "MMU(Memory Management Unit) 메모리 관리 장치"라는 하드웨어가 논리주소와 물리주소간의 "변환"을 도와줍니다. (MMU는 CPU내부에 위치해 있습니다.)
MMU는 CPU가 발생시킨 논리 주소에 "베이스 레지스터"값을 더하여 논리 주소를 물리 주소로 변환합니다.
예를들어 현재 베이스 레지스터에 15000이 저장되어 있고 CPU가 발생시킨 논리 주소가 100번지라면은
15000 + 100을 더하여 물리주소로 변환됩니다. 이런식으로 실제 물리 주소에 접근이 가능합니다.
베이스 레지스터는 프로그램의 가장 작은 물리주소를 저장합니다. 즉 프로그램의 시작 주소를 저장합니다.
그리고 논리주소는 프로그램의 시작점으로 부터 떨어진 거리를 의미합니다.
그럼 만약 위의 그림에서 프로그램 A의 시작주소가 15000이고 끝 주소가 15200이고, CPU가 발생시킨 논리 주소가 300인경우 어떻게 될까요? 베이스 레지스터 값 + 논리 주소값 => 15300으로 프로그램B의 주소를 침범하겠죠?
그래서 프로그램의 논리 주소 영역을 벗어나기 때문에 OS는 실행중인 프로그램이 다른 프로그램에게 영향을 주지 않도록 보호하는 방법을 마련해야합니다. 이 방법을 수행해주는 녀석이 "한계 레지스터(Limit Register)"가 담당합니다.
베이스 레지스터는 실행중인 프로그램의 시작주소를 저장하고 한계 레지스터는 논리 주소의 최대 크기를 저장합니다.
즉, 프로그램의 물리 주소 범위는 베이스 레지스터 값 이상이며 베이스 레지스터 값 + 한계 레지스터값 미만 입니다.
CPU는 메모리에 접근하기 전에 접근하고자 하는 논리 주소가 한계레지스터 값보다 작은지를 항상 검사합니다.
그리고 한계레지스터 값보다 높은 논리 주소에 접근하고자 한다면 인터럽트를 발생시켜 실행을 중단합니다.
정리하면
시시각각 변하는 메모리의 정보를 CPU가 일일히 기억하지 못하기 때문에 논리주소, 물리주소 PCB를 사용해서
논리주소에서 물리주소로 접근이 가능하고 이때 베이스 레지스터 값과 한계레지스터 값을 MMU가 계산해주어서 범위를 확인하고 작업을 수행한다. 정도로 보면되겠습니다.
감사합니다 :)
'CS' 카테고리의 다른 글
[CS] 가상 메모리와 페이징 (0) | 2023.08.15 |
---|---|
[CS] 스와핑(Swapping) (0) | 2023.08.09 |
[CS] Context Switching(문맥 교환) (0) | 2023.08.05 |
[CS] Mutex Lock과 Semaphore (0) | 2023.08.02 |
[CS] ALU, Control Unit, 레지스터 주소 지정방식 (0) | 2023.07.29 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!