Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- class
- MySQL
- nestjs
- Queue
- AWS
- jest
- flask
- Sequelize
- cookie
- JavaScript
- nodejs
- Python
- game
- 게임
- Bull
- OCR
- dfs
- 정렬
- MongoDB
- typeORM
- GIT
- Express
- react
- TypeScript
- Dinosaur
- Nest.js
- 자료구조
- mongoose
- 공룡게임
Archives
- Today
- Total
포시코딩
[운영체제] 7. Memory Management (2) 본문
728x90
키워드
physical memory, contiguous allocation, noncontiguous allocation, fixed partition, variable partition, hole, compaction
Allocation of Physical Memory
(=물리적인 메모리 관리 방법)
- 메모리는 일반적으로 두 영역으로 나눠 사용
- interrupt vector와 함께 낮은 주소 영역: 운영체제 커널(운영체제 상주 영역)
- 높은 주소 영역: 사용자 프로세스 영역
사용자 프로세스 영역의 할당 방법
- Contiguous Allocation
- 연속 할당
- 프로그램이 메모리에 올라갈 때 통째로 올라가는 방법
- 각각의 프로세스가 메모리의 연속적인 공간에 적재되도록 하는 것
- Fixed partition allocation
- Variable partition allocation
- Noncontiguous Allocation
- 불연속 할당
- 프로그램을 구성하는 주소 공간을 잘게 쪼개 적재하는 방법
- 현대의 시스템에서 불연속 할당을 사용
- 프로그램의 주소 공간을 같은 크기의 페이지로 잘라서
페이지 단위로 메모리 여기저기 올리거나 내리는 기법을 Paging 기법이라 한다. - Segmentation
- Paged Segmentation
Contiguous Allocation
두가지 방식으로 나뉨
- 고정분할(Fixed partition) 방식
- 가변분할(Variable partition) 방식
고정분할(Fixed partition) 방식
- 프로그램이 들어갈 사용자 메모리 영역을 미리 파티션으로 나눠놓는 방식
- 물리적 메모리를 몇 개의 영구적 분할(partition)로 나눔
- 분할의 크기가 모두 동일한 방식과 서로 다른 방식이 존재
- 분할 당 하나의 프로그램 적재
- 융통성이 없음
- 동시에 메모리에 load되는 프로그램의 수가 고정됨
- 최대 수행 가능 프로그램 크기 제한
- Internal fragmentation, external fragmentation 발생
- External fragmentation(외부 조각)
- 프로그램 크기보다 분할의 크기가 작은 경우
- 아무 프로그램에도 배정되지 않은 빈 곳인데도 프로그램이 올라갈 수 없는 작은 분할
- Internal fragmentation(내부 조각)
- 프로그램 크기보다 분할의 크기가 큰 경우
- 하나의 분할 내부에서 발생하는 사용되지 않는 메모리 조각
- 특정 프로그램에 배정되었지만 사용되지 않는 공간
가변분할(Variable partition) 방식
- 고정분할 방식과 반대로 미리 나눠놓지 않은 방식
- 프로그램의 크기를 고려해서 할당
- 분할의 크기, 개수가 동적으로 변함
- 기술적 관리 기법 필요
- External fragmentation 발생
- 프로그램이 끝나고 남은 빈 자리가 다른 프로그램이 들어갈 만큼 크지 않은 경우
Hole
- 가용 메모리 공간
- 다양한 크기의 hole들이 메모리 여러 곳에 흩어져 있음
- 프로세스가 도착하면 수용가능한 hole을 할당
- 운영체제는 다음의 정보를 유지
- 할당 공간
- 가용 공간(hole)
Dynamic Storage-Allocation Problem
가변 분할 방식에서 size n인 요청을 만족하는 가장 적절한 hole을 찾는 문제
First-fit
- size가 n 이상인 것 중 최초로 찾아지는 hole에 할당
Best-fit
- size가 n 이상인 것 중 가장 작은 hole을 찾아서 할당
- hole들의 리스트가 크기순으로 정렬되지 않은 경우 모든 hole의 리스트를 탐색해야 함
- 많은 수의 아주 작은 hole들이 생성됨
Worst-fit
- 가장 큰 hole에 할당
- 역시 모든 리스트를 탐색해야 함
- 상대적으로 아주 큰 hole들이 생성됨
실험을 통해 First-fit과 best-fit이 worst-fit보다 속도와 공간 이용률 측면에서 더 효과적인 것으로 알려짐
- first-fit: hole을 찾는 오버헤드가 적어서 좋음
- best-fit: 가장 적당한 hole을 찾아 넣기 때문에 미래지향적임
Compaction
- external fragmentation 문제를 해결하는 한 가지 방법
- 사용중인 메모리 영역을 한군데로 몰고 hole들을 다른 한 곳으로 몰아 큰 block을 만드는 것
- 매우 비용이 많이 드는 방법(디스크 조각 모음을 메모리에서 한다 생각하면 이해 Ok)
- 최소한의 메모리 이동으로 compaction하는 방법(매우 복잡)
- compaction은 프로세스의 주소가 실행 시간에 동적으로 재배치 가능한 경우에만 수행될 수 있다.
(run time binding)
정리
사실 현대의 컴퓨터 시스템에서 사용하는 방법은
이번 포스팅을 통해 알아본 연속 할당 방법이 아닌 불연속 할당 방법이다.
때문에 위에서 나왔던 문제들에 비해 비교적 자유로운 편
불연속할당 방법은 크게 Paging 기법과 Segmentation 기법으로 나눌 수 있다.
728x90
'CS (Computer Science)' 카테고리의 다른 글
[운영체제] 7. Memory Management (4) (0) | 2023.05.17 |
---|---|
[운영체제] 7. Memory Management (3) (0) | 2023.05.17 |
[운영체제] 7. Memory Management (1) (0) | 2023.05.10 |
[운영체제] 6. Deadlock (0) | 2023.05.09 |
[운영체제] 5. Process Synchronization (5) - 정리 + monitor (0) | 2023.05.08 |