학습 기록/CS : 전공지식 노트

CS : 메모리 / 할당 / 페이지 폴트 / 스레싱 등

서버관리자 페페 2024. 4. 27. 14:24

메모리 관리 기법인 가상 메모리에 대해 알려줘

컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것  가상 주소(logical address)와  실제 주소(physical address)가 매핑되어 있고,  프로세스의 주소 정보가 들어 있는 페이지 테이블로 관리됩니다.  이 때 속도 향상을 위해 TLB를 사용합니다.


TLB는?

메모리와 CPU 사이에 있는 주소 변환을 위한 캐시입니다.  페이지 테이블에 있는 리스트를 보관하며  CPU가 페이지 테이블까지 가지 않도록 해 속도를 향상시킬 수 있는 캐시 계층입니다.


가상 주소는 어떻게 실제 주소로 변환되나?

MMU : 메모리 관리 장치에 의해 실제 주소로 변환되며, 이 덕분에 사용자는 실제 주소를 의식할 필요 없이 프로그램을 구축할 수 있습니다.

 

스와핑?

이를 통해 마치 페이지 폴트가 일어나지 않는 것처럼 만드는 기법입니다.  이때 메모리에서 당장 사용하지 않는 영역을 하드디스크로 옮기고, 하드디스크의 일부분을 마치 메모리처럼 불러와 쓴느 것을 swapping이라고 합니다. 이를 통해 마치 페이지 폴트가 일어나지 않는 것처럼 만드는 기법입니다.


page fault?

프로세스의 주소 공간에는 존재하지만, 지금 이 컴퓨터의 RAM에 없는 데이터에 접근했을 경우 발생합니다.    가상 메모리에는 존재하지만 실제 메모리인 RAM에는 현재 없는 데이터나 코드에 접근할 경우 page fault가 발생합니다.


프레임?

실제 메모리를 사용하는 최소 크기 단위

 

페이지?

가상 메모리를 사용하는 최소 크기 단위


page falut가 발생시 실제 swapping 처리 흐름
 페이지 폴트와 그로 인한 스와핑은 다음 과정으로 이루어집니다.  1 : 어떤 명령어가 유효한 가상 주소에 접근했으나 해당 페이지가 만약 없다면 trap이 발생되어 O/S에 알리게 됩니다. 2 : O/S는 실제 디스크로부터 사용하지 않은 프레임을 찾습니다/ 3 : 해당 프레임을 실제 메모리에 가져와서 페이지 교체 알고리즘을 기반으로 특정 페이지와 교체합니다.(스와핑) 4 : 페이지 테이블을 갱신시킨 후 해당 명령어를 다시 시작합니다..


thrashing에 대해 알려주세요

스레싱은 메모리의 페이지 폴트율이 높은 것을 의미하며, 이는 컴퓨터의 심각한 성능 저하를 초래합니다.  메모리에 너무 많은 프로세스가 동시에 올라가게 되면 따라서 스와핑이 많이 일어나서 발생합니다.  페이지 폴트가 일어나면 CPU 이용률이 낮아집니다. 이용률이 낮아지면 운영체제는 CPU가 한가하다고 생각해서 더 많은 프로세스를 메모리에 할당합니다.  이 악순환이 발생하며 스레싱이 일어납니다

 

thrasing - 스레싱을 해결하기 위한 방법은?

하드웨어 적으로는  메모리를 늘리거나, HDD를 사용한다면 HDD를 SSD로 교체할 수 있습니다.  O/S에서 해결할 수 있는 방법은 작업 세트(working set) PFF(Page Fault Frequency)  2가지가 있습니다.


thrasing - working set에 대해 말하시오

페이지 집합을 만들어서 미리 메모리에 로드하는 것을 말합니다.  미리 메모리에 로드하면 탐색 코스트를 줄일 수 있고 스와핑 또한 줄일 수 있습니다. 프로세스의 과거 사용 이력인 locality를 기준으로 페이지 집합을 만듭니다.

 

thrasing - PFF에 대해 설명해주세요

Page Fault Frequency는 말 그대로 페이지 폴트 빈도를 조절하는 방법입니다. 이는 상한선과 하한선을 설정하여, 각 한계에 도달할시 프레임을 늘리거나 줄이거나 하는 식으로 대응됩니다/

 

프로그램을 메모리에 할당할때 어떤 기준으로 할당되는가?

시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당합니다.

 

연속 할당?

프로세스들이 순차적으로 공간에 할당됩니다. 메모리를 미리 나누어 관리하는 고정 분할 방식과 매 시점 프로그램 크기에 맞게 메모리를 분할하는 가변 분할 방식이 있습니다.  연고가

 

