diff --git a/contents/operating-system/README.md b/contents/operating-system/README.md index dea78fa..14f770b 100644 --- a/contents/operating-system/README.md +++ b/contents/operating-system/README.md @@ -439,6 +439,116 @@ Example ## 가상 메모리 +### 가상 메모리란? + +메인 메모리의 크기가 한정되어 있기 때문에 물리적인 메모리 크기보다 큰 프로세스를 실행시킬 수 없다. 그렇다면 메인 메모리보다 크기가 큰 프로세스를 실행시키고 싶으면 어떻게 해야 할까? 그래서 나온 방법이 바로 '가상메모리'이다. +
+
+ +**프로세스 전체가 메모리 내에 올라오지 않더라고 실행히 가능하도록 하는 기법을 통틀어 가상메모리**라고 하며, `필요한 부분만 메모리에 올림으로써 메모리에 올라가는 프로세스의 크기를 줄이는` 요구 페이징 기법을 사용한다. 프로세스 이미지를 모두 메모리에 올릴 필요가 없어지며, 메모리 용량 부족 이슈를 해결할 수 있다. + +### 가상 메모리가 하는 일 + +가상 메모리는 실제 `물리 메모리 개념과 사용자의 논리 메모리 개념을 분리`한 것이다. 따라서 작은 메모리를 가지고도 얼마든지 큰 가상주소 공간을 프로그래머에게 제공할 수 있다. + +#### 따라서 가상메모리는... + +* 시스템 라이브러리가 여러 프로세스들 사이에 공유될수 있도록 한다. 각 프로세스들은 공유 라이브러리를 자신의 가상 주소 공간에 두고 사용하는 것처럼 인식하지만, 라이브러리가 올라가 있는 물리 메모리 페이지들은 모든 프로세스에 공유되고 있다. +* 프로세스들이 메모리를 공유하는 것을 가능하게 하고, 프로세스들은 공유 메모리를 통해 통신할 수 있다. +* fork()를 통한 프로세스 생성과정에서 페이지들이 공유되는 것을 가능하게 한다. + +### 요구 페이징 (Demand Paging) 이란? + +프로그램 실행 시작 시 `프로그램 전체를 디스크에서 물리 메모리에 적재하는 대신, 초기에 필요한 것들만 적재하는 전략`을 요구 페이징이라 하며, 가상 메모리 시스템에서 많이 사용된다. + +* 가상메모리는 대개 페이지로 관리된다. +* 요구페이징을 사용하는 가상메모리에서는 실행과정에서 필요해질 때 페이지들이 적재된다. 따라서 한번도 접근되지 않은 페이지는 물리 메모리에 적재되지 않는다. + +### Reference +- 2021 시나공 정보처리기사 필기 +- https://github.com/JaeYeopHan/Interview_Question_for_Beginner + +--- + +## 페이지 교체 알고리즘 + +### 페이지 교체 + +앞선 요구페이징에서 언급된대로 프로세스의 동작에 필요한 페이지를 요청하는 과정에서 `page fault(페이지 부재)` 가 발생하게 되면, 원하는 페이지를 보조저장장치에서 가져오게 된다. 하지만, 물리 메모리가 모두 사용중인 상황이라면 **페이지 교체**가 이뤄져야 한다. + +### 페이지 교체 흐름 + +1. 디스크에서 필요한 페이지의 위치를 찾는다. +2. 빈 페이지 프레임을 찾는다. + 1) 페이지 교체 알고리즘을 통해 희생될 페이지를 고른다. + 2) 희생될 페이지를 디스크에 기록하고, 관련 페이지 테이블을 수정한다. +3. 새롭게 비워진 페이지 테이블 내 프레임에 새 페이지를 읽어오고, 프레임 테이블을 수정한다. +4. 사용자 프로세스 재시작 + +### 페이지 교체 알고리즘 + +#### [FIFO 페이지 교체] +`First-In-First-Out Page Replacement` + +물리메모리에 들어온 페이지 순서대로 페이지 교체 시점에 먼저 나가게 된다. + +* 장점 + * 이해하기 쉽고, 프로그래밍도 쉽다. + +* 단점 + * 오래된 페이지가 불필요한 정보를 포함한다고 보장할 수 없다. + * 처음부터 활발하게 사용되는 페이지를 교체해서 페이지 부재율을 높일 수 있다. + * `Belady의 모순` : 페이지를 저장할 수 있는 페이지 프레임의 개수를 늘려도 되려 페이지 부재가 더 많이 발생한다는 모순이 존재한다. + +
+ +#### [최적 페이지 교체] +`Optimal Page Replacement` + +모든 알고리즘보다 낮은 페이지 부재율을 보이며 `Belady의 모순` 또한 발생하지 않는다. 이 알고리즘의 핵심은 **앞으로 가장 오랫동안 사용되지 않을 페이지를 찾아 교체**하는 것이다. 주로 비교 연구 목적을 위해 사용된다.~(안사용된다는 말)~ + +* 장점 + * 가장 낮은 페이지 부재율을 보장한다. + +* 단점 + * 구현이 어렵다. 모든 프로세스의 메모리 참조 계획을 미리 파악할 수 없기 떄문이다. + +
+ +#### [LRU 페이지 교체] +`Least-Recently-Used Page Replacement` + +최적 알고리즘의 근사 알고리즘. 가장 오랫동안 사용되지 않은 페이지를 선택하여 교체한다. + +* 특징 + * FIFO < LRU < OPT + +
+ +#### [LFU 페이지 교체] +`Least-Frequently-Used Page Replacement` + +참조 횟수가 가장 적은 페이지를 교체한다. 활발하게 사용되는 페이지는 참조 횟수가 많아질 거라는 가정에서 만들어졌다. + +* 특징 + * 어떤 프로세스가 특정 페이지를 집중적으로 사용하다가 다른 기능을 사용하게 되면 더 이상 사용하지 않아도 계속 메모리에 머물게 되어 초기 가정에 어긋 날 수 있다. + * OPT 알고리즘을 제대로 근사하지 못해 잘 쓰이지 않는다. + +
+ +#### [MFU 페이지 교체] +`Most-Frequently-Used Page Replacement` + +참조 횟수가 가장 적은 페이지가 최근에 메모리에 올라왔고, 앞으로 계속 사용될 것이라는 가정에 기반한다. + +* 특징 + * OPT 알고리즘을 제대로 근사하지 못해 잘 쓰이지 않는다. + +### Reference + +- 2021 시나공 정보처리기사 필기 +- https://github.com/JaeYeopHan/Interview_Question_for_Beginner + --- ## 캐시 @@ -513,7 +623,7 @@ CPU에서 명령어를 수행하며 매번 캐시 메모리를 참조하게 되 ### 교착상태를 막을 방법은 없을까? -#### 예방 기법 (Prevention) +#### [예방 기법 (Prevention)] 교착상태가 발생하지 않도록 사전에 시스템을 제어하는 방법으로, 교착상태 발생의 네 가지 조건중에서 어느 하나를 제거하는 방법이다. 자원 낭비가 가장 심한 기법이다. @@ -522,7 +632,7 @@ CPU에서 명령어를 수행하며 매번 캐시 메모리를 참조하게 되 3. **비선점 부정** : 자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고, 요구한 자원을 사용하기 위해 기다리게 한다. 4. **환형 대기 부정** : 자원을 선형 순서로 분류하여 고유번호를 할당하고, 각 프로세스는 현재 점유한 자원의 고유 번호보다 앞이나 뒤 어느 한쪽 방향으로만 자원을 요구한다. -#### 회피 기법 (Avoidance) +#### [회피 기법 (Avoidance)] 교착상태가 발생할 가능성을 배제하지 않고, 교착상태가 발생하면 적절히 피해나가는 방법으로, **은행원 알고리즘(Banker's Algorithm)** 이 사용된다. @@ -533,11 +643,11 @@ CPU에서 명령어를 수행하며 매번 캐시 메모리를 참조하게 되 > 4. 은행원 알고리즘은 프로세스의 모든 요구를 유한한 시간안에 할당하는 것을 보장함 > ``` -#### 발견 기법 (Detection) +#### [발견 기법 (Detection)] 시스템에 교착상태가 발생했는지 점검하여 교착상태에 있는 프로세스와 자원을 발견하는 기법이다. 발견 후엔 교착상태 회복(Recovery) 직업을 수행하므로 발견기법과 회복기법을 함께 쓴다. (Detection & Recovery) -#### 회복 기법 (Recovery) +#### [회복 기법 (Recovery)] 교착상태를 일으킨 프로세스를 종료하거나, 교착상태의 프로세스에 할당된 자원을 선점하여 프로세스나 자원을 회복하는 것을 의미한다. 크게 프로세스 종료와 자원 선택으로 나뉜다.