프로세스는 메인 메모리에 올라와 있어야 사용이 가능하다.
Memory는 각각의 주소를 가진 큰 array로 구성 되어 있다.
Background
Memory Management Terms
- Frame
- main memory의 고정된 길이의 block (메인 메모리에서 사용하는 단위)
- Page
- disk와 같은 secondary memory에 있는 고정된 길이의 block
- page의 data = Frame
- Segment
- secondary memory에 있는 유동적인 길이의 block
Memory Management의 필수 조건
Relocation
process들은 processor의 이용성 향상을 위해 main memory에서 swapped in / out을 한다.
만약 swapped back이 되었을 때 같은 memory 위치에 있으면 매우 제한된다.
=> 이를 피하기 위해 relocation을 진행한다.
Protection
각각의 process는 의도치 않은 다른 process들의 간섭에 보호되어야 한다. 즉, process가 다른 process 영역에 침범하면 안된다.
이는 OS에서 해결하는 것보단 processor가 해결해야 한다.
protection은 2개의 register를 가지고 있다.
- Base register
- 작은 physical memory address를 가지고 있음 (process의 시작 주소)
- Limit(Bounds) register
- 범위의 size를 설정
만약 base register가 300040을 들고 있고, limit register가 120900이면 프로그램은 300040에서 420939를 접근할 수 있다.
Sharing
많은 process들이 같은 program을 실행하면,각각 복사하여 접근하는 것보다 복사한 프로그램을 접근하는 것이 좋다.
Logical Organization
main memory는 linear address 공간으로 구성되어 있다. 하지남 program은 non-linear 방식으로 되어있다.
Physical Organization
큰 규모의 system은 two-level (main memory, secondary memory) computer memory에 대한 우려가 있다.
main memory와 secondary memory의 정보 공유를 어떻게 할 것인가?
Memory Partitioning
memory partitioning은 옛날에 쓰고 요즘엔 쓰지 않는다.
memory management는 process들을 실행시키기 위해 main memory에 가져온다. 이는 다음과 같은 6가지 방법을 이용할 수 있다
- Fixed Partitioning
- Dynamic Partitioning
- Simple Paging
- Simple Segmentation
- Virtual Memory Paging
- Virtual Memory Segmentation
Fixed Partitioning
main memory는 많은 크기가 한정되어 있는 partition들로 나눌 수 있다.
Partition size들은 Equal-size partitions, Unequal-size partitions로 나눌 수 있다.
Equeal-size Fixed Partitions
- 구현하기 쉽다.
- overhead가 잘 일어나지 않는다.
- internal fragmentation(내부 단편화) 때문에 main memory의 사용이 효율적인지 않다.
- 내부 단편화: 8M가 있는데 process가 2M가 들어오면 나머지 6M는 못쓰게 되는 것
Unequal-size Fixed Partition
- equal-size fixed partition보다 좋아진다.
2가지 방식이 존재한다.
- 각 process들을 작은 partition에 할당한다.
- 각각 partition에는 scheduling queue가 필요하다.
- process는 partition에서 낭비되는 memory를 최소화 하는 방식으로 할당된다.
- 만약 16M는 안바쁠 수도 있는데, 2M는 항상 바쁘다면 이상적이지 않다. 이를 해결하기 위해 다음 할당 방식을 선택한다.
- 모든 process들을 위한 single queue가 존재한다.
- process가 들어갈 수 있는 가장 작은 partition을 선택한다.
하지만 이들은 여전히 내부단편화가 발생 가능하다. 이를 해결하기 위해 Dynamic(Variable) Partitioning을 사용한다.
Dynamic(Variable) Partitioning
partition은 동적 길이와 수로 나눌 수 있다.
내부 단편화가 일어나지 않지만, 외부 단편화가 일어난다.
External Fragmentation(외부 단편화)
남는 메모리를 모아보면 하나의 process가 들어갈 수 있을 만한 공간이 나온다.
위 그림은 16M가 남게 되는데 사용할 수 없다.
배치하는 알고리즘은 The first-fit algorithm, The next-fit algorithm, The best-fit algorithm, The worst-fit algorithm이 있다.
The first-fit algorithm
- memory의 시작 부분부터 탐색을 시작하고 첫 가능한 block에 넣는다.
- 단순하고 빠르게 사용할 수 있다.
The next-fit algorithm
- 마지막에 위치 시켰던 곳부터 탐색을 시작하고 다음으로 가능한 block에 배치를 시작한다.
- first-fit algorithm보다 안 좋은 성능을 낸다.
The best-fit algorithm
- size와 최대한 맞는 block을 선택한다.
The worst-fit algorithm
- 제일 큰 hole이 있는 곳에 할당한다. 이때 전체 list를 다 찾아봐야 한다.
- 제일 안 좋은 성능을 낸다.
위에 worst-fit은 next-fit과 같다.
Buddy System
fixed와 dynamic partitioning의 절충안 이는 사진으로 이해하자.
Paging
main memory는 같은 크기의 frame들로 나눠진다.
각각 process는 같은 크기의 page들로 나눠진다. 이때 크기는 frame과 같다.
모든 page를 사용 가능한 frame에 가져와 process가 load된다.
외부 단편화가 없지만 작은 내부 단편화가 마지막 page에 생성된다.
Page Table
각 page가 frame 위치를 보관해 놓는다.
processor가 logical address에서 physical address로 page table을 통해 변역한다.
Address Translation Scheme
CPU에서 생성한 주소는 다음과 같이 나눌 수 있다.
- Page number (p)
- page table의 index를 넣어놓는다.
- Page offset (d)
- base address와 결합하여 physical memory 주소를 정의한다.
Segmentation
각각 process는 많은 segment들로 나눌 수 있다.
길이는 다양하고, 최대 segment 길이가 있다.
logical address는 "A segment number", "An offset"로 구성되어 있다.
dynamic partitioning과 비슷하다.
주소 변화의 단계는 다음과 같다.
- logical address의 가장 왼쪽 n개의 bit를 추출한다.
- segment 번호를 segment table의 index로 사용하여 segment의 시작 physical address를 찾는다.
- m bit의 offset과 segment 길이를 비교해 offset이 segment의 길이보다 크거나 같으면 주소는 유효하지 않는다.
- physical address는 시작 physical address와 offset의 합이다.
0010000000100000
001011110000
-------------------------
0010001100010000
Swapping