주소의 세 가지 종류
- Symbolic Address
- 프로그래머가 변수나 함수에 이름을 붙이는 것
- Logical Address
- 소스 코드를 컴파일하면 논리 주소로 바뀜.
- 프로세스마다 독립적으로 가지는 주소 공간
- 모두 0번지부터 시작
- 다른 프로세스의 주소공간을 침범하기 어려워짐.
- !!CPU가 보는 주소!!
- Physical Address
- 메모리에 실제 올라가는 위치
주소 바인딩
논리 주소를 물리 주소로 바꾸는 것이 주소 바인딩입니다. 주소 바인딩을 하는 방법에는 세 가지가 있습니다.
- Compie time binidng
- 컴파일시에 고정 값으로 물리 주소를 지정하는 것입니다.
- 메모리 상황을 고려하지 않기 때문에 상당히 비효율적이며, 메모리에 프로세스 하나올라가는 시스템에 적합합니다.
- Load time bining
- 컴파일된 실해파일이 실행될 때(메모리에 올라갈 때), 비어있는 공간을 찾아 주소를 정합니다.
- Execution time binding(Runtime Binding)
- 로드 타임에 한번 정해지고, 실행되는 중간에 절대 주소가 바뀌는 것입니다.
- 현대의 컴퓨터는 이 방법을 사용합니다.
- 매번 바뀌는 물리주소를 할당하고 찾아주는 하드웨어의 도움이 필요합니다.
- 위에서 말한 것처럼 CPU는 논리주소만 바라봅니다. 왜냐면 컴파일된 실해파일을 메모리에 올려서, 이 인스트럭션을 실행시키기 때문입니다. - 이때 CPU가 요청하는 논리주소를 절대주소로 바꿔주는 장치가 필요하고, 이것이 Memory-Management Unit(MMU)입니다.
Memory Management Unit(MMU)
두 개의 레지스터를 통해 논리주소를 물리주소로 변환해줍니다. Relocation register는 해당 프로세스가 실제 메모리에서 시작하는 절대주소 (ex. 10000)을 가지고 있어서, 논리주소(40)에서 이 값을 더하여 변환(10040)합니다. Limit register는 프로세스의 가상 메모리 공간의 크기를 가지고 있어서, 프로세스가 이 크기를 뛰어넘은 요청을 하면 interrupt를 걸어 OS에게 알립니다.
Memory 관련 용어
Dynamic Loading
프로세스 전체를 메모리에 올리지 않고, 필요한 부분만 필요할 때 올리는 것입니다. OS가 제공하는 라이브러리를 이용해서 프로그램으로 직접 구현합니다.
Overlays
동적 로딩처럼, 필요한 정보만 올리지만, 초창기에 프로세스하나도 전부 올릴 수 없을 정도의 메모리 크기를 가질 때, 사용했던 방법입니다.
Swapping
프로세스를 메모리에서 Backing Store로 쫒아내는 것입니다. 메모리가 가득 찾을 때, CPU 사용 우선순위가 낮은 프로세를 쫒아내는 등의 방법으로, 프로세스를 쫓아냅니다. 쫓아냈던 프로세스를 다시 불러올 때, 적절한 물리 주소를 할당해야하기 때문에 Runtime Binding이 지원되어야합니다.
Dynamic Linking
Linking이란 어떤 프로그램에서 라이브러리를 사용했을 때, 사용한 코드를 연결하는 방법입니다.
- Static Linking: 라이브러리를 애초에 실행 파일 코드에 포함시키는 것입니다. 공간 활용이 비효율적입니다.
- Dyamic Linking: 직접 포함시키지 않고, 라이브러리를 가리킵니다. 라이브러리 호출 부분에 라이브러리 루틴의 위치를 찾기 위한 stub이라는 작은 코드를 둡니다.
물리주소를 할당하는 방법
Contiguous allocation
각 프로세스를 물리공간에서 연속적으로 할당하는 방법입니다.
- 고정분할 방식
물리 주소를 미리 몇 개의 공간으로 구분해 두고, 프로세스가 실행될 때, 프로세스와 크기가 맞는 구분된 공간에 올리는 방법입니다.
메모리사용이 비효율적입니다. - 가변분할 방식
프로그램이 실행될 때마다, 차곡차곡 쌓는 것입니다. 처음에는 효율적으로 쌓이지만, 어떤 프로세스가 종료된 후에는 다음 프로세스가 사용할 수 없는 공간이 생길 수 있습니다. 이때 이 빈 공간을 조각이라고 합니다.
조각
- 외부 조각: 프로그램이 올라갈 수 있지만, 비어있는 공간. 가변분할 방식에서는 외부조각이 발생할 수 있습니다.
- 내부 조각: 프로세스에게 할당되었지만, 사용되지 않는 공간
- hole: 메모리를 할당된 공간과 그렇지 않는 공간(hole)로 나눠 부르기도 합니다.
가변분할 방식에서 주소 할당 방법
- First-fit : 처음으로 찾는 프로세스가 들어갈 수 있는 공간을 할당하는 방법.
- Best-fit : 모든 공간을 살펴 본 후, 프로세스가 들어갈 수 있는 공간 중 가장 작은 공간에 할당하는 방법.
- Worst-fit : 모든 공간을 살펴 본 후, 프로세스가 들어갈 수 있는 공간 중 가장 큰 공간에 할당하는 방법.(큰 hole이 생김으로, 나중에 큰 프로세스가 들어갈 확률이 올라간다는 의도)
- 위의 방법중 First-fit과 Best-Fit이 Worst-fit에 비해, 더 속도도 빠르고 공간도 효율적으로 쓴다는 것이 증명됐습니다.
Compaction
Hole을 한 곳으로 모으는 방법입니다. 매우 비용이 많이 들고, 최소한의 이동으로 큰 공간을 만들어내야하기 떄문에 복잡합니다. 그리고 런타임 바인딩이 지원되어야합니다.
참조
반효경 [운영체제] 19. Memory Management 2
설명이 없습니다.
core.ewha.ac.kr
'Computer Science > Operating System' 카테고리의 다른 글
[운영체제] Memory Management - Segmentation (0) | 2023.03.28 |
---|---|
[운영체제] Memory Management - Paging (0) | 2023.02.16 |
[운영체제] 데드락 (Deadlock) (0) | 2023.02.14 |
[운영체제] Synchonization의 문제점 (0) | 2023.02.13 |
[운영체제] 여러 프로세스가 공유 데이터에 동시에 접근하면 어떻게 되나? (0) | 2023.02.12 |