주소 공간과 가상 메모리
주소 공간 (가상 주소 공간, VAS, Virtual Address Space)
의미
- 각 프로세스 당 주어지는 논리적인 공간
- OS가 프로세스를 시작할 때 할당해주는 가상 메모리 공간
- 프로세스에서 사용 가능한 주소의 범위
- 프로세스가 참조하는 주소
- OS가 제공하는 가짜 메모리
- 크기는 물리 메모리(RAM)의 크기와는 독립적
- 레지스터 크기에 종속적
- 운영체제는 프로세스에게 연속된 가상 주소 공간을 제공하고, 이를 필요한 크기의 물리 메모리 페이지로 매핑
- 메모리 공간의 낭비를 최소화
제공 메모리
- 32bit 시스템
- 보통 4GB 크기의 가상 메모리 영역을 할당
- 보통 하위 2GB를 유저 공간에, 상위 2GB는 시스템 공간에 사용
- 하지만 사용자에 의해 유저 공간을 3GB로 늘릴 수 있음(/set increaseuserva)
- VAS 범위 : 0x00000000 ~ 0x7FFFFFFF
- 64bit 시스템
- 이론적으로는 16EB의 가상 메모리 영역을 할당 받을 수 있지만 너무 크고 비효율적이여서 128TB 정도로 제한함
- VAS 범위 : 0x000’00000000 ~ 0x7FFF’FFFFFFF
구조
- 사용자 영역
- 우리가 보통 사용하는 일반 응용 프로그램들이 사용하는 공간
- 커널 영역
- 단일 공간
- kernel-mode를 사용하는 모든 프로세스에서 공유됨
- 커널 영역은 공유되면서 시스템 운영에 필수적이기 때문에 주로 페이지 파일보다는 RAM에 존재
- code 영역 :
- 프로그램이 실행될 수 있도록 CPU가 해석 가능한 기계어 코드가 저장되어 있는 공간
- 프로그램이 수정되면 안 되므로 ReadOnly 상태로 저장
- 기계어 (코드를 컴파일하여 기계어로 만들고 디스어셈블을 하여 어셈블리어로 바꾸어 - code 영역에 넣음(instruction))
- data 영역 :
- 전역변수, static 변수의 할당의 위해 존재하는 공간
- 어떤 프로그램에 전역/static 변수를 참조하는 코드가 존재한다면, 이 프로그램은 컴파일 된 후에 data 영역을 참조
- 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸
- 초기화 되지 않은 변수가 존재한다면 BSS 영역에 저장
- heap 영역 :
- 프로그래머의 동적 할당을 위해 존재하는 공간
- 런타임에 크기가 결정되는 영역
- 사용자에 의해 공간이 동적으로 할당 및 해제
- 주로 참조형 데이터 (ex. 클래스) 등의 데이터가 할당
- 메모리의 낮은 주소에서 높은 주소의 방향으로 할당
- stack 영역 :
- 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 공간
- Stack 영역의 값은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸
물리 주소
- 실제 메모리의 주소
- 하드웨어에서 직접 접근 가능한 주소
- 시스템 전체적으로 공유되는 주소
- 여러 프로세스가 공유 메모리 영역을 사용할 때 사용
- 프로세스가 물리 주소로 접근하려면, 물리 주소를 가르키고 있는 가상 주소를 물리 주소로 변환해야 함
가상 메모리
의미
- 가상 메모리(Virtual Memory)는 운영체제에서 실제 물리 메모리(RAM)보다 큰 주소 공간을 프로세스에 제공하기 위해 사용되는 기술
- 프로세스를 실행할 때 실행에 필요한 일부만 메모리에 로드하고 나머지는 디스크에 두는 것
- 사용자에게 논리적 메모리와 물리적 메모리를 분리하여 인식하도록 함
- 이러한 분리는 적은 양의 물리적 메모리만 사용 가능할 때에도 프로그래머에게 대용량의 가상 메모리를 제공할 수 있음
- 프로그래머들은 개발 중 사용 가능한 물리적 메모리의 양을 더 이상 고려하지 않아도 되기 때문에 개발을 더 쉽게 진행할 수 있게 됨
- CPU는 TLB, MMU 를 사용하여 가상 메모리 주소에 접근
- Paging 또는 Segmentation 을 사용
특징
- 메인 메모리를 하드 디스크의 캐시로 처리하여 더 넓은 메모리 공간을 제공하여 임시 데이터를 하드 디스크 드라이브에 저장하고 필요에 따라 기본 메모리로 가져올 수도 있음
- 메모리 크기의 제약으로부터 자유로워졌고 사용자 프로그램이 실행에 필요한 최소 크기의 메모리만 올라가져 있기 때문에 더 많은 프로그램을 동시 수행 가능
- 추가 권한 비트를 사용하여 각 프로세스에 메모리에 대한 제한된 액세스 권한을 부여하여 메모리를 보호
- OS는 권한 비트를 확인하여 한 프로세스가 다른 프로세스의 메모리 공간을 손상시키지 않도록 할 수 있음
요구 페이징 (Demand Paging)
- 필요한 부분만 요청이 있을 때 물리적 메모리에 페이지 단위로 적재하는 방법
- 특정 페이지에 대해 CPU 요청이 들어오면 해당 page를 메모리에 적재
'공부 > 운영체제' 카테고리의 다른 글
[운영체제] PCB와 Context Switching (0) | 2024.02.24 |
---|---|
[운영체제] 시스템 콜(System Call) (0) | 2024.02.24 |
[운영체제] 인터럽트(Interrupt) (0) | 2024.02.24 |
[운영체제] CPU 스케줄링 알고리즘 (0) | 2024.02.24 |
[운영체제] 프로세스와 스레드 (0) | 2024.02.20 |