일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 정보처리기사실기
- 연습문제
- 순환신경망
- 자바 실습
- JDBC
- c언어
- JSP
- 자바스크립트
- 컴퓨터구조
- 자바스크립트심화
- SQL
- 딥러닝
- 데이터베이스
- JSP/Servlet
- 중학수학
- 중학1-1
- 혼공머신
- 데이터분석
- 정보처리기사필기
- rnn
- 파이썬
- 개발일기
- 머신러닝
- 오블완
- 자바
- 컴퓨터비전
- html/css
- CSS
- 디버깅
- 상속
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
메모리와 캐시 메모리 2 - 메모리의 주소 공간 본문
주소에는 물리 주소와 논리 주소가 있다. 이번 절에서는 이 두 주소의 개념과 차이, 두 주소 간의 변환 방법을 학습해보겠다.
지금까지 '메모리에 저장된 정보의 위치는 주소로 나타낼 수 있다' 정도로 설명했지만, 사실 주소에는 두 종류가 있다. 물리 주소와 논리 주소이다. 물리 주소는 메모리 하드웨어가 사용하는 주소이고, 논리 주소는 CPU와 실행 중인 프로그램이 사용하는 주소이다.
물리 주소와 논리 주소
CPU와 실행 중인 프로그램이 이해하는 주소는 무엇일까?
예를 들어 현재 메모리에 메모장, 게임, 인터넷 브라우저 프로그램이 적재되어 있다고 가정해 보겠다. 메모장, 게임, 인터넷 브라우저 프로그램은 현재 다른 프로그램들이 메모리 몇 번지에 저장되어 있는지, 다른 프로그램의 물리 주소를 굳이 알 필요가 없다. 새로운 프로그램이 언제든 적재될 수 있고, 실행되지 않는 프 로그램은 언제든 메모리에서 사라질 수 있기 때문이다.
이들은 모두 물리 주소가 아닌 0부터 시작하는 자신만을 위한 주소인 논리 주소를 갖고 있다. 프로그램마다 논리 주소가 얼마든지 있을 수 있다. 그리고 CPU는 이 논리 주소를 받아들이고, 해석하고, 연산한다.
CPU가 이해하는 주소가 논리 주소라고는 해도 CPU가 메모리와 상호작용하려면 논리 주소와 물리 주소 간의 변환이 이루어져야 한다.
논리 주소와 물리 주소 간의 변환은 CPU와 주소 버스 사이에 위치한 메모리 관리 장치라는 하드웨어에 의해 수행된다.
예를 들어 현재 베이스 레지스터에 15000이 저장되어 있고 CPU가 발생시킨 논리 주소가 100번지라면 이 논리 주소는 아래 그림처럼 물리 주소 15100번지(100+15000)로 변환된다. 물리 주소 15000번지로부터 적재된 프로그램 A의 논리 주소 100번지에는 이렇게 접근이 가능하다.
만약 베이스 레지스터에 45000이 저장되어 있고 CPU가 발생시킨 논리 주소가 100번지라면 이 논리 주소는 물리 주소 45100(100+45000)번지로 변환된다.
메모리 보호 기법
메모장 프로그램의 물리 주소가 1000번지로부터 1999번지, 인터넷 브라우저의 프로그램의 물리 주소가 2000번지부터 2999번지, 게임 프로그램의 물리 주소가 3000번지부터 3999번지라고 가정해보겠다. 만약 메모장 프로그램 명령어 중 '(논리 주소) 1500번지에 숫자 100을 저장하라'와 같은 명령어가 있다면 숫자 100은 어떤 물리 주소에 저장될까?
위와 같은 명령어들은 실행되어서는 안 된다. 프로그램의 논리 주소 영역을 벗어났기 때문이다. 위 명령어들이 실행된다면 애꿏은 인터넷 브라우저 프로그램에 10을 저장하고, 인터넷 브라우저 프로그램 명령어는 자신과는 전혀 관련 없는 게임 프로그램 정보를 삭제한다.
이렇게 다른 프로그램의 영역을 침범할 수 있는 명령어는 위험하기 때문에 논리 주소 범위를 벗어나는 명령어 실행을 방지하고 실행 중인 프로그램이 다른 프로그램에 영향을 받지 않도록 보호할 방법이 필요하다.
한계 레지스터보다 높은 주소 값에 접근하는 것은 곧 프로그램의 범위에 벗어난 메모리 공간에 접근하는 것과 같기 때문이다.
만약 CPU가 한계 레지스터보다 높은 논리 주소에 접근하려고 하면 인터럽트(트랩)을 발생시켜 실행을 중단해야 한다.
단원 마무리하기
1번은 4번이 아니라 3번이다. CPU가 이해하는 주소는 물리 주소가 아니라 논리 주소이다. 이 부분이 헤깔려서 두 문제나 틀리고 말았다. CPU는 이 논리 주수를 받아들이고 해석하고 연산한다. 프로그램이 실행될 때마다 다른 주소에 적재될 수 있다. 매 실행마다 동일한 주소에 적재되는 것은 아니다.
2번에서 명령어 속 주소는 논리 주소가 맞다. 물리 주소는 정보가 실제로 저장된 하드웨어상의 주소를 의미한다. 논리 주소는 실행 중인 프로그램 각각에게 부여된 0번지부터 시작되는 주소를 말한다. 그러니까 답은 3번이다.
물리 주소와 논리 주소의 개념을 잘 몰라서 두 문제를 모두 틀렸다. 이제 확실히 정리가 되었다.
학습을 마치고
틀린 문제를 통해 내가 어떤 개념이 정립되지 않았는지 확인해볼 수 있어서 좋았다. 이제 모든 단원을 1시간만에 끝마치고 있다. 처음 공부할 때는 2시간 반도 넘게 걸렸는데 말이다.
다음 포스트에서 캐시 메모리에 대해서 학습해보려고 한다.
'알고리즘 및 자료 관리 > 컴퓨터 구조 & 운영체제' 카테고리의 다른 글
보조기억장치 1 - 다양한 보조기억장치 1 : 하드 디스크 (0) | 2024.10.16 |
---|---|
메모리와 캐시 메모리 3 - 캐시 메모리 (1) | 2024.10.16 |
메모리와 캐시 메모리 1 - RAM의 특징과 종류 (0) | 2024.10.16 |
CPU 성능 향상 기법 3 - CISC와 RISC (1) | 2024.10.15 |
CPU 성능 향상 기법 2 - 명령어 병렬 처리 기법 (1) | 2024.10.15 |