컴퓨터 구조론

[컴퓨터 구조론]12.Virtual Memory 3,4

myjeongjun 2025. 1. 14. 20:20

 

이전 시간에 강의했던 내용부터 Protection과 Sharing에 대해 설명해준다.

 

Protection:각 프로세스를 Page로 나누었을때 페이지에 접근권한을 설정하는거라고 생각된다.

 

예를 들어 프로세스의 코드 영역은 함부로 수정되서는 안되는 영역이므로 이 영역에 해당되는 페이지는 읽기 전용임을 메모리에 알려줘 혹시나 예기치못한 참조로 인해 쓰기를 시도해도 못하게 막는것이다.(만약 쓰기를 시도하면 이것또한 Page Default로 처리된다는데 확실하지 않다.)

 

Sharing : 공통된 코드를 같은곳에 매핑하기때문에 메모리 손실을 줄인다.

 

cpu Cache memory에서도 LRU를 이용해 교체 되어야할 대상을 정해줬다.

 

virtual Memory에서도 메모리의 모든 페이지가 메모리에 들어있으면 LRU를 사용해서 처리한다는 것인데

일반적으로 프레임이 늘어나면 당연히 page Fault도 줄어들지만 특정 경우에는 감소 할 수 있다고한다.(자세한건

Belady's Anomaly를 찾아보면 됩니다,)

 

그리고 잘 생각해보면 아래의 그림처럼 페이지 프레임이 3~4개 가아니라 실제로는 1,000,000개는 될텐데 그걸 가장 최근에 참조한게 뭐였는지알기 위해서 매 참조마다 최근 참조된 순으로 줄세우기를 시키는건 불가능하다.

그래서 조금 다른 LRU인 Second Chance Algorithm을 쓴다.

 

 

메모리에 reference bit를 두는데 이건 참조 될때마다 1로 set해주는 bit이다. 

 

과정

1.메모리를 처음부터 순회하면서 refence bit가 1인 페이지를 0으로 바꿔준다. 

 

2.가장 마지막에 도달하면 다시 처음부터 순회하는데, 그때 reference bit가 0이라면 순회를 할동안 참조가 되지 않았다는 이야기이므로 이 페이지를 교체한다.

여기서 생각해 볼 수 있는 상황은 모든 페이지가 참조되고있어 0인 bit가 없는것이다. 이건 근본적으로 메모리 용량이 부족하다는 뜻이니 이제는 프로세스 단위로 어떤 프로세스를 실행시킬지를 조정해야한다.

 

 

위의 방식에서의 문제점으로는 reference bit는 cpu가 참조해야지 1로 set하는 점에서 출발한다.

I/O의 경우에는 해당 페이지를 참조해도 reference bit를 1로 set해주지 않는다. 이 말은 I/O가 해당 페이지를 통해 작업을 할때 OS는 해당 페이지의 bit가 0인것만보고 쫓아 내버릴수 있기때문에 더 큰 문제로 이어질 수있다.

 

그러므로 lock bit를 둬서 memory에 lock을 시켜 메모리에서 쫓아내지 못하게 만들 수 있다.

사실 프로그램은 마구잡이로 코드가 놓여져있는게아니라 영역이 분할되어있는건 잘 알고있을것이다.(힙영역,스택,코드,데이터)

지금 까지 배운내용에서 segmentation도 사용해서 물리적 주소로 변환해주는것만 추가해주면 차이가 없다.

 

 

 

개념적인 부분을 추가하자면 그렇기때문에 빈 공간의 경우에는 page table에 내용이 있지않아 stack에 내용이 쌓이는 경우 페이지 테이블을 업데이트 해주지 않으면 acess violatiion이 발생할 수 있다.

이 문제를 해결하기 위해 stack이나 heap에 할당할때 Free Page Pool(사용하지 않은 페이지들을 모아놓은 Pool)에서 페이지도 함께 할당시켜준다.

전체 흐름도