Skip to content

Commit 01ea238

Browse files
committed
add posts
1 parent b99ad9d commit 01ea238

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

_posts/2025-07-17-unpacking-[OS]VM-BBtoSegmentation.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ last_modified_at: 2025-07-15
2020
주소 공간은 실행 중인 프로그램이 가정하는 메모리의 모습이다. 여기에는 실행 프로그램의 모든 메모리 상태가 존재한다. 프로그램의 코드는 반드시 메모리에 존재해야 하고 따라서 주소 공간에 존재한다. 스택은 함수 호출 체인 상의 현재 위치, 지역 변수, 함수 인자와 반환 값 등을 저장하는데 사용된다. 힙(heap)은 동적으로 할당되는 메모리를 위해 사용된다. malloc() 또는 객체 지향 언어의 new를 통해 메모리를 동적으로 할당받는다.
2121

2222
프로그램 코드는 정적이기 때문에 저장하기 쉽다. 그래서 할당된 주소 공간의 0KB부터 시작하는 상단에 배치한다. 남은 공간은 프로그램 실행과 더불어 확장되거나 축소될 수 있는 두 종류의 주소 공간으로 나눈다. 상단에 존재하는 힙과 하단에 존재하는 스택이다. 힙은 아래쪽으로 확장하고, 스택은 위쪽으로 확장한다.
23+
2324
<img src="{{ "/assets/images/posts_img/unpacking/vm1-1.png" | relative_url }}" alt="주소 공간 예시" width="300">
25+
2426
실제 프로그램이 물리 주소 0부터 존재하는 것이 아니다. 이는 운영체제가 실행 중인 프로그램에게 제공하는 가상의 메모리 공간이다 (virtualizing memory).
2527

2628
### 메모리 가상화의 목표
@@ -127,6 +129,7 @@ physical address = virtual address + base
127129
두 번째 문제는 미사용 중인 물리 메모리 공간의 관리이다. 새로운 주소 공간이 생성되면 운영체제는 이 공간의 세그멘트를 위한 비어있는 물리 메모리 영역을 찾을 수 있어야 한다.
128130

129131
물리 메모리가 빠르게 작은 크기의 빈 공간들로 채워지는 것이 일반적인 문제이다. 이렇게 해서 생기는 작은 빈 공간들은 새로 생겨나는 세그멘트에 할당하기도 힘들고, 기존 세그멘트를 확장하는 데도 도움이 되지 않는다. 이를 외부 단편화 (external fragmentation) 이라 부른다.
132+
130133
<img src="{{ "/assets/images/posts_img/unpacking/vm1-6.png" | relative_url }}" alt="외부 단편화 예시" width="400">
131134

132135

0 commit comments

Comments
 (0)