파이썬을 배우면서 알게된 메모리 맵과 PVM, 그 내용들을 정리해보고자 한다.

1) 메모리 맵 (Memory Map)
메모리 맵은 프로그램이 실행될 때 메모리가 어떻게 분배되고 사용되는지를 나타낸다. 주요 메모리 영역은 다음과 같다
- cs(code segment) 코드 영역: 프로그램의 소스 코드가 저장되는 영역으로, 실행 가능한 명령어 집합이 포함
- ds(data segment) 데이터 영역: 전역 변수와 정적 변수가 저장되는 영역으로, 프로그램 실행이 끝날 때까지 유지
- static 정적 영역: 클래스, 함수, 구조체, 유니온, 그리고 static으로 선언된 자료형이 저장
- heap 동적 할당 영역: 동적으로 메모리가 할당되는 영역으로 프로그램 실행 시 다른 프로세스가 실행되지 않는 공간을 할당받고 실행이 끝나면 소멸
- stack 고정 영역: 함수 호출과 관련된 임시 데이터가 저장되는 곳으로 함수의 매개변수와 지역 변수가 포함
2) PVM (Python Virtual Machine)
파이썬 가상 머신(PVM)은 파이썬 코드를 실행하는 데 사용되는 환경입니다. PVM에서도 메모리 맵을 유사하게 사용할 수 있다
- cs(code segment) 코드 영역: 소스 코드가 바이트 코드로 컴파일되어 로드되는 곳
- ds(data segment) 데이터 영역: 모듈에 선언된 변수가 저장
- static 정적 영역: 클래스와 함수 등에서 static으로 선언된 자료형은 힙(heap)에서 함께 관리
- heap 동적 할당 영역: 파이썬의 자료형 객체가 할당되는 곳
- stack 고정 영역: 함수 호출 시 실행 컨텍스트가 저장되는 곳
PVM 실행 과정
예시 코드
# example.py
def greet(name):
message = f"Hello, {name}!"
return message
if __name__ == "__main__":
name = "World"
print(greet(name))
- Python 인터프리터 실행:
- 터미널에서
python example.py를 입력한다.
- 터미널에서
- PVM 초기화:
- PVM이 초기화되고 내장 모듈들이 임포트되며 시스템 환경 설정이 이루어진다.
- 바이트코드 컴파일:
example.py파일의 소스 코드가 바이트 코드로 컴파일된다.- 예를 들어,
greet함수와if __name__ == "__main__"블록이 컴파일된다.
- 바이트코드 실행:
- PVM이 컴파일된 바이트코드를 실행한다.
name = "World"가 실행되어name변수에"World"가 할당된다.greet(name)함수가 호출된다.- 이때,
greet함수의 실행 컨텍스트가 스택에 저장된다.
- 이때,
greet함수 내부에서message변수에"Hello, World!"가 할당되고,message가 반환된다.print(greet(name))가 실행되어"Hello, World!"가 출력된다.
요약
- PVM 초기화: 내장 모듈 임포트 및 시스템 환경 설정
- 바이트코드 컴파일: Python 소스 코드가 바이트 코드로 변환
- 바이트코드 실행: 컴파일된 바이트 코드를 실행하여 프로그램이 동작
'IT > 코딩 도전하기' 카테고리의 다른 글
| [CLI] CLI와 Git 사용법 정리 (0) | 2024.02.17 |
|---|---|
| [AWS]cdm에서 aws ec2 ssh 접속하는 법 (0) | 2024.02.11 |
| [파이썬] Import 모듈 불러오는 법 (0) | 2024.02.06 |
| [데이터] 피클, 언피클, 직렬화, 역직렬화: 개념과 차이점 (0) | 2024.02.04 |
| [엔디언] 엔디언(Endianness)이란? (0) | 2024.02.03 |