일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C
- Unity
- 연결리스트
- anonymous page
- TiL
- 다익스트라
- 전쟁-전투
- KRAFTON JUNGLE
- 크래프톤 정글 4기
- BFS
- 백준
- 크래프톤 정글
- 파이썬
- 유니티
- kraftonjungle
- 알고리즘
- pintos
- 오블완
- 네트워크
- 크래프톤정글4기
- c#
- 알고리즘수업-너비우선탐색2
- 크래프톤정글
- 추상클래스와인터페이스
- 이벤트 함수 실행 순서
- 티스토리챌린지
- project3
- User Stack
- 핀토스
- 4기
- Today
- Total
말감로그
Anonymous page 본문
Anonymous page란 ?
익명 페이지는 파일로부터 매핑되지 않은 , 커널로부터 프로세스에게 할당된 일반적인 메모리 페이지이다.
즉, 익명 페이지는 힙을 거치지 않고 할당받은 메모리 공간이다.
커널의 메모리 할당 방법
1. 페이지 할당 : 가상 메모리를 페이지단위로 메모리를 할당하여 프로세스에게 제공한다.
2. 페이지 프레임 할당 : 물리 메모리는 페이지 프레임이라고 불리는 물리적인 페이지들로 나뉘는데, 커널은 이러한 페이지 프레임을 관리하고, 필요할 때 페이지 프레임을 할당하여 프로세스에게 제공한다.
3. 메모리 풀 할당 : 고정된 크기의 메모리 블록을 미리 할당하여 사용 가능한 상태로 유지하는 방법이다. 커널은 메모리 풀을 사용하여 일정한 크기의 메모리 블록을 할당하고 관리한다.
"프로세스에게 할당되었다"는 뜻은 해당 페이지가 프로세스의 가상 메모리 공간에 할당되었고, 해당 프로세스에서 메모리를 사용할 수 있다는 것을 의미한다. 이 페이지는 파일과는 연관되지 않으며, 단지 메모리의 일부를 프로세스에게 할당하기 위해 사용된다는 의미이다.
힙도 익명 페이지이다. malloc, new 같은 메모리 할당자는 익명 페이지에서 일부 메모리를 잘라 할당 받는 것이다.
힙은 프로그램이 동적으로 메모리를 할당하고 해제하는 데 사용되는 메모리 공간이다. 이 메모리 공간은 malloc(), calloc(), realloc() 등의 함수를 사용하여 할당된다. 힙에 할당되는 메모리는 프로그래머가 명시적으로 관리하며, 동적으로 할당되고 해제된다.
반면에, 익명 페이지는 가상 메모리 관리에서 사용되는 용어이다. 익명 페이지는 파일과 연관되지 않는 메모리 페이지를 나타낸다. 따라서 익명 페이지는 파일에서 읽거나 파일에 쓰여지는 것과는 무관하게 메모리에만 존재한다.
"파일과 연관되었다"는 말은 메모리 페이지가 디스크에 저장되었다는 것(파일의 내용을 저장하고 있다)을 의미한다. 이는 주로 파일의 내용을 메모리에 로드하거나 메모리의 내용을 파일에 저장하는 작업과 관련이 있다.
일반적으로 파일과 연관된 메모리 페이지는 디스크에 있는 파일의 내용을 메모리에 로드하기 위해 사용된다. 이는 파일을 읽는 작업을 수행할 때 발생한다. 예를 들어, 파일을 열고 파일의 내용을 읽어오면, 운영 체제는 파일의 내용을 메모리에 적재하여 프로세스에게 전달한다. 이때 파일의 내용이 메모리 페이지에 저장되며, 이 페이지는 파일과 연관되었다고 한다.
파일과 연관되지 않은 메모리 페이지(익명 페이지)는 파일과 관련이 없으며, 단지 메모리의 일부를 프로세스에 할당하는 데 사용된다. 따라서 익명 페이지는 디스크에 저장되지 않으며, 주로 프로세스가 실행되는 동안 사용되는 데이터나 프로그램 코드 등을 저장하는 데 사용된다.
커널로부터 직접 메모리 영역을 할당받은 메모리 페이지로, heap을 거치지 않고 할당받은 메모리 공간이다. 이런 관점에서 힙 또한 anonymous page에 속한다고 볼 수 있다.
🤔stack을 사용할 때도 anonyous page를 할당 받아서 사용하는 것인가?
스택의 메모리 할당은 일반적으로 프로세스의 가상 메모리 공간에서 이루어지며, 보통 힙 영역과는 별도로 관리된다. 따라서 스택의 메모리 할당과 관리는 일반적으로 익명 페이지를 직접 할당받아 사용하는 것과는 다르다.
그러나 몇 가지 예외적인 상황에서 스택을 익명 페이지로 할당받아 사용하는 경우가 있다. 예를 들어 특정 운영 체제나 프로그래밍 환경에서 스택의 동적 할당이 필요한 경우가 있을 수 있는데 이 경우 운영체제의 시스템 콜이나 특정 라이브러리 함수를 사용하여 익명 페이지를 할당받고 이를 스택으로 사용할 수 있다.
👉🏻 스택의 동적 할당이 필요한 경우
- 스택 크기의 동적 조정 : 재귀 함수 호출이 깊게 중첩되는 경우 스택의 크기가 커지는데 , 이때 동적으로 스택의 크기를 조정하여 스택 오버플로우를 방지할 수 있다.
- 스레드 스택의 개별적인 관리 : 멀티스레드 환경에서는 각 스레드마다 별도의 스택을 가지게 되는데 때때로 특정 스레드에 대해 스택의 크기를 늘리거나 줄이는 것이 필요할 수 있다. 이 경우 스레드의 스택을 익명 페이지로 할당받아 동적으로 관리할 수 있다.
하지만 이러한 방식은 일반적으로 흔한 방법은 아니며, 보통은 스택의 메모리 할당은 프로세스의 가상 메모리 공간에서 고정된 크기의 스택 영역을 할당하여 사용하는 것이 일반적이다.
익명페이지는 파일에 매핑되어 있지 않기 때문에 0으로 초기화된 값을 담고 있다. (demand zero로 인해 0으로 초기화된 값을 담고 있지 않을까싶다)
malloc() 역시 anonymous page ->heap ->malloc 식으로 anonymous page의 일부를 할당받는 것이다.
익명 페이지가 사용되는 경우
1. 동적 메모리 할당 : 프로그램이 실행 중에 동적으로 메모리를 할당해야 할 때 사용된다. malloc() 함수를 사용하여 프로그램이 필요로 하는 만큼의 메모리를 동적으로 할당할 수 있다.
2. 스택이 아닌 메모리 할당 : 프로그램이 스택 영역 이외의 메모리 공간에서 메모리를 할당해야 할 때 사용된다. 스택은 함수 호출과 지역 변수와 관련하여 사용되는 메모리 공간이므로, 스택 이외의 메모리 공간이 필요한 경우에는 주로 익명 페이지가 사용된다.
3. 공유 메모리 : 익명 페이지는 여러 프로세스 간에 메모리를 공유하는 데 사용될 수 있다. 이를 통해 프로세스 간에 데이터를 공유하거나 통신할 수 있다.
'이론 > 운영체제' 카테고리의 다른 글
Page Replacement Policy (페이지 교체 정책) (0) | 2024.03.25 |
---|---|
Lazy loading (0) | 2024.03.23 |
User Stack(사용자 스택) (0) | 2024.03.11 |
32 bit OS vs 64 bit OS (0) | 2024.03.11 |
프로세스와 스레드/세마포어와 뮤텍스/CPU 스케줄링 알고리즘/경쟁조건(Race condition)/데드락/문맥교환 (2) | 2024.03.05 |