[OS] Virtual Memory : Block Mapping

parkheeddong·2023년 5월 29일
0

Operating System

목록 보기
43/63
post-thumbnail

👇 Virtual Memory

Virtual Memory System은 사용자 프로세스 이미지를 메모리로 로딩할 때 프로세스 전체를 로딩하는 것이 아니라 일부만 조각내서 로딩하기 때문에 Discontiguous Allocation이다.
Address Mapping, Address Binding에서도 Runtime Binding을 할 수밖에 없다. (Load time Binding은 매우 복잡하므로 현실적으로 어렵다)
Page이던 Segment이던, General한 용어로 'Block'으로 칭해 보자




Block Mapping


📌 Concept

Runtime의 Address Mapping 과정에서, 프로세스 이미지를 블록 단위로 나누어 Block 단위로 Mapping을 한다.

각 블록에 대해 Address Mapping Information도 블록 단위로 유지한다.


✅ Virtual Address v = (b,d)

프로세스의 이미지를 m개의 block으로 나누었을 때, 그 중 한 주소에 접근하고자 할 때 해당 주소에 대해서 virtual address는 (b, d)로 표현한다.

v는 block number, d 는 해당 block에서의 displacement(offset)이다.


🔔 Block Map Table

각 프로그램의 블록에 대해 virtual address와 real address, 기타 정보들을 저장하는 테이블


✔ Block Number

✔ Residence Bit

1이면 해당 블록이 메모리에 로딩되어 있다는 뜻이다. 0이면 해당 블록이 메모리에 로딩되어있지 않는 것이다. (Discontiguous Allocation은 Residence Bit이 필요 없지만 Virtual Memory는 반드시 필요하다)

✔ Real Address

Physical Memory에서의 실제 주소


🔔 Block Mapping Procedure

1) 프로세스 Pa가 CPU에서 실행 하면서, 메모리에 접근하려고 V = (b, d) 주소를 generation 한다.

이 (b, d) 는 Virtual Address 이다.

2) Pa의 Block Mapping Table에 가면 그 프로세스의 모든 블록의 mapping 정보가 있다.

3) Residence Bit이 1이면, Real Address를 본다.

Real Address가 a번지면, a와 d (displacement)를 더한 a+d가 실제 Physical Address가 된다.

4) Residence Bit이 0이면, 해당 블록이 메모리에 들어와 있지 않은 것이다. ❗❗

(1) 해당 Block을 읽어서 메모리에 가져와야 한다.
(2) Pa는 Sleep을 해서 Context Switching이 발생한다. 하드디스크 등 Storage에 해당 블록을 읽으라는 command을 요청한다.
(3) 다 읽혀지고 나면, 프로세스 Pa가 인터럽트로 wake up 되고, ready상태가 된 후, 스케줄링 받으면 CPU에서 실행되어 Address Mapping을 할 수 있다.

-> 이로 인해 굉장히 많은 시간이 소모될 수 있으므로, 이를 'Block Fault'라고 한다!

0개의 댓글