지난 프로젝트2에서는 사용자 가상 메모리는 다음과 같이 배치됐다.
USER_STACK +----------------------------------+
| user stack |
| | |
| | |
| V |
| grows downward |
| |
| |
| |
| |
| grows upward |
| ^ |
| | |
| | |
+----------------------------------+
| uninitialized data segment (BSS) |
+----------------------------------+
| initialized data segment |
+----------------------------------+
| code segment |
0x400000 +----------------------------------+
| |
| |
| |
| |
| |
0 +----------------------------------+
코드는 0x400000부터 시작하고, 스택은 USER_STACK부터 시작했다.
이는 모든 유저 프로그램에 해당했고, 각각의 유저 프로그램은 가상 메모리 덕분에 서로 간섭할 수 없었다.
가상 메모리가 일종의 사용자 프로그램에 대한 메모리의 사용자 정의(customizaeed viwe)된 뷰다.
유저 프로그램은 시스템에서 단독으로 실행되고 있다는 인상(impression)을 주지만 실제로는 가상 메모리가 물리적 메모리에 매핑된다.
우리가 진행하는 pintOS와 강의에서 설명하는 pintOS의 버전이 달라 표현방법이 다르다.
(강의)phys_base 👉 (kaist-pintOS)USER_STACK