OS의 두번째 역할은, 바로 '메모리 관리'(자원관리).
한정된 메모리를 보다 효율적으로 분배하고 사용하기 위한 것!
메모리 관리는 주기억 장치(메인메모리) 그리고 보조기억 장치(세컨더리 메모리).
이 두 파트로 나누어 설명할 수 있다.
주기억 장치 | 보조기억 장치 | ||
- 속도를 담당. 작업을 더 빠르게 하는 것. 어떻게 하면 딜레이 없이 CPU와 잘 소통할 수 있는지를 관리. |
- 얼마나 더 저장할 수 있는지, 공간을 관리. 공간에 파일들을 잘 저장해두고, 더 빨리 찾기위해 어떻게 data들을 분포할지 관리한다. |
1. Main Memory : 주기억 장치
1. Uni Programming : 유니 프로그래밍
전 포스팅에서 멀티 프로그래밍과 함께 설명했던, 메모리에 업로드되는 프로세스가 하나 뿐이라
'준비-실행'으로만 관리하는 것.
작업간 충돌할 일이 없으니 버그가 없고, 오버헤드가 발생하지 않는다는 장점이 있다.
예를들면 예약제 손님만 받는 음식점! *때문에 절대주소를 사용한다
그러나 한번에 한개의 작업만 가능하기 때문에, CPU 자원낭비, 그리고 작업 간 스케쥴링이 비효율적이다.
*ex.문서작업 같은건 cpu를 쓸 일이 없는데 cpu가 계속 돌아가고 있어서?
또 지금 우리가 사용하는 한번에 여러가지 작업들을 실행하는 프로그램과는 큰 차이가 있다.
때문에 적은 작업을 수행하는 임베디드와 어울린다.
2. Multi Programming : 멀티 프로그래밍
하나의 메모리 안에 여러 프로그램들이 자리잡음으로써 처리속도의 향상을 가져오는 것이, 바로 멀티 프로그래밍이다. 하나의 메모리 안에 여러 프로그램들이 들어왔다 나갔다 하니까, 중간중간 크고 작은 문제들이(파편화) 발생하고 그러면서 이 메모리 관리를 어떻게 할까~ 고민하다가 가변분할과 고정분할 개념이 나오게 된다.
1. 고정분할
고정 분할 프로그래밍은 주기억장치를 미리 ! 몇 개의 고정된 개수와 크기로 분할하여,
여러 개의 사용자 프로그램이 동시에 적재되어 실행하게 하는 방법.
이렇게 나누어지는 분할의 개수는 전체 주기억장치의 용량, 바람직한 다중 프로그래밍의 정도, 프로세스의 크기 등에 따라 정해지며
필요에 따라 개수나 크기를 변경할 수 없다.
프로그램의 요청 메모리 크기보다 크면서, 비어있는 분할 중 가장 작은 메모리 영역을 할당하는데,
예를들어 미리 만들어둔 '100'이라는 크기의 분할에 '80' 크기를 가진 프로그램을 할당하는 것!
+ 이 때 20이라는 공간이 남게 되는데,
이렇게 사용자 프로그램의 크기가 정해진 분할크기에 정확히 맞지 않으면 # 내부 단편화 가 발생하고,
분할이 너무 작아서 대기 중인 작업 중 하나도 맞는 것이 없을 경우 그 분할이 사용되지 않은 상태로 남아 있게 되므로 외부단편화도 발생한다.
(내부 단편화 정리 = 요구된 공간보다 더 큰 공간을 할당하는 경우 발생. 공간에서 남는 부분을 말함.)
2. 가변분할
고정분할의 문제점을 해결하고자, 가변분할은 고정분할 기법과는 다르게 각 프로세스의 요구량에 따라
동적으로 필요한 만큼의 개수와 크기의 분할 공간을 생성 할 수 있다.
그러나 여기서는 분할된 크기가 프로그램보다 작아서 사용되지 않고 빈 공간으로 남아있는 #외부단편화 가 발생한다.
//예를 들어, 텐트 수용인원은 5명인데 들어갈 사람이 6명이라 텐트가 찢어지는 상황.
그래서 이 외부단편화를 해결하기 위해,
새로 반입된 프로그램을 어느 빈 영역에 적재할 것인가~를 결정하는 알고리즘으로,
최초적합(First Fit), 최적적합, 최악적합이 나온다.
1. First-fit 최적적합 : 들어갈 수 있는 공간 중 처음 찾아낸 공간에 할당. 간단하고 빠르지만, 사용가능 공간 이용률은 하락.
2. Best-Fit 최적적합 : 사용가능 공간 중 가장 작은 크기의 공간을 할당, 사용가능 공간 이용률은 상승하지만, 정렬되어있지 않을 시 정렬과정이 필요해서 시간 이 걸리기 때문에 비효율적. 메모리 집약 횟수를 증가시키는 데다가 외부단편화를 초래 함!!
3. Worst-Fit 최악적합 : 사용가능 공간 중, 가장 큰 사용가능 공간에 할당. 이것도 정렬과정의 시간지연 때문에 비효율적이고 공간 낭비가 발생할 수 있다. 그러나 남은 곳 중 가장 큰 곳에 할당해서 선택이 빠르긴 하다.
| First-fit | Best-Fit | Worst-Fit | |
기능 | 처음 찾아낸 공간에 할당 | 가장 작은 크기의 공간 | 가장 큰 사용가능 공간에 | |
장점 | 가장 간단하고, 대부분 경우 최적, 빠름 |
X | 남은 공간 중 큰 곳에 할당하는 거라 선택이 빠르긴 함. |
|
단점 | 정렬을 위해 전체 검색, | |||
외부 단편화 초래, 메모리 집약 횟수 증가. 가장 최악 ! |
공간 낭비 |
OS 공간이 넉넉하다면, Worst Fit이 가장 좋을 것이다.
Worst 와 First 는 상황에 따라 다르다.
앞서 살펴본 두 가지 단편화의 공통 예방법으로
한 곳에 사용중인 메모리 영역을 몰고 남은 공간들을 다른 한 곳으로 몰아 큰 덩어리를 만드는 법(머징)도 있지만,
이는 실행중인 프로세스의 동작을 중지시키고,
상대주소값을 바꿔 프로세스를 이동시킨 후 다시 프로세스를 시작하는 작업이 매우 복잡하고 비용이 많이 든다.
정리 하자면 :
메모리 관리를 할때,
메모리 공간을 분할해서 분배를 해 주는데,
미리 잘라놓는지/ 필요할때 잘라주는지. 로 구분하고!
그냥 하나의 메모리 공간만 가지구 데이터 처리를 하면 공간이 너무 작아서,
그때그때 대응 못할수도 있으니까 가상의 메모리를 만들어 내가 사용할 수 있는 것보다 더 많은 자원을 사용하는 것처럼 만들어봐야겠다.
'💻 컴퓨터 시스템' 카테고리의 다른 글
컴퓨터에서의 정수표현 (부호있는 정수, 2의 보수) (0) | 2021.07.20 |
---|---|
가상메모리, 페이징, 세그멘테이션, 페이지교체 알고리즘 (0) | 2021.07.20 |
OS, 스케쥴링 알고리즘 (0) | 2021.07.20 |
[CPU 와 Memory] 캐시메모리, 왜 메모리가 컴퓨터의 전체 성능을 좌우할까? (0) | 2021.07.20 |
객체지향, 오버로딩과 오버라이딩의 차이, 생성자 (1) | 2021.07.20 |
댓글