1. Memory: 주소를 가지는 공간
가. Logical address(=virtual address)
1) 프로세스마다 독릭적으로 가지는 주소 공간
2) 각 프로세스마다 0번지부터 시작
3) CPU가 보는 주소는 Logical address
나. Physical address
1) 메모리에 실제 올라가는 위치
*주소 바인딩: 주소를 결정하는 것
2. 주소 바인딩
가. Compile time binding: 컴파일 시점에 정해진 논리적 공간에 같은 곳에 물리적 메모리가 결정하는 것
-> 요즘은 사용되지 않음 (여러 프로그램이 동시에 실행될 수 없어서)
-> absolute code(절대 코드)
나. Load time binding: 실행 할 때 메모리를 결정
-> relocatable code(재배치 가능 코드)
다. Run time binding: 실행 중에 이동하여 메모리를 결정
3. Memory Management Unit(MMU, 하드웨어임)
가. Logical address를 physical address로 맵핑함
1) relocation register(base register)와 limit register의 2개의 레지스터를 주소를 변환함
2) limit register를 벗어나는 범위면 trap을 걸게 함(본인의 메모리 주소 이외의 공간을 접근 못 하도록 함)
3) base register로 주소변환을 함
-> 사용자 프로그램은 logical address만 다룸
4. 용어
가. Dynamic Loading: 프로세스 전체를 메모리에 다 올리는 것이 아닌 해당 루팅이 불려질 때 메모리에 load하는 것
1) memory utilization의 향상
2) 가끔씩 사용되는 많은 양의 코드의 경우 유용
나. Overlays: 프로세스의 메모리 부분에 실제 필요한 정보만을 올림
-> 운영체제의 지원없이 사용자에 의해 구현
다. Swapping: 프로세스를 일시적으로 메모리에서 backing store로 쫓아내는 것
1) Swap in: backing store에서 메모리로
2) Swqp out: 메모리에서 backing store로
-> 원래는 프로그램 전체가 옮겨졌지만, 최근에는 paging 시스템에 의해 일부가 옮겨지는 것도 부르기도 함
라. Dynamic Linking: Linknig을 실행시간까지 미루는 기법
1) Static linking
가) 라이브러리가 프로그램의 실행 파일 코드에 포함됨
나) 실행 파일의 크기가 커짐
다) 동일한 라이브러리를 각각의 프로세스가 메모리에 올리므로 메모리 낭비
2) Dynamic linking
가) 라이브러리가 실행 시 연결(link)됨
나) 라이브러리가 호출 부분에 라이브러리 루틴의 위치를 찾기 위한 stub이라는 작은 코드르 둠
다) 라이브러리가 이미 메모리에 있으면 그 루틴의 주소로 가고 없으면 디스크에서 읽어옴
라) 운영체제의 도움이 필요
5. Allocation of Physical Memory
가. 메모리는 일반적으로 두 영역으로 나뉘어 사용
1) OS 상주 영역: interrupt vector와 함께 낮은 주소 영역 사용
2) 사용자 프로세스 영역: 높은 주소 영역 사용
나. 사용자 프로세스에 의한 할당법
1) 연속할당(contiguous allocation)
가) 고정 분할 방식: 사용자 프로그램 영역을 미리 나누어 둠
나) 가변 분할 방식: 사용자 프로그램 영역을 미리 나누어 두지 않음(먼저 끝나는 프로그램에 의해 외부공간이 생김)
* 외부 조각: 분할이 된 공간이 사용이 안 되는 공간
* 내부 조각: 할당이 된 공간이지만 사용이 안 되는 공간 (프로세스가 공간보다 작아서)
* hole: 가용 메모리 공간의 다양한 크기 공간들 (hole을 찾아 할당해줌
(1) First-fit: Size가 n이상인 것 중 최초로 찾아지는 hole에 할당
(2) Best-fit: Size가 n이상인 것 중 가장 작은 hole을 찾아서 할당
(3) Worst-fit: 가장 큰 hole에 할당 -> 어리석은 방법
* Compaction: external fragmentation 문제를 해결하는 한 가지 방식(hole들을 모아서 큰 block을 만듦, 비용이 많이 듦)
2) 비연속할당(Noncontiguous allocation): 하나의 프로세스가 메모리의 여러 영역에 분산
가) Paging 기법: 주소공간을 같은 크기(page)로 잘라서 관리하는 법(물리적 메모리는 page frame)
-> external fragmentation문제는 발생하지 않으나, internal fragmentation은 발생할 수도 있음(마지막 으로 자른 것은 다 안 찰 수도)
나) Segmentation 기법: 프로그램의 주소공간을 의미 있는 단위로 자르는 법(프로그램의 메모리를 각각 다른 물리 메모리에 올리는 법)
다) paging-segmentation 기법: 둘의 혼합
'Studying > Operating System' 카테고리의 다른 글
08. Memory Management (3/4) (0) | 2018.07.10 |
---|---|
08. Memory Management (2/4) (0) | 2018.07.09 |
07 Deadlocks (2/2) (0) | 2018.06.16 |
07. Deadlocks (1/2) (0) | 2018.06.14 |
06. Process Synchronization (5/5) (Concurrency Control) (0) | 2018.06.14 |