Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OS/yoongoing #56

Merged
merged 34 commits into from
Jul 26, 2021
Merged
Changes from 33 commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
de092f8
[OS] 깃 정리
yoongoing Jul 24, 2021
f7e05bf
[OS] 깃 정리
yoongoing Jul 24, 2021
12d4236
OS/Yoongoing
yoongoing Jul 24, 2021
ae951f1
OS/Yoongoing
yoongoing Jul 24, 2021
0b88396
OS/Yoongoing
yoongoing Jul 24, 2021
401067b
OS/Yoongoing
yoongoing Jul 24, 2021
e31fc8b
OS/Yoongoing
yoongoing Jul 24, 2021
8499445
OS/Yoongoing
yoongoing Jul 24, 2021
4f2b080
OS/Yoongoing
yoongoing Jul 24, 2021
afdc99b
OS/Yoongoing
yoongoing Jul 24, 2021
ebfbf0f
OS/Yoongoing
yoongoing Jul 24, 2021
790b5d1
OS/Yoongoing
yoongoing Jul 24, 2021
bf677be
OS/Yoongoing
yoongoing Jul 24, 2021
b28eeea
OS/Yoongoing
yoongoing Jul 24, 2021
47dce6b
OS/Yoongoing
yoongoing Jul 24, 2021
b060460
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 24, 2021
9d579bc
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 24, 2021
a3b47b3
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 24, 2021
d7ba9e2
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 24, 2021
aa49944
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 24, 2021
89f574c
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 24, 2021
6bd3a0e
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 24, 2021
3ae6352
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 24, 2021
8f2191a
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 24, 2021
0aa8c2e
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 24, 2021
02c5f09
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 24, 2021
db4a8f8
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 24, 2021
a244886
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 24, 2021
8fec909
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 24, 2021
436f182
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 24, 2021
666f40f
[OS] 오타 수정
Hee-Jae Jul 25, 2021
4b5082d
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 26, 2021
7ee0276
[OS] 가상메모리, 페이지 교체 정리
yoongoing Jul 26, 2021
53b74bb
[OS] 최종
yoongoing Jul 26, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 125 additions & 4 deletions contents/operating-system/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -439,6 +439,127 @@ Example

## 가상 메모리

### 가상 메모리란?

메인 메모리의 크기가 한정되어 있기 때문에 물리적인 메모리 크기보다 큰 프로세스를 실행시킬 수 없다. 그렇다면 메인 메모리보다 크기가 큰 프로세스를 실행시키고 싶으면 어떻게 해야 할까? 그래서 나온 방법이 바로 '가상메모리'이다.
<br/>
<br/>

**프로세스 전체가 메모리 내에 올라오지 않더라고 실행히 가능하도록 하는 기법을 통틀어 가상메모리**라고 하며, `필요한 부분만 메모리에 올림으로써 메모리에 올라가는 프로세스의 크기를 줄이는` 요구 페이징 기법을 사용한다. 프로세스 이미지를 모두 메모리에 올릴 필요가 없어지며, 메모리 용량 부족 이슈를 해결할 수 있다.

### 가상 메모리가 하는 일

가상 메모리는 실제 `물리 메모리 개념과 사용자의 논리 메모리 개념을 분리`한 것이다. 따라서 작은 메모리를 가지고도 얼마든지 큰 가상주소 공간을 프로그래머에게 제공할 수 있다.

#### 따라서 가상메모리는...

* 시스템 라이브러리가 여러 프로세스들 사이에 공유될수 있도록 한다. 각 프로세스들은 공유 라이브러리를 자신의 가상 주소 공간에 두고 사용하는 것처럼 인식하지만, 라이브러리가 올라가 있는 물리 메모리 페이지들은 모든 프로세스에 공유되고 있다.

* 프로세스들이 메모리를 공유하는 것을 가능하게 하고, 프로세스들은 공유 메모리를 통해 통신할 수 있다.

