운영체제

8. 주소 공간과 가상 메모리(Address Space, Virtual Memory)

ggomjiu 2025. 1. 23. 04:14

OS in The Early System

- 초기 컴퓨터의 메모리 구성은 추상화가 존재하지 않음

- 한 번에 하나의 Process가 전체 메모리를 사용함

- 하나의 프로그램을 실행할 때 OS와 하나의 Process만 사용했기 때문에 메모리를 단순하게 사용해도 문제가 되지 않았음

 

Multiprogramming and Time Sharing

- 최근 컴퓨터에서는 여러 개의 프로그램을 동시에 실행함 -> 초기 컴퓨터의 메모리 구성으로는 활용성(utilization)

과 효율성(efficiency)이 부족해서 더 이상 사용할 수 없음

- 해결 방안으로 Time Sharing 기법을 사용 -> 여러 개의 프로그램을 실행하도록 메모리 구성을 변경

- 하나의 메모리 공간에서 여러 개의 프로세스가 실행될 수 있도록 메모리 안에 프로세스가 사용할 수 있는 공간을 나눔

하나의 메모리 공간에서 여러 개의 프로세스가 전환이 되므로 활용성과 효율성이 증가

- But, 여러 개의 프로세스들이 한 번에 메모리에 접근 -> 기존에 실행 중인 프로세스에 접근할 수 있기 때문에 보안상 문제가 발생할 수 있음

 

가상 메모리(Virtual Memory)

32bit vs 64 bit
: CPU가 접근할 수 있는 메모리(RAM) 주소 범위
- 1bit는 0, 1 -> 2가지 경우를 표현
- 32bit -> 2^32가지를 표현할 수 있음
- 1GB -> 2^30가지 경우를 표현 -> 2^32 = 2^2 X 2^30 = 4GB
- 32bit CPU는 4GB 메모리에 접근 가능
- 64bit -> 2^64 = 2^32 X 2^32 = 16GB
- 64bit는 16GB 메모리에 접근 가능

: 프로세스를 실행할 때 실행에 필요한 일부만 메모리에 로드하고 나머지는 디스크에 두는 것

- 물리적 메모리 크기의 한계를 극복하기 위해 나온 기술

- 이를 통해, 프로세스 전체가 물리적 메모리에 있는 것처럼 수행 -> 물리적 메모리가 훨씬 많이 있는 거처럼 보이게 함

- 결과적으로 메모리에 적은 양의 주소 공간만 있으면 충분히 프로세스를 실행할 수 있음 & 더 많은 프로그램을 동시에 실행할 수 있게 됨

-  EXAMPLE)

  • OS가 실제 메모리를 추상화해서 Process A에게 주소 공간을 나눠줌
  • 이때, Process A는 추상화된 주소 공간(가상 주소 공간)에서는 0 ~ 64KB라는 주소를 가지고 있고 0KB에 접근하지만, 실제 메모리(Physical Memory)에서는 320 ~ 384KB라는 주소를 가지고 320KB에 접근함
  • 여기서 중요한 점은 OS가 Process A에게 특정 주소의 메모리에 Load되고 잠재적으로 매우 큰 주소 공간을 가지고 있다고 착각하게 만드는 것

 

주소 공간(Address Space)

: OS가 실제 메모리 공간(Physical Memory)를 추상화해서 만든 것

- 주소 공간에는 현재 실행 중인 프로그램, 즉 프로세스에 대한 모든 것이 들어있음

- 주소 공간 안에는 Program Code, Heap, Stack 등이 존재

  • Program Code : Data영역을 포함하며, static 변수, 전역 변수가 저장되는 공간
  • Heap : 동적으로 할당된 데이터가 저장되는 공간
  • Stack : 함수를 호출하여 위치를 추적할 수 있도록 return address 또는 values가 저장되는 공간, 지역 변수도 포함

- 현실적으로 하나의 프로세스가 전체의 메모리를 차지하지 않음

- 추상화는 OS가 메모리를 가상화(Virtualize)하기 위해 필요 -> OS가 실제 메모리를 추상화함으로써 여러 개의 프로그램을 동시에 실행할 수 있기 때문

- Virtual Address는 Logical Address라고 부르기도 함 -> CPU에 의해 만들어진 주소를 의미

Physical Address는 메모리 장치에 의해 만들어진 주소 & OS가 관리함

 

가상 메모리의 목표

1) 프로그래밍에서의 사용이 편리함

 

2) 투명성(Transparency)

- OS가 실행 중인 프로그램이 메모리가 가상화되는지 알지 못하도록 만들어야 함 -> 프로그램은 마치 자신에게 하나의 독립적인 실제 메모리가 있는 거처럼 작동해야 함

 

3) 효율성(Efficiency)

- OS는 시간과 공간의 면에서 메모리를 효율적으로 사용해야 함

- 성능에 부정적으로 영향을 미치지 않도록 시간을 정하고, 가상화를 위한 최소한의 공간을 발생시키도록 공간을 정해야 함

 

4) 보호(Protection) 

- OS는 프로세스들로부터 프로세스를 보호하고 OS 자신도 프로세스로부터 보호해야 함

 

 

 

 

 

 

 

 

 

Reference

https://rebro.kr/179

'운영체제' 카테고리의 다른 글

10. 세그멘테이션(Segmentation)  (0) 2025.01.23
9. 주소 변환(Address Translation)  (0) 2025.01.23
7. Context Switching(문맥 교환)  (0) 2025.01.23
6. 시스템 콜(System Call)  (0) 2025.01.23
추가적인 내용  (0) 2025.01.19