고정 분할 방식 fixed partition allocation

고정 분할 방식은 메모리를 미리 나누어 관리하는 방식이며 메모리가 미리 나뉘어 있기 때문에  내부 단편화가 발생할 수 있습니다.   

 

고뇌 가외 + 최초./

 

내부 단편화는 뭔가요?

internal fragmentation은 프로그램이 들어갔지만 남는 공간.


반대로 external fragemntation은?

외부 단편화는 미리 나누어둔 메모리 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상입니다.

 

hole?

할당할 수 있는 비어 있는 메모리 공간입니다/

 

가변 분할 방식(variable partition allocation)에 대해 설명해주세요

매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용하는 메모리 할당 방식입니다.  내부 단편화는 발생하지 않고, 외부 단편화가 발생할 수 있습니다.  최초적합(first fit) 최적적합(best fit) 최악적합(worst fit) 으로 나뉩니다/

 

최적적합이란?

프로세스의 크기 이상인 공간 중 가장 작은 홀부터 할당합니다.

 

최초적합이란?

위쪽이나 아래쪽부터 시작해서 홀을 찾으면 바로 할당합니다/

 

최악적합이란?

프로세스의 크기와 가장 많이 차이가 나는 홀에 할당합니다.

 

불연속 할당

현대 운영체제가 쓰이는 방법으로 주로 사용되는 paging 기법이나  segmentation  paged segmentation 등이 있습니다.

 

paging 기법에 대해 알려줘

메모리를 보통 4KB의 동일한 크기의 페이지로 나누고, 프로그램마다 페이지 테이블을 두어 메모리에 프로그램을 할당하는 것입니다. 홀의 크기가 균일하지 않은 문제는 없어지지만, 주소 변환이 복잡하다는 단점이 있습니다.


segmentation에 대해 알려줘

페이지 단위가 아닌 의미 단위인 segment로 나누는 방식입니다.  프로세스를 이루는 메모리는 코드 , 데이터 , 스택, 힙 으로 나뉘는데.  코드와 데이터로 나누거나, 코드 내의 작은 함수를 세그먼트로 놓고 나눌수도 있습니다.  공유와 보안 측면에서 장점을 가지며, 홀 크기가 균일하지 않은 단점이 있습니다.


paged sementation에 대해 알려줘

일반 세그멘테이션과 동일하게 세그먼트로 나누어 공유와 보안 측면의 이점을 가져가며,  동일한 페이지 단위로 나눕니다.


1 : 페이지 교체 알고리즘이란 무엇인가요?

메모리는 한정되어 있기 때문에 스와핑이 많이 일어납니다/ 스와핑은 많이 일어나지 않도록 설계되어야 하며, 이는 페이지 교체 알고리즘을 기반으로 스와핑을 일어나게 합니다/

 

2 : 그럼 페이지 교체 알고리즘의 종류에 대해 말해주세요

offline algorithm FIFO LRU(Least Recently Used) / 최소 최근 사용 NUR(Not Used Recently) / 최근 사용하지 않음 LFU(Least Frequently Used) / 최소 자주 사용

 

3 : 오프라인 알고리즘?

먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 알고리즘이며, 가장 좋은 방법입니다.  이는 미래에 사용되는 프로세스를 우리가 알수 없기에 사용이 불가하지만, 이상적인 알고리즘이기에 다른 알고리즘과의 성능 비교에 대한 상향기준(upper_bound)를 제시합니다.


4 : FIFO

가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법을 의미합니다.

 

6 : LRU Least Recently Used 

참조가 가장 오래된 페이지를 바꿉니다. 오래된 것을 파악하기 위해 각 페이지마다 계수기, 스택을 두어야 하는 문제점이 있습니다.

 

7 : NUR

LRU에서 발전한 Not Used Recently 이며  clock 알고리즘이라고 합니다/ 0과 1을 가진 비트를 두어, 시계 방향으로 돌아가며 최근에 참조되지 않았다는 0을 찾은 순간 해당 프로세스를 교체하고 해당 부분을 1로 바꿉니다

 

5 : LFU

Least Frequently Used는 가장 참조 횟수가 적은  페이지를 교체합니다. 즉 많이 사용되지 않는 것을 교체하는 것입니다.

 

프로그램을 메모리의 할당하는 두 가지 방식은?

연속 할당과 불연속 할당으로 나뉩니다  -  메모리 - 연속 - 고정 / 가변           - 불연속 - page / seg / paged seg

 

불연속 할당은 최악. 최초, 단편화 등이 없다