2024. 2. 12. 16:48ㆍCS/OS
Dynamic Loading
프로그램이 실행될 때 프로그램과 관련이 된 데이터가 모두 물리적 메모리에 존재해야 하는가?라는 질문에 대한 답이 될 수 있는 것이 다이내믹 로딩이다. 다이내믹 로딩은 프로그램이 실행을 하고 해당 프로세스에서 관련 기능을 호출하여 데이터를 로드할 때 그때서야 데이터를 로딩하는 것이다. 그렇기에 불필요한 데이터를 먼저 로딩하지 않기에 메모리의 공간을 좀 더 효율적으로 사용할 수 있다.
- 프로그램 시작
- 프로그램이 시작이 되면 디스크에서 메모리로 프로그램이 로드가 된다.
- 이때 다이나믹 로딩을 사용하기에 필수적이지 않는 데이터들은 로드가 되지 않는 상태로 메모리에 존재하게 된다.
- 함수 호출
- 사용자 또는 프로그램에 의해 특정 기능이 필요할 때, 해당 기능을 포함하는 모듈이나 라이브러리의 호출이 발생한다
- 동적 로드 검사
- 시스템은 해당 함수나 모듈이 이미 메모리에 로드되었는지를 확인한다
- 로드 필요 시 실행
- 만약 필요한 모듈이 메모리에 로드되지 않았다면, 시스템은 해당 모듈을 디스크에서 찾아 메모리로 로드한다
- 주소 바인딩
- 로드된 모듈이나 함수의 주소를 프로그램의 실행 코드에 바인딩하여, 호출이 이루어질 수 있도록 한다
- 실행 및 해제
- 필요한 기능이 실행된 후, 해당 모듈은 메모리에 계속 남아 있거나, 더 이상 필요하지 않을 경우 해제된다
DLL - Dynamic Linking Libraries
시스템 라이브러리는 유저의 프로그램이 실행될 때 링크(연결)가 된다. 이때 Link의 과정에는 두 개의 종류가 존재한다.
- static linking - 정적 연결
- 실행 파일이 생성될 때 모든 라이브러리 코드가 사용자의 프로그램에 포함이 되는 경우이다
- 라이브러리의 함수들이 최종 실행 파일 내에 직접 복사되어, 실행 시 라이브러리를 외부에서 참조할 필요가 없다
- 장점
- 실행 파일은 라이브러리의 변경에 영향을 받지 않는다
- 필요한 코드가 모두 포함되어 있기에 독립적으로 실행 가능하다
- 단점
- 실행 파일의 크기가 증가
- 라이브러리 업데이트 시 관련된 모든 응용 프로그램을 다시 컴파일해야 한다
- dynamic linking - 동적 연결
- 실행 파일이 작성될 때 모든 라이브러리 코드가 포함되지 않는 경우이다
- 프로그램이 실행이 될 때 필요한 라이브러리가 메모리에 로드되고, 프로그램이 해당 라이브러리를 참조하여 실행
- 장점
- 동일한 라이브러리를 여러 프로그램이 공유할 수 있게 해 메모리 사용의 효율성 증가
- 라이브러리를 업데이트할 때 해당 라이브러리를 사용하는 모든 프로그램에 자동으로 적용된다
- 단점
- 라이브러리의 변경 및 제거, 호환성 문제 발생 시 실행을 진행하면서 문제가 발생할 수 있다.
Memory Allocation
Contiguous Memory Allocation - 연속 메모리 할당
메모리를 가장 효율적으로 할당하기 위해, 시스템 메모리는 일반적으로 두 개로 나눠진다. 나눠지는 메모리는 각각 운영체제 부분과 사용자 프로세스 용으로 나눠진다. 여러 개의 사용자 프로세스가 동시에 메모리에 있을 수 있으며, 메모리에 있는 프로세스들을 어떻게 할당할지 결정해야 한다. 이때 각 프로세스는 메모리의 단일 섹션에 포함되며, 이 섹션은 다음 프로세스를 포함하는 섹션과 연속적으로 배치가 된다.
메모리의 할당 방법
가변 파티션 스킴(Variable-Partition Scheme)
- 메모리에 가변 크기 파티션을 할당하여 각 파티션에 정확히 하나의 프로세스를 할당하는 방법이다. 이때 홀(hole)은 사용 가능한 메모리 블록을 의미한다.
동적 저장소 할당 문제 - 사용 가능한 홀 목록에서 특정 크기의 요청을 만족시키는 방법에 대한 문제이다.
- FIrst Fit : 크기에 요구조건에 맞는 홀 중에 큰 첫 번째 홀에 할당한다
- Best Fit : 크기에 요구조건에 맞는 홀 중에 가장 작은 홀을 할당
- Worst Fit : 크기 요구조건을 상관하지 않고 가장 큰 홀에 할당한다.
연속 메모리 할당의 경우 메모리를 효율적으로 사용하고 프로세스 간의 메모리 할당을 용이하게 하기 위해 각 프로세스를 메모리에 연속적 세션에 배치하는 것을 목표로 한다. 해당 방식은 단순하고 직관적으로 메모리를 관리하는 방식이지만 외부 단편화와 같은 문제가 발생할 수 있다. 그렇기에 이러한 문제를 해결하기 위해 다양한 메모리 할당 기법이 개발되었다.
단편화
메모리 관리에서 중요한 문제이다. 메모리가 효율적으로 사용되지 않아 프로세스가 요구하는 메모리 공간을 할당할 수 없는 상황을 의미한다.
외부 단편화(External Fragmentation)
- 메모리가 여러 작은 홀들로 조각나 있어 총 메모리 공간은 충분하지만, 연속된 공간이 없어 프로세스 요구를 만족시키지 못하는 상황
내부 단편화(Internal Fragmentation)
- 프로세스에 할당된 메모리 블록이 실제 프로세스 사용량보다 클 때 발생
- 할당된 메모리 내부에 사용되지 않는 부분이 생기는 것이므로, 메모리 할당 단위에 의해 발생한다
'CS > OS' 카테고리의 다른 글
[OS] Operating System - 페이징과 스와핑 (0) | 2024.02.20 |
---|---|
[OS] Operating System - Main Memory (0) | 2024.02.11 |
[OS] Operating System - Synchronization Tools - Monitor (0) | 2024.02.01 |
[OS] Operating System - Synchronization Tools - mutex lock / semaphore (0) | 2024.01.31 |
[OS] Operating System - Synchronization Tools(1) (1) | 2024.01.21 |