카테고리 없음

[혼공컴운] 6주차 | 가상 메모리, 파일 시스템

muncaem 2024. 8. 18. 23:38

이번 주차는

▶ Chapter 14 가상 메모리

▶ Chapter 15 파일 시스템에 대해 알아보자.


먼저 Chapter 14 가상 메모리에 대해 알아보자.

 

우리는 지금까지 메모리에 프로세스들이 연속적으로 배치되는 상황을 가정했다. 하지만 메모리에 적재된 프로세스들 중에 현재 실행되지 않는 프로세스도 존재한다. 

 

이렇게 사용하지 않는 프로세스들을 임시로 보조기억장치 일부 영역인 스왑 영역으로 쫓아내고, 그렇게 해서 생긴 메모리의빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식을 스와핑이라고 한다.  

 

- 스왑 아웃 : 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것

- 스왑 인 : 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것

* 여기서 스왑 아웃되기 전의 물리 주소와는 다른 주소에 적재될 수도 있다.

 

 

비어 있는 메모리 공간에 프로세스를 연속적으로 할당하는 방법을 살펴보자. 대표적으로 3가지 방식이 있다.

 

1. 최초 적합 : 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식이다. 검색을 최소화하고 빠른 할당이 가능하다.

2. 최적 적합 : 운영체제가 빈 공간을 모두 탐색해 본 후, 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치하는 방식이다.

3. 최악 적합 : 운영체제가 빈 공간을 모두 탐색해 본 후, 적재될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치하는 방식이다.

 

프로세스들을 이렇게 연속적으로 할당하다 보면, 프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상이 발생한다. 이를 외부 단편화라고 한다.      

 

이를 해결할 수 있는 대표적인 방안으로 메모리 압축이 있다. 

메모리 내에 저장된 프로세스를 적당히 재배치시켜 흩어져 있는 빈 공간들을 하나의 큰 빈 공간으로 만드는 방법인데 이렇게 모으는동안 시스템은 하던 일을 중지해야하고 메모리에 있는 내용을 옮기면서 많은 오버헤드를 야기한다는 문제가 있다.   

 

 

 


 

압축 방법 외에도 이러한 외부 단편화 문제를 해결하는 방법이 있다.

페이징 기법이라고 하는데, 이를 이용하면 물리 메모리보다 큰 프로세스를 실행할 수도 있다.

 

이렇게 실행하고자 하는 프로그램을 일부만 메모리에 적재해서 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술을 가상 메모리라고 한다. 가상 메모리 관리 기법에는 페이징과 세그멘테이션이 있다.

 

페이징은 프로세스의 논리 주소 공간페이지라는 일정한 단위로 자르고, 메모리 물리 주소 공간프레임이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤에, 페이지를 프레임에 할당하는 가상 메모리 관리 기법이다.

 

페이징에서도 스와핑을 사용할 수 있는데 페이지 단위로 이루어진다. 페이징 시스템에서 스왑 아웃은 페이지 아웃, 스왑 인은 페이지 인이라고 한다.

 

* 페이징은 외부 단편화 문제를 해결할 수 있지만 모든 프로세스가 페이지 크기에 딱 맞게 잘리는 것이 아니므로 여기서 발생하는 메모리 낭비를 내부 단편화라고 한다. 만약 하나의 페이지 크기를 너무 작게 설정하면 그만큼 페이지 테이블의 크기도 커지기 때문에 메모리 내 페이지 테이블이 차지하는 공간이 낭비된다. 따라서 이를 방지하기 위해 너무 크지 않은 페이지 테이블이 만들어지도록 페이지의 크기를 조정하는 것이 중요하다.

 

=> 결론적으로 페이징의 논리는 한 프로세스를 실행하기 위해 프로세스 전체가 메모리에 적재될 필요가 없는 것이다.

 

이러한 방법에 문제가 있는데 프로세스가 메모리에 불연속적으로 배칙되면 CPU 입장에서 다음에 실행할 명령어 위치를 찾기가 어려워진다. 이를 해결하기 위해 페이징 시스템은 페이지 테이블을 제공한다. 프로세스가 실제 메모리 주소인 물리 주소에 불연속적으로 배치되더라도 CPU가 바라보는 논리 주소에는 연속적으로 배치된 것처럼 보이게 한다.

 

프로세스마다 각자의 이러한 페이지 테이블을 가지고 있고 이들은 메모리에 적재되어 있다. 그리고 각 프로세스의 페이지 테이블이 적재된 주소를 가리키고 있는 것은 CPU 내 페이지 테이블 베이스 레지스터이다.

 

페이지 테이블을 메모리에 두면 메모리 접근 시간이 2배로 늘어나기 때문에 CPU 옆에 TLB라는 페이지 테이블의 캐시 메모리를 둬서 해결한다. 캐시 히트/미스와 마찬가지로 TLB 히트/미스가 있다.

 

 

