http://www.kocw.net/home/m/search/kemView.do?kemId=1046323
운영체제 강의를 듣고 정리한 내용입니다
Fixed partition allocation(고정 분할 방식)
- 물리적 메모리를 몇 개의 영구적 분할로 나눈다
- Internal fragmentation이 발생한다 (external fragmentation도 발생)
Variable partition allocation(가변 분할 방식)
- 분할의 크기, 개수가 동적으로 변한다
- 단점 : External fragmentation이 발생한다
**External fragmentation(외부 조각)
- 프로그램 크기보다 분할의 크기가 작은 경우
- 아무 프로그램에도 배정되지 않은 빈 곳인데도 프로그램이 올라갈 수 없는 작은 분할을 말한다
Internal fragmentation (내부 조각)
- 프로그램 크기보다 분할의 크기가 큰 경우
- 하나의 분할 내부에서 발생하는 사용되지 않는 메모리 조각
- 특정 프로그램에 배정되었지만 사용되지 않는 공간을 의미한다
Hole
- 가용 메모리 공간을 말한다
- 다양한 크기의 hole들이 메모리 여러 곳에 흩어져 있다
- 프로세스가 도착하면 수용가능한 hole을 할당한다
운영체제는 다음의 정보를 유지한다
- a) 할당 공간 b) 가용공간(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의 속도와 공간 이용률 측면에서 효과적인 것으로 알려져 있다(실험적인 결과)
compaction
- external fragmentation 문제를 해결하는 한 가지 방법이다
- 사용중인 메모리 영역을 한 군데로 몰고 hole들을 다른 한 곳으로 몰아 큰 block을 만드는 것이다
- 매우 비용이 많이 드는 방법이다
- 최소한의 메모리 이동으로 compaction하는 방법으로 매우 복잡한 방법이다
- Compaction은 프로세스의 주소가 실행 시간에 동적으로 재배치 가능한 경우에만 수행될 수 있다
- runtime binding이 지원되어야 사용 가능하다
Noncontiguous allocation 불연속 할당
- 하나의 프로세스가 메모리의 여러 영역에 분산되어 올라갈 수 있다
Paging
프로그램을 구성하는 주소 공간을 같은 크기의 페이지로 자르는 것이다
페이지 단위로 물리적인 메모리에 올린다
Segmentation
프로그램의 주소공간을 의미있는 단위로 자른다
각각의 segment를 필요시에 물리적인 메모리의 다른 위치에 올릴 수 있게 하는 것이다
크게 code data stack의 의미있는 공간으로 이루어짐
크기가 균일하지 않기 때문에 프로그램 크기가 달라서 발생하는 문제가 동일하게 발생한다
Pages Segmentation
주소공간을 알기위해서는 페이지별 주소를 알아야 한다
단순히 레지스터 2개만으로 주소변환을 하는 간단한 방법으로는 주소변경이 불가하다
Paging
- 프로세스의 가상 메모리(virtual memory)를 동일한 사이즈의 page 단위로 나눈다
- 페이지 테이블을 사용한다 (페이지 == 배열)
- 가상 메모리의 내용이 page 단위로 noncontiguous하게 저장된다
일부는 backing storage에, 일부는 physical memory에 저장된다
-> 인덱스를 통해서 접근이 가능한 자료구조이다
Basic Method
- physical memory를 동일한 크기의 frame으로 나눈다
- logical memory를 동일한 크기의 page로 나눈다(frame과 같은 크기이다)
- 모든 가용 frame들을 관리한다
- page table을 사용하여 논리적 주소를 물리적 주소로 변환한다
- External fragmentation이 발생하지 않지만, Internal fragmentation은 발생할 수 있다
Implementation of Page table
Page table은 메인 메모리에 상주한다
Page-table base register(PTBR)가 page table을 가리킨다
Page-table length register(PTLR)가 테이블 크기를 보관한다
모든 메모리 접근 연산에는 2번의 메모리 접근이 필요하다
-> page table 접근 1번, 실제 date/instruction 접근 1번
속도 향상을 위해
Associative register 혹은 translation look-aside buffer(TLB)라고 불리는 고속의 lookup hardware cache를 사용한다
-> TLB에 접근하는 것이 메인 메모리보다 접근속도가 빠르다
전체 항목에 대해 찾는것은 시간이 오래걸린다
-> 병렬 탐색이 가능한 parallel search 기능이 존재한다
**Associative Registers(TLB) : parallel search가 가능하다
TLB에는 page table 중 일부만 존재한다
Address translation
- page table 중 일부가 associative register에 보관되어 있다
- 만약 해당 page#가 associative register에 있는 경우 곧바로 frame#를 얻는다
- 그렇지 않은 경우 메인 메모리에 있는 page table로부터 frame#을 얻는다
- TLB는 문맥 교환때 flush(오래된 엔트리 삭제)를 시킨다
'CS지식 > 운영체제' 카테고리의 다른 글
TIL 정리_102(Memory Management) (0) | 2022.06.01 |
---|---|
TIL 정리_101(Memory Management) (0) | 2022.05.29 |
TIL 정리_99(Memory Management) (0) | 2022.05.26 |
TIL 정리_98(Deadlock&Memory) (0) | 2022.05.25 |
TIL 정리_97(Deadlock) (0) | 2022.05.24 |