OS

[OS] 정리7 : 가상 메모리

Binceline 2018. 9. 27. 22:20

exit

- 종료 처리 진행 후 프로세스 종료

- atexit() 함수 호출하여 exit handler에 등록된 함수 호출

- 전역 or 정적 객체 소멸자 호출

abort

- 프로세스 즉시 종료

- atexit() 호출하지 않음

- 소멸자 호출되지 않음

- 잘못된 기능을 수행하고 있어 더 진행되면 위험할 경우 abort 사용


프로세스가 사용하는 실제 메모리 공간

- 일반적으로 0 ~ max의 연속된 메모리. 물리 메모리는 연속적이지 않을 수 있다.

- MMU가 Page를 Frame으로 매핑한다.


Copy On Write

- 부모 프로세스와 자식 프로세스가 같은 페이지를 공유하는 것이다.

- 두 프로세스 중 하나가 공유 페이지를 수정하게 되면, 복사된 페이지를 쓰게 한다.

- 이 때 어떤 free page를 할당할지 결정하는 게 중요한데, OS는 이 free page들의 pool을 제공하는데 이 때 사용되는 기법을 Zero-Fill-On-Demand라 하며, 다음과 같은 경우에 갱신된다.

- 프로세스들이 Stack / Heap을 확장할 때

- Copy On Write가 수행될 때


Demand Paging(요구 페이징)

- 물리 메모리와 Swap Device 사이의 데이터 전송이 최소한으로 발생하도록 하기 위함.

- 스와핑을 사용하는 페이징 시스템. 전체 프로세스를 메모리에 스와핑하지 않고, 필요한 페이지만 스와핑해서 메모리에 올린다. 이를 Lazy Swapper 또는 Pager라고 한다.

- 극단적인 경우, 메모리에 페이지를 올리지 않고 프로세스를 실행시킬 수도 있다. 이 방식을 Pure Demand Paging이라 한다. 요구되기 전까지는 페이지를 메모리에 올리지 않는다.

- Demand Paging의 장점

- I/O가 적게 발생

- 적은 메모리

- 빠른 응답

- 더 많은 유저수용

- Demand Paging 단계

1. Page가 필요하다면 그것을 참조한다.

2. invalid reference라면 abort, 메모리에 없으면 메모리에 올린다.


valid-invalid bit

- Page table의 각 Entry에는 valid-invalid bit가 존재.

0 : not in memory

1 : in memory

- 처음엔 모두 0으로 설정됨

- 페이지를 찾을 때 valid bit가 0이면 Page-Fault 발생. 이 경우 메모리에 가져온다.



Page Fault

- 가상 메모리 주소가 가리키는 Page를 찾았을 때, Frame 정보가 없어서 인터럽트를 발생시켜 운영체제에 알려주는 것.

1. Trap을 발생시켜 OS에 알린다.

2. OS는 해당 프로세스의 PCB에 있는 Page Table을 확인하여 다음을 결정한다.

- 아예 잘못된 참조일 경우 => abort

- 메모리에만 존재하지 않는 경우(valid-invalid bit가 0인 경우)

3. Free Frame을 찾는다.

4. 해당 페이지를 Frame에 넣는다.

5. 테이블을 갱신하고 해당 페이지의 validation bit를 1로 설정한다.

6. 다시 해당 Instruction을 수행


위의 Page Fault 과정 6번에서 Instruction을 재시작하는 것에 대한 문제가 있음

- Block Move : Block이 겹치는 경우가 있음. 이에 대해서는 나중에 다시 포스팅


Demand paging의 성능은 다음과 같이 측정한다.

- Page Fault Rate : 0 <= p <= 1.0

- p = 0이면 Page Fault가 없다는 것이고, 1이면 항상 fault가 발생한다는 것이라 할 때,

- Effective Access Time(EAT:유효 엑세스 시간)

- EAT = (1 - p) * 메모리 엑세스 시간 + p * (Page Fault 처리시간 + 페이지 스왑(in/out) 시간 + Instruction 재시작 시간)

다음 예시를 보면 이해가 잘 될 것이다.


Free Frame이 존재하지 않는 경우엔?

- 메모리에 존재하지만 실제로 사용되지 않는 페이지를 Swap-out

- Page Fault를 최소하하는 알고리즘이 필요

- modify bit(dirty bit)를 사용하는 방법.

- 페이지는 swap in될 때 다시 dirty bit를 0으로 만든다.

- Swap in-out 발생 시 Swap out되는 페이지의 dirty bit가 0이라면 수정된 적이 없다는 뜻이므로, 디스크에 저장된 페이지와 지금 Swap out될 페이지의 정보가 일치한다는 뜻이다. 그래서 Swap-out을 다시 할 필요가 없고 그대로 해당 프레임을 할당해 주면 된다.

- dirty bit가 1이라면 Swap-out 수행

- 페이지 교체가 되면 가상 메모리와 물리 메모리 간의 분리가 완료된다. 물리 메모리가 더 적어도 이런 식으로 페이지 교체를 통해 마치 가상 메모리 크기만큼의 물리 메모리가 존재하는 것처럼 사용할 수가 있게 된다.


다음 그림을 보자.

상황

- user1, user2 프로세스가 각각 페이지 4개를 사용하고 있음

- user1, user2 페이지 테이블에 실제 물리 메모리에 할당된 페이지가 3개씩 존재

- 물리 메모리는 꽉 차 있음

수행

1. PC가 1을 가리키고 있으므로, Page Table 참조하여 페이지 번호 1 확인. 

2. valid 이므로 물리 메모리에 있는 프레임 주소 4 참조하여 load M 이라는 명령 실행

3. 페이지 M을 추출해 보니 페이지 번호 3, 따라서 페이지 테이블 3번 Entry 확인.

4. invalid이므로, 디스크에 존재하는 페이지 M을 물리 메모리에 적재해야 함

5. 물리 메모리가 모두 사용중이라서 페이지 교체 알고리즘을 통해 어떻게 Swap in-out을 할지 결정


페이지 교체 알고리즘

- 이건 알아서 공부해야겟다.

반응형

'OS' 카테고리의 다른 글

Context Switching에서의 Thread와 Process의 관계 + PCB, TCB  (2) 2020.05.30
컴퓨터 자원의 구조와 동작, RAM과 Disk에 대해  (0) 2020.05.26
[OS] 정리6 : 메모리 관리  (0) 2018.09.26
[OS] System call, Interrupt, Trap, 등  (1) 2018.09.24
[OS] 정리5  (0) 2018.09.24
[OS] 정리4  (0) 2018.09.24
[OS] 정리3  (0) 2018.09.24
[OS] 정리2  (0) 2018.09.23
[OS] 정리1  (0) 2018.09.21
pintos information  (0) 2014.02.13