* 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`

물리메모리에 들어온 페이지 순서대로 페이지 교체 시점에 먼저 나가게 된다.

* 장점
<<<<<<< HEAD
* 이해하지 쉽고, 프로그래밍도 쉽다.
ggjae marked this conversation as resolved.
Show resolved Hide resolved
=======
* 이해하기 쉽고, 프로그래밍도 쉽다.
>>>>>>> 666f40f52b1c545bb2902f999f924c1065befcf6

* 단점
* 오래된 페이지가 불필요한 정보를 포함한다고 보장할 수 없다.
* 처음부터 활발하게 사용되는 페이지를 교체해서 페이지 부재율을 높일 수 있다.
<<<<<<< HEAD
* ```Belady의 모순``` : 페이지를 저장할 수 있는 페이지 프레임의 객수를 늘려도 되려 페이지 부재가 더 많이 발생한다는 모순이 존재한다.
=======
* `Belady의 모순` : 페이지를 저장할 수 있는 페이지 프레임의 개수를 늘려도 되려 페이지 부재가 더 많이 발생한다는 모순이 존재한다.
>>>>>>> 666f40f52b1c545bb2902f999f924c1065befcf6

<br/>

#### [최적 페이지 교체]
`Optimal Page Replacement`

모든 알고리즘보다 낮은 페이지 부재율을 보이며 `Belady의 모순` 또한 발생하지 않는다. 이 알고리즘의 핵심은 **앞으로 가장 오랫동안 사용되지 않을 페이지를 찾아 교체**하는 것이다. 주로 비교 연구 목적을 위해 사용된다.~(안사용된다는 말)~

* 장점
* 가장 낮은 페이지 부재율을 보장한다.

* 단점
* 구현이 어렵다. 모든 프로세스의 메모리 참조 계획을 미리 파악할 수 없기 떄문이다.

<br/>

#### [LRU 페이지 교체]
`Least-Recently-Used Page Replacement`

최적 알고리즘의 근사 알고리즘. 가장 오랫동안 사용되지 않은 페이지를 선택하여 교체한다.

* 특징
* FIFO < LRU < OPT

<br/>

#### [LFU 페이지 교체]
`Least-Frequently-Used Page Replacement`

참조 횟수가 가장 적은 페이지를 교체한다. 활발하게 사용되는 페이지는 참조 횟수가 많아질 거라는 가정에서 만들어졌다.

* 특징
* 어떤 프로세스가 특정 페이지를 집중적으로 사용하다가 다른 기능을 사용하게 되면 더 이상 사용하지 않아도 계속 메모리에 머물게 되어 초기 가정에 어긋 날 수 있다.
* OPT 알고리즘을 제대로 근사하지 못해 잘 쓰이지 않는다.

<br/>

#### [MFU 페이지 교체]
`Most-Frequently-Used Page Replacement`

참조 횟수가 가장 적은 페이지가 최근에 메모리에 올라왔고, 앞으로 계속 사용될 것이라는 가정에 기반한다.

* 특징
* OPT 알고리즘을 제대로 근사하지 못해 잘 쓰이지 않는다.

### Reference

- 2021 시나공 정보처리기사 필기
- https://github.com/JaeYeopHan/Interview_Question_for_Beginner

---

## 캐시
Expand Down Expand Up @@ -513,7 +634,7 @@ CPU에서 명령어를 수행하며 매번 캐시 메모리를 참조하게 되

### 교착상태를 막을 방법은 없을까?

#### 예방 기법 (Prevention)
#### [예방 기법 (Prevention)]

교착상태가 발생하지 않도록 사전에 시스템을 제어하는 방법으로, 교착상태 발생의 네 가지 조건중에서 어느 하나를 제거하는 방법이다. 자원 낭비가 가장 심한 기법이다.

Expand All @@ -522,7 +643,7 @@ CPU에서 명령어를 수행하며 매번 캐시 메모리를 참조하게 되
3. **비선점 부정** : 자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고, 요구한 자원을 사용하기 위해 기다리게 한다.
4. **환형 대기 부정** : 자원을 선형 순서로 분류하여 고유번호를 할당하고, 각 프로세스는 현재 점유한 자원의 고유 번호보다 앞이나 뒤 어느 한쪽 방향으로만 자원을 요구한다.

#### 회피 기법 (Avoidance)
#### [회피 기법 (Avoidance)]

교착상태가 발생할 가능성을 배제하지 않고, 교착상태가 발생하면 적절히 피해나가는 방법으로, **은행원 알고리즘(Banker's Algorithm)** 이 사용된다.

Expand All @@ -533,11 +654,11 @@ CPU에서 명령어를 수행하며 매번 캐시 메모리를 참조하게 되
> 4. 은행원 알고리즘은 프로세스의 모든 요구를 유한한 시간안에 할당하는 것을 보장함
> ```

#### 발견 기법 (Detection)
#### [발견 기법 (Detection)]

시스템에 교착상태가 발생했는지 점검하여 교착상태에 있는 프로세스와 자원을 발견하는 기법이다. 발견 후엔 교착상태 회복(Recovery) 직업을 수행하므로 발견기법과 회복기법을 함께 쓴다. (Detection & Recovery)

#### 회복 기법 (Recovery)
#### [회복 기법 (Recovery)]

교착상태를 일으킨 프로세스를 종료하거나, 교착상태의 프로세스에 할당된 자원을 선점하여 프로세스나 자원을 회복하는 것을 의미한다. 크게 프로세스 종료와 자원 선택으로 나뉜다.

Expand Down