Skip to content

xv6 LWP Wiki (4. 부록)

SanghyoKim edited this page Jul 19, 2023 · 4 revisions

1. Process Address Space

xv6 Process의 Address Space 구조에 대해서 알아보겠습니다.

address_space

그림에서 볼 수 있듯이 text, data, guard page, stack, heap이 차례대로 쌓이는 구조로 이루어져있습니다.

이러한 구조에서 guard page라는 다소 생소한 부분에 대해 확인할 수 있습니다.

이는 어떤 역할을 하는지 stack에 데이터가 쌓여가는 과정에 대해 알아보면서 확인해보겠습니다.

stack

stack 영역에 data가 쌓일 때 위의 그림처럼 stack의 최상단에서 아래로 쌓여가는 구조인데, stack이 가득차서 stack overflow가 발생할 수 있습니다.

이 때 다른 영역(data 영역)에 대한 잘못된 접근을 하지 않게 하기 위해서, 그리고 접근 불가능한 상태임을 나타내기 위해서 만든 영역입니다.

그리고 우리가 익히 알고있는 address space와 다른점을 확인할 수 있습니다.

기존에 우리가 알고있는 adrress space는 아래와 같이 구성되어있습니다.
linux_address_space

heap 영역, stack 영역 순서로 쌓여있으며 사이에 빈 공간이 있기때문에 서로 반대방향으로 데이터를 쌓아가게 됩니다. 이로 인해서 heap영역과 stack 영역이 명확히 구분됩니다.

xv6에서는 이와 다른 구조로 되어있으며 이로 인하여 우리가 thread를 만들 때 다소 기이한 형태의 데이터 구조를 볼 수 있게 됩니다. 이와 관련해서는 thread_create를 보면서 확인해보겠습니다.

2. pthread 관련 레퍼런스

thread를 만드는데 있어서 리눅스의 pthread를 많이 참고했습니다.
스레드 - 이해와 기본
스레드 개념과 예제