2021. 7. 29. 06:04ㆍOperating System
메모리 관리의 목적
여러 프로세스가 동시에 실행될 수 있도록 메모리 공간을 제공
시스템 사용자들을 위해 만족할 만한 수준의 성능을 제공
각 프로그램의 리소스를 보호
프로세스 사이에 있는 메모리 공간을 공유
프로그래머를 위해 되도록 메모리 공간의 어드레싱을 투명하게 할 것
Memory Management Unit(MMU)
Logical Address(논리 주소(가상 주소: Virtual Address))를 물리적인 주소(Physical Address)로 변경하는 하드웨어 장치
Logical Address: CPU에 의해서 생성, CPU에서 MMU로 보내는 주소
Physical Address: MMU에서 메모리로 보내는 주소
Dynamic Linking
Dynamic Linking: 실행 가능한 목적 파일을 만들 때 프로그램에서 사용하는 모든 라이브러리 모듈을 복사하지 않고 해당 모듈의 주소만을 가지고 있다가, 런타임에 실행 파일과 라이브러리가 메모리에 위치될 때 해당 모듈의 주소로 가서 필요한 것을 들고 오는 방식
Static Linking: 실행 가능한 목적 파일을 만들 때 프로그램에서 사용하는 모든 라이브러리 모듈을 복사하는 방식을 말하며 링커에 의해 이루어진다
동적연결에서 라이브러리를 부르는 곳마다 stub이 생성된다.
stub은 자기 자신을 루틴 주소와 루틴의 실행으로 대신한다.
D*L은 라이브러리에 유용하다. 시스템은 shared libraries라고 불린다.
Swapping
메모리에 적재되어 있지만 현재 사용하지 않는 프로세스를 관리
프로세스를 일시적으로 메모리에서 하드디스크(backing store)로 swap하고(swap-out), 다시 계속 실행하기 위해 메모리로 돌려보냄(swap-in)
MMU의 재배치 레지스터를 사용하기 떄문에 적재 위치는 메모리의 빈공간 어디에나 가능하다.
장점: 메모리 활용도 높고 효율적
단점: 프로세스 크기가 크면 backing store의 입출력 부담이 크다.
Fragmentation(단편화)
메모리 공간 중 일부가 사용 못하게 되는 부분
내부 단편화: 할당된 공간 - 요구된 공간 (이들 두 크기 사이에 남는 부분). 이미 할당된 공간은 요청 메모리 공간보다 크다.
외부 단편화: 유효 공간을 모두 합치면 충분한 공간이 되지만, 그것들이 너무 작은 조각으로 분산(메모리가 너무 많은 수의 작은 조각)
Compaction: hole들을 한곳으로 모으는 방식. 연속 메모리 할당 방식의 한계 해결
Dynamic Storage-Allocation
외부 단편화 문제: 메모리의 빈 공간은 많은데 사이즈가 작은 빈 공간이 많아 다른 프로세스를 적재할 수 없는 현상
Hole: available 메모리의 블록. 다양한 크기의 hole은 메모리 상에서 흩어져 있다.
First-fit: 지금 프로세스가 필요로 하는 크기보다 더 큰 hole을 만나면 할당
Best-fit: 프로세스가 필요로 하는 크기보다 큰것들 중에 가장 작은 hole을 할당.
Worst-fit: 가장 큰 hole을 할당
Segmentation
프로세스를 논리적 단위인 세그먼트(function, method, object, stack.....등등)를 서로다른 크기의 집합으로 나누는 기법
세그먼트들의 크기가 서로 다르기 때문에 메모리를 페이징 기법처럼 미리 분할해 둘 수 없다.
메모리에 적재될 때 빈 공간을 찾아 할당하는 사용자 관점의 가상 메모리 관리 기법.
각 세그먼트 별로 길이 값을 가지고 있어 내부 단편화를 해결할 수 있다.
- 논리적인 주소: <segment-number, offset>
segment-number: segment table의 색인(index)
offset: segment 안에서의 위치
- segment table: 2차원 physical address를 mapping한다
base: 해당 segment의 시작 physical 주소
limit: segment의 길이
Segment-table base register(STBR): 메모리 상의 segment table의 메모리
Segment-table length register(STLR): segment table의 크기. segment의 개수
protection: segment로 분리되어 있어서 보호에 유리
Paging
페이지가 연속적인 물리 메모리 공간에 들어가야하는 제약을 해결하기 위한 방법이다.
외부 단편화를 해결할 수 있다. 페이지 단위를 작게하면 내부 단편화(Internal fragmentation) 또한 해결가능
페이지에 공간을 할당한 후, 남는 공간이 적어지기 때문에 그 만큼 page mapping 과정이 증가할 수 있다.
physical memory를 frame이라는 고정된 크기의 블록으로 나눈다.
logical memory를 pages라는 고정된 크기의 블록으로 나눈다.
모든 free frame을 추적하여 크기 N인 pages를 실행시키기 위해, N free frame을 찾아야 한다.
logical address를 physical address로 변경하기 위해 page table을 설치한다. -> 1:1 mapping
page number: page table에 대한 인덱스, page table access할때 사용
page offset: page table 내에서의 변위
page table은 메인 메모리에 있다.
Page-table base register(PTBR): page table을 가리킨다.
Page-table length register(PTLR): page table의 크기를 지칭
이런 scheme는 2개의 메모리 accesses가 필요하다
이런 문제를 해결하기 위해(two memory access problem) translation look-aside buffers(TLBs) 이용
TLB에는 virtual page number(VPN)와 physical frame number(PFN) 정보가 쌍으로 존재하며, 이를 사용해 주소변환을 하도록 도와주는 하드웨어 cache.
이를 사용해 CPU는 paging 기법으로 주소변환을 할 때 TLB를 먼저 확인하여 TLB에 정보가 존재한다면 해당 정보로 빠르게 주소 변환 가능.
주소 변환을 위해 메모리에 접근하는 일이 없으므로 주소 변환이 빠르게 수행
출처
Operating System Concept 9th Edition
'Operating System' 카테고리의 다른 글
System Calls (0) | 2021.12.02 |
---|---|
Operating System Service (0) | 2021.12.02 |
프로세스(Process) & 스레드(Thread) (0) | 2021.11.22 |
프로세스 동기화(ProcessSynchornization) (0) | 2021.07.28 |
동기와 비동기 (0) | 2021.07.26 |