일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 메모리
- cs
- 리액트
- 앱 개발
- github
- 스레드
- 개발
- MVVM
- 액티비티
- 안드로이드 디자인 패턴
- Android
- 디자인패턴
- 앱
- db
- 앱개발
- 안드로이드 개발
- CS지식
- Kotlin
- 안드로이드
- reactnative
- Operating System
- 리액트네이티브
- 디자인 패턴
- OS
- React
- 프로세스
- 데이터베이스
- 코틀린
- 운영체제
- Database
- Today
- Total
Tech Log
[Operating System] 메모리 할당 본문
메모리에 프로그램을 할당할 때는 시작 메모리 위치, 메모리의 할당 크기를 기반으로 한다.
할당 방식은 연속 할당과 불연속 할당으로 나뉜다.
연속 할당
메모리에 연속적으로 공간을 할당하는 것이다.
프로세스를 순차적으로 공간에 할당한다.
연속 할당은 고정 분할 방식과 가변 분할 방식으로 나뉜다.
고정 분할 방식(fixed partition allocation)
메모리를 미리 나누어 관리하는 방식.
큰 프로세스가 메모리에 올라오면 여러 조각으로 나누어서 배치한다.
- 장점 : 메모리를 일정한 크기로 나누어 관리하므로 메모리 관리가 수월하다(가변 분할 방식의 메모리 통합같은 부가적인 작업을 할 필요가 없다)
- 단점 : 메모리가 미리 나뉘어 있으므로 융통성이 없다. 또한 내부 단편화가 발생한다.
*내부 단편화(internal fragmentation) : 메모리를 나눈 크기보다 프로그램이 작아서, 분할 메모리 내에 쓸모없는 홀이 생기는 현상
*홀(hole) : 할당할 수 있는 비어 있는 메모리 공간
가변 분할 방식(variable partition allocation)
매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나누어 사용한다.
- 장점 : 프로세스를 한 덩어리로 처리하여 하나의 프로세스를 연속된 공간에 배치
- 단점 : 내부 단편화는 발생하지 않고 외부 단편화가 발생할 수 있다.
*외부 단편화(external fragmentation) : 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상
가변 분할 방식에는 최초적합(first fit), 최적적합(best fit), 최악적합(worst fit)이 있다.
- 최초적합 : 위쪽이나 아래쪽부터 시작해서 홀을 찾으면 바로 할당. 빈 공간을 찾아다닐 필요 없다.
- 최적적합 : 프로세스의 크기 이상인 공간 중 가장 작은 홀에 할당. 빈 공간을 확인하는 부가적인 작업이 있지만, 딱 맞는 공간을 찾을 경우 단편화가 일어나지 않는다.
- 최악적합 : 프로세스의 크기와 가장 많이 차이가 나는 홀에 할당. 프로세스를 배치하고 남은 공간이 크기 때문에 쓸모가 있다. 빈 공간의 크기가 클 때는 효과적이지만 빈 공간의 크기가 점점 줄어들면 최적적합처럼 작은 조각을 만들어낸다.
외부 단편화를 해결하기 위해서는 비어 있는 공간을 하나로 합쳐야 하며(컴팩션, compaction 방법), 이 과정에서 다른 프로세스의 자리도 옮겨야 하므로 메모리 관리가 복잡할 수 있다.
불연속 할당
메모리를 연속적으로 할당하지 않는 방식.
현대 운영체제 쓰는 방법이다.
페이징, 세그멘테이션, 페이지드 세그멘테이션 기법이 있다.
페이징(paging)
동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당한다.
홀의 크기가 균일하지 않은 문제가 없어지지만 주소 변환이 복잡해진다.
논리적 주소를 물리적 주소로 변환하는 작업이 페이지 단위로 이루어져야 하기 때문이다.
세그멘테이션(segmentation)
페이지 단위가 아닌 의미 단위인 세그먼트(segment)로 나누는 방식.
프로세스 내의 코드와 데이터 등을 기반으로 나눌 수도 있으며 함수 단위로도 나눌 수 있다.
공유 보안 측면에서 좋지만 홀 크기가 균일하지 않은 문제가 발생된다.
페이지드 세그멘테이션(paged segmentation)
공유나 보안을 의미 단위의 세그먼트로 나누고,
물리적 메모리는 페이지로 나누는 것.
참조
- 주홍철, 면접을 위한 CS 전공지식 노트, 길벗(2022)
- 조성호, 쉽게 배우는 운영체제, 한빛아카데미(2018)
- 장장스
'Computer Science > Operating System' 카테고리의 다른 글
[Operating System] 프로세스(Process) (0) | 2023.02.10 |
---|---|
[Operating System] 페이지 교체 알고리즘 (0) | 2023.01.28 |
[Operating System] 가상 메모리 (2) | 2023.01.28 |
[Operating System] 캐시 (0) | 2023.01.28 |
[Operating System] 메모리 계층 (2) | 2023.01.28 |