Skip to content

Commit

Permalink
[운영체제/워크북 제출] 프로세스 주소 공간 (#5)
Browse files Browse the repository at this point in the history
  • Loading branch information
sujin-kk committed Sep 19, 2022
1 parent 619e54d commit 745149f
Showing 1 changed file with 73 additions and 0 deletions.
73 changes: 73 additions & 0 deletions Operating System/프로세스 주소 공간/Workbook/sujin.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# 워크북-프로세스메모리모델

- 프로세스 메모리 모델에서 스택 영역이 하는 일을 말해보세요

```
함수의 매개변수, 지역변수, 리턴 주소 등을 임시로 저장합니다.
새로운 함수 호출 시 스택 프레임이 생성되고 이 스택 프레임 안에 함수의 데이터가 저장됩니다.
함수가 종료되면 스택 프레임 전체가 pop 됩니다.
컴파일 시 스택 프레임의 크기가 결정되기 때문에, 재귀함수가 반복해서 호출되거나
함수를 메모리를 초과할 정도로 너무 많이 가지고 있어 스택에 들어갈 수 있는
데이터의 한계를 넘어가면 stack overflow가 발생합니다.
```

- 프로세스 메모리 모델에서 힙 영역이 하는 일을 말해보세요

```
프로그래머가 필요할 때 마다 사용하는 동적인 메모리 영역입니다.
런타임 시 힙 영역의 크기가 동적으로 할당됩니다.
객체와 같은 레퍼런스 타입의 데이터가 힙 영역에 저장되고, 같은 프로세스의 쓰레드들은
힙 영역의 데이터를 공유하게 됩니다.
메모리 주소 값에 의해서만 참조될 수 있고, 이 주소 값 자체는 스택 영역에 할당되어 이 주소값이
가리키는 힙 영역의 임의의 공간부터 원하는 크기만큼 할당해서 사용하는 영역입니다.
```

- 메모리 구조 중 쓰레드간에 공유하는 공간과 공유하지 않는 공간을 말해보세요

```
스택 영역을 제외하고 데이터, 코드, 힙 영역을 쓰레드 간에 공유하게 됩니다.
```

- 힙 메모리에 데이터를 자주 생성하고 해제를 반복하다보면 fragmentation이 생길 수 있습니다. malloc() 자체가 실패할 수 있는데 어떻게 해결할 수 있을까요?

```
internal fragmentation(내부 단편화)
-> 프로세스에 할당된 메모리 공간이 실제로 프로세스가 필요한 공간보다 많이 할당되었을 때,
프로세스 내부에서 발생되는 단편화를 말합니다.
external fragmentation(외부 단편화)
-> 외부 단편화는 메모리가 할당되고 해제되는 작업이 반복되면서
작은 공간의 메모리 영역이 생기게 되는데,
이 공간이 크기가 어떤 프로세스가 필요로 하는 크기보다 작은 경우를 의미합니다.
쉽게 말해서 충분한 공간이 있지만 내가 필요로 하는 크기보다 작아서 사용할 수 없는 경우입니다
A.
가장 쉬운 방법으로는 메모리 공간이 여러개의 조각으로 나뉘어서 빈 공간이 생기는 현상이기 때문에,
사용중인 메모리 공간을 한쪽으로 모인다면 사용 가능한 충분한 공간이 생길 수 있다는
방식으로 접근하는 '메모리 압축'으로 해결할 수 있습니다.
또한 fragmentation이 발생한 빈 공간에서 인접해 있는 다른 빈 공간들을 하나로 통합시켜
큰 공간을 만드는 '통합' 방법이 존재합니다.
이런 방식은 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 개념을 전제로
해결하는 방법인데, 이를 탈피하여 외부 단편화를 해결할 수 있는 '페이징' 방법이 있습니다.
페이징을 사용하면 독립된 크기의 연속적인 공간이 없어도 프로그램을 메모리에 올려 놓을 수
있습니다.
```

- 32 bit 운영체제에서 각 프로세스는 얼만큼의 Virtual Address Space를 가질까요?
- 그중 대부분의 공간은 Unused 상태로 남아있을텐데 어떻게 효율적으로 관리할 수 있을까요?

```
32bit 운영체제의 각 프로세스 주소 공간은
0x00000000 ~ 0x7FFFFFFF의 2기가바이트 범위입니다.
음,, 어떻게 관리하면 좋을까요?^_^_^
```

0 comments on commit 745149f

Please sign in to comment.