Chapter 8: Memory Management (메모리 관리)
- 프로세스는 독립적인 메모리 공간을 차지.
- 시스템은 프로세스가 자신의 영역 외에는 접근할 수 없도록 막아야 함.
- 실행 중인 프로그램에 의해 만들어지는 메모리 주소의 sequence에만 주목. 프로그램이 메모리 address를 generate하는 것은 관심 X
A base and a limit register
- CPU는 레지스터를 참조, 메모리 공간을 보호. 또한 레지스터의 정보는 앞에서 배웠듯이 PCB에 담김.
- 레지스터는 base와 limit으로 나뉨
-base: 프로세스가 메모리에서 사용가능한 가장 작은 physical address
-limit: 사용 가능한 주소 범위.
-> 프로세스가 사용 가능한 가장 큰 주소: base+limit (if) base:30004, limit=12090 -> 프로세스 접근 가능 주소 범위: 30004~42094
Address Binding
- 프로그램 실행을 위해서는 프로그램을 메모리에 로드해 프로세스로 만들어야 함. (프로그램은 일반적으로 디스크에 binary executable 파일로 저장됨)
- input queue: 디스크에서 메인 메모리로 로드되기를 대기하는 곳
- Compile time: 만약 compile time에 프로세스가 메모리의 어느 위치에 들어갈지 미리 아는 상황-> absolute code를 생성 가능.
- Load time: 프로세스가 메모리의 어느 위치에 들어갈지 미리 알 수 없음-> 컴파일러는 relocatable code를 만들어야 함. 이 경우 최종 바인딩은 로드에 필요한 시간만큼 지연될 수 있음.
- Execution time: 프로세스가 실행 중 메모리의 한 세그먼트에서 다른 세그먼트로 이동할 수 있음 -> 바인딩은 runtime까지 지연돼야 함.
Logical vs. Physical Address Space
- logical address: CPU가 생성. cpu는 보통 logical address로 접근.
- Physical address : 메모리에 의해 취급되는 주소. 메모리 유닛에 의해 보여짐.
- compile-time/ load-time binding은 동일한 logical/physical 주소를 갖음.
Swapping
- 메모리는 크기가 크지 않음. 따라서 프로세스를 임시로 디스크에 보냈다가 다시 메모리에 로드해야하는 상황이 생김
- 메모리 -> 디스크(ex.ssd)로 내보내는 상황 : swap out
- 디스크->메모리로 들어오는 상황 : swap in
- context switching 시간 소요.
ex)
- 최대 10개의 프로세스를 담을 수 있는 메모리가 있을 때, 새로운 프로세스가 들어오려고 함. -> 메모리에 담긴 내용(프로세스)을 하드디스크나 ssd 같은 secondary storage에 저장 (swap out)
- swap out 된 프로세스의 이벤트 요청이 왔을 때는, 프로세스를 다시 수행시켜줘야함. 디스크에 저장한 프로세스를 다시 메모리에 올려서 수행 (swap in)
+Vmm(Virtual memory management)와 차이-> Vmm은 프로세스보다 작은 단위인 paging 단위로 swapping을 실행한다.
Contiguous Allocation
- 메인 메모리는 2개의 영역으로 나뉘어 관리
-> low memory: 커널 담당 / high memory : 사용자 프로세스 담당.
- contiguous memory allocation 에서는 각 프로세스들이 연속적 메모리 공간을 차지. (base register, limit register는 프로세스가 자신의 범위를 넘지 못하도록 함)
- 프로세스를 메모리에 로드할 때는 메모리 상에 프로세스를 넣을 수 있는 공간을 찾음.
- 메모리를 분할하는 각 단위는 block/ 사용가능한 block을 hole이라 한다.
- First fit : 첫번째 hole 할당
- Best fit: hole 중 가장 작은 곳을 할당
- Worst fit: 가장 큰 hole 할당.
Fragmentation
- 메모리 공간을 사용하지 못하게 되는 것.
- external fragmentation: 30k, 60k, 20k, 60k 크기의 block이 존재. hole은 60k 두 곳 뿐. if 70k 프로세스가 들어와야 한다면, 실제 메모리 공간은 120k가 비어있지만 70k는 들어갈 수 없음
- internal fragmentation: 실제 프로세스 공간보다 큰 메모리를 할당하게 되는 경우.
->compaction (할당된 block을 한쪽으로 몲) 으로 해결 가능
Paging (중요)
- 프로세스를 여러 조각으로 나눔 (단순 크기를 기준으로)
- 비슷한 요소라도 메모리 공간에 연속적으로 할당되지는 않음.
- physical memory의 block을 frame, logical memory의 block을 page라 함.
- external fragmentation이 거의 생기지 않음.
- logical address->physical address로 변환 필요 (page table 필요)
Address Translation Scheme
- CPU에 의해 만들어진 주소는 page number(p)와 page offset(d)로 나뉨.
- page number(p): page table의 index. page table에 접근할 때 사용.
- page offset(d): physical address를 얻을 때 사용.
->physical address=page table's base address + page offset