🗃️ 이전 글
🧐 프로세스의 구조?
흔히 구글에 프로세스의 구조라고 치면 너~무나도 유명한 Stack, Heap, Data, Text 네 가지 층으로 구성된 자료들을 흔히 확인할 수 있다.
나도 프로그램이 실행되면 이렇게 Stack, Heap, Data, Text(Code) 뚝딱! 메모리에 할당되고 처리가 되는가보군? 정도로 넘어갔었는데 이번 기회에 조금 더 깊이 들어가 보고 싶었다.
공룡책(Operating System Concepts)에서 해당 그림을 찾아보니 있었다!
역시 내가 기존에 알던거랑 조금 달랐다. ☠️ 메모리에 있는 프로세스의 가상 주소라고 직역해 볼 수 있는데, 내가 영어를 잘하지는 못하지만 영어 그대로 받아들이는 게 좀 편한 느낌이다.
공룡책에서 설명해주는 각 섹션의 정의를 안보고 가면 섭하니 보도록 하자.
Text section — the executable code
Data section — global variables
Heap section — memory that is dynamically allocated during program run time
Stack section — temporary data storage when invoking functions (such as function parameters, return addresses, and local variables)
코드가 저장되는 text, 전역 변수와 정적 변수가 저장되는 data, 동적으로 할당된 메모리가 저장되는 heap, 일시적인 데이터가 저장되는 지역 변수, 매개변수, 함수 호출 정보가 저장되는 stack 영역으로 이루어 진다.
여기서 heap은 메모리로 표현되고, stack은 데이터로 표현되는데 프로그래머 관점에서 필요한 메모리를 할당하고 관리해야 하기 때문에 메모리로 표현되는 것 같고, stack은 단순히 일시적인 데이터가 쌓이고, 해제되기 때문에 데이터로 표현되는 것 같다.
그래! 많은 프로그램을 돌리기에는 메모리만으로는 부족할 수 있으니 가상메모리를 프로세스에 할당해 주는구나! 정도로 이해할 수 있었지만 Virtual address space라는 단어가 마음에 걸렸다. 왜 Virtual memory가 아니지?
🤔 가상의 주소 공간?
궁금증이 생겼다. 가상 메모리(Virtual memory)라고 하지 않고, 가상 주소 공간(Virtual address space)라고 하는 이유가 있을까? 둘이 차이가 있나?
당연하게도 공룡책에서 설명을 찾을 수 있었다.
Virtual memory involves the separation of logical memory as perceived by developers from physical memory. This separation allows an extremely large virtual memory to be provided for programmers when only a smaller physical memory is available (Figure 10.1). Virtual memory makes the task of programming much easier, because the programmer no longer needs to worry about the amount of physical memory available; she can concentrate instead on programming the problem that is to be solved.
The virtual address space of a process refers to the logical (orvirtual) view of how a process is stored in memory. Typically, this view is that a process begins at a certain logical address—say, address 0—and exists in contiguous memory, as shown in Figure 10.2. Recall from Chapter 9, though, that in fact physical memory is organized in page frames and that the physical page frames assigned to a process may not be contiguous. It is up to the memory-management unit (MMU) to map logical pages to physical page frames in memory.
- Operating System Concepts, Chapter 10, 390 page
위 글을 요약해보면 가상 메모리는 실제 메모리보다 큰 메모리를 구성하여 개발자들이 조금 더 여유로운 코딩을 할 수 있게 해주는 개념이다. (사실 이부분에서 단순히 개발자가 편하게 코딩을 할 수 있게끔 하는 것뿐만 아니라 개발자 견제를 위해(?) 가상 메모리 관리가 필요할 것 같다. 약간 법 같은 느낌으로...)
가상 주소 공간은 이러한 가상 메모리 조차 개발자들을 위해서 😇 각 프로세스에서는 연속된 공간처럼 보여준다는 것 같다. 실제 가상 주소 공간은 연속되어 있지만 실제 가상 메모리로 들어가 보면 메모리 관리하는 친구가 열심히 일을 해주고 있다.
갑자기 이상한 상상을 해봤는데, 이런 OS가 없었다면 각 프로세스별 빠른 메모리 차지를 위한 전쟁(?)이 일어날지도 모른다...
결국 위에처럼 0부터 가상 메모리 주소가 표시되지만 실제 메모리 주소는 0이 아닐 수 있다는 점이다!!! 그래서 Virtual memory와 Virtual address space는 엄연히 다른 개념으로 표시되고 있었다.
🧑🏻💻: 프로세스는 어떻게 구성되어 있나요? (이런 느낌의 질문?)
🐣: 프로세스는 운영시스템으로 부터 가상 주소 공간을 할당받습니다. 가상 주소 공간은 낮은 주소부터 text, data, heap, stack로 구성됩니다.
'→ Computer Science' 카테고리의 다른 글
[CS] 프로세스와 스레드 딥다이브 - 4. 스레드 (0) | 2025.01.18 |
---|---|
[CS] 프로세스와 스레드 딥다이브 - 3. 실행, Context switch?? (0) | 2025.01.18 |
[CS] 프로세스와 스레드 딥다이브 - 1. 딥다이브 전 기초지식 (0) | 2025.01.18 |
[RTMP] RTMP 프로토콜 개요 (7) | 2024.11.08 |
[CS] TCP/UDP 전송계층 (0) | 2024.11.07 |