하나의 페이지 혹은 프레임은 여러 주소를 포괄하고 있다. 따라서 특정 주소에 접근하려면 2가지 정보가 필요하다.

1. 어떤 페이지 혹은 프레임에 접근하고 싶은지

2. 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져 있는지  

 

그렇기 때문에 모든 논리 주소가 아래와 같이 구성된다.

페이지 번호 변위

 

 

페이지 테이블에 대해 자세히 알아보자.

 

페이지 테이블의 각 행들을 페이지 테이블 엔트리라고 한다. 여기에는 페이지 번호, 프레임번호 뿐만 아니라 유효비트, 보호 비트, 참조 비트, 수정 비트 등의 정보들도 있다.

 

- 유효 비트 : 현재 해당 페이지에 접근 가능한지 여부를 알려준다. 현재 페이지가 메모리에 적재되어 있는지 아니면 보조기억장치에 있는지를 알려주는 비트다. 유효 비트가 0인 메모리에 적재되어 있지 않은페이지로 접근하려고 하면 페이지 폴트라는 exception이 발생한다. 페이지 폴트를 처리하는 과정은 하드웨어 인터럽트 처리 과정과 유사하다.

- 보호 비트 : 페이지 보호 기능을 위해 존재하는 비트이다. Read, Write, eXecute 권한의 조합을 나타낼 수 있다.

- 참조비트 : CPU가 해당 페이지에접근한적이 있는지 여부를 나타낸다. 

- 수정 비트 : 해당 페이지에데이터를 쓴 적이 있는지 없는지 수정 여부를 알려준다. CPU는 메모리에 값을 쓰기도 하는데 페이지가 메모리에서 사라질 때 보조기억장치에 쓰기 작업을 해야 하는지, 할 필요가 없는지 판단하기 위해 존재한다.   


 

프로세스를 메모리에 적재할 때 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만 메모리에 적재하는 기법을 요구 페이징이라고 한다.

 

그렇다면 적재하지 않을 페이지, 메모리에서 쫓아낼 페이지를 어떻게 선별할까?

 

메모리에서 쫓아낼 페이지를 결정하는 방법을 페이지 교체 알고리즘이라고 한다.

페이지 폴트가 자주 발생하지 않는다면컴퓨터의 성능 저하를 방지하는 좋은 알고리즘이 될 수 있다.

 

여기서 우리는 페이지 폴트 횟수를 알아야 한다. 이는 페이지 참조열을 통해 알 수 있는데 CPU가 참조하는 페이지들 중 연속된 페이지를 생략한 페이지열을 의미한다. 

 

이러한 페이지 참조열을 바탕으로 페이지 교체 알고리즘의 성능을 평가할수 있다. 

 

1. FIFO 페이지 교체 알고리즘 : 메모리에 가장 먼저올라온 페이지부터 내쫓는 방식이다.

2. 최적 페이지 교체 알고리즘 : CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘이다. 내보내야 할 페이지를 앞으로 사용 빈도가 가장 낮은 페이지로 설정한다. 하지만 이는 구현이 어렵다. 왜냐하면 가장 오랫동안 사용되지 "않을" 페이지를 예상해야하기 때문이다.

3. LRU 페이지 교체 알고리즘 : 가장 오랫동안 사용되지 "않은" 페이지를 교체하는 알고리즘은 구현 가능하다. 최근에 사용되지않은 페이지는 앞으로도 사용되지 않을 것이라는 것을 전제로 구현된다. 

 

프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저해되는 문제를 스래싱이라고한다.  

 

근본적인 원인은 각프로세스가 필요로 하는 최소한의프레임 수가 보장되지 않았기 때문이다. 따라서 운영체제는 프로세스들이 무리 없이 실행하기 위한 최소한의 프레임 수를 파악하고 적절한 수만큼 프레임을 할당해 줄 수 있어야 한다.

 

그렇다면 프레임 할당 방식을 알아보자.

 

[ 정적 할당 방식 ] 

1. 균등 할당 : 모든 프로세스에 균등하게 프레임을 제공하는 방식

2. 비례 할당 : 프로세스의 크기가 크면 프레임을 많이 할당하고 프로세스 크기가 작으면 프레임을 적게 나눠주는 방식   

 

[ 동적 할당 방식 ]

1. 작업 집합 모델 : CPU가 특정 시간 동안 주로 참조한 페이지 개수만큼만 프레임을 할당하는 방식, 실행 주인 프로세스가 일정 시간 동안 참조한 페이지의 집합을 작업 집합이라고 한다.

2. 페이지 폴트 빈도 : 페이지 폴트율에 상한선과 하한선을 정하고 해당 범위 안에서만 프레임을 할당하는 방식