메모리는 데이터의 특정 형식으로 구성된 집합으로 정의됩니다.
주로 명령을 저장하고 데이터를 처리하는 데 사용됩니다.
메모리는 많은 단어나 바이트의 배열 또는 그룹으로 구성되며, 각각 고유한 위치를 가집니다. 컴퓨터 시스템의 주요 목적은 프로그램을 실행하는 것입니다. 이를 위해서는 실행 중에 프로그램과 함께 접근하는 정보가 주 메모리에 있어야 합니다. CPU는 프로그램 카운터의 값에 따라 메모리에서 명령을 가져옵니다.
다중 프로그래밍의 수준과 메모리의 적절한 활용을 위해 메모리 관리가 중요합니다. 많은 메모리 관리 방법이 있으며, 각 알고리즘의 효과는 상황에 따라 다릅니다. 이러한 방법은 다양한 접근 방식을 반영합니다.
수십만 개에서 십억 개까지 크기가 다른 워드나 바이트로 이루어진 대규모 배열입니다.
CPU와 I/O 장치에서 공유하는 정보를 빠르게 저장하는 공간이며, 프로세서가 프로그램과 정보를 처리하는 데 필요한 장소입니다.
메인 메모리는 프로세서와 밀접한 관련이 있어서, 명령어와 정보를 빠르게 프로세서로 이동시킵니다. 랜덤 액세스 메모리(RAM)라고도 하는 이 메인 메모리는 전원이 차단되면 데이터가 손실됩니다.
다중 프로그래밍 컴퓨터에서 운영 체제는 메모리의 일부에 상주하며 나머지는 여러 프로세스에서 사용됩니다. 메모리를 서로 다른 프로세스에게 분할하는 작업을 메모리 관리라고 합니다. 메모리 관리는 프로세스 실행 도중 메인 메모리와 디스크 간의 작업을 관리하기 위한 운영 체제의 방법입니다. 메모리 관리의 주요 목적은 메모리의 효율적인 활용을 달성하는 것입니다.
논리 주소 공간: CPU가 만든 주소를 "논리 주소" 또는 가상 주소라고 합니다. 논리 주소 공간은 프로세스 크기로 정의됩니다. 논리 주소는 변경될 수 있습니다.
물리 주소 공간: 메모리에서 볼 수 있는 주소를 "물리 주소" 또는 실제 주소라고 합니다. 이러한 논리 주소에 해당하는 모든 물리 주소 집합을 물리 주소 공간이라고 합니다. 물리 주소는 MMU에 의해 계산됩니다. 가상 주소에서 물리 주소로의 매핑은 하드웨어 장치인 메모리 관리 장치(MMU)에 의해 수행됩니다. 물리 주소는 항상 일정합니다.
프로세스를 주 메모리에 로드하는 작업은 로더가 수행합니다. 로딩은 두 가지 유형으로 구분됩니다.
링크 작업을 위해 링커를 사용합니다. 링커는 하나 이상의 오브젝트 파일을 가져와 단일 실행 파일로 결합합니다.
프로세스 실행 시 메모리에 있어야 합니다.
Swapping은 프로세스를 보조 메모리로 임시적으로 이동시킴으로써, 더 많은 프로세스를 실행할 수 있게 해줍니다.
전송 시간은 교환된 메모리의 양에 비례하며 롤아웃/롤인 방식으로 높은 우선순위 작업을 지원합니다. 이는 높은 우선순위 작업이 완료되면, 낮은 우선순위 프로세스를 Swapping하여 높은 우선순위 프로세스를 로드하고 실행합니다. 그리고 나서 다시 낮은 우선순위 프로세스가 메모리에 Swapping되어 계속 실행할 수 있습니다.
메모리 관리에서 Swapping
운영 체제용 부분
사용자 프로그램용 두 번째 파트
fence register | |
---|---|
operating system | user program |
이 접근 방식에서는 운영 체제가 사용자 프로그램의 시작과 끝 위치를 추적.
운영 체제는 보통 가장 낮은 또는 가장 높은 주소로 로드.
인터럽트 벡터는 낮은 메모리에 로드되므로 낮은 메모리에 운영 체제를 로드하는 것이 합리적.
데이터와 코드 공유는 단일 프로세스 환경에서는 중요하지 않습니다.
울타리 레지스터를 사용하여 운영 체제를 사용자 프로그램으로부터 보호할 수 있습니다.
장점
간단한 관리 접근 방식입니다.
단점
다중 프로그래밍을 지원하지 않습니다.
메모리가 낭비됩니다.
고정 파티션 수와 함께 메모리 파티션 체계가 도입되어 다중 프로그래밍을 지원합니다. 이 체계는 연속 할당을 기반으로합니다.
각 파티션은 연속적인 메모리 블록입니다.
메모리는 고정된 파티션으로 분할됩니다.
각 파티션은 고정된 크기입니다.
파티션 메모리의 예는 다음과 같습니다:
그림과 같이 메모리는 5개의 영역으로 분할되며 영역은 시스템 업데이트를 위해 예약되며 나머지 네 파티션은 사용자 프로그램을 위한 것입니다.
운영 체제
p1
p2
p3
p4
고정 크기 파티션화 그림
파티션 테이블:
파티션이 정의되면 운영 체제는 메모리 파티션 상태를 추적합니다. 이는 파티션 테이블이라는 데이터 구조를 통해 수행됩니다.
일련번호 | 파티션 시작 주소 | 파티션 크기 | 상태 |
---|---|---|---|
1 | 0k | 200k | 할당됨 |
2 | 200k | 100k | 무료 |
3 | 300k | 150k | 무료 |
4 | 450k | 250k | 할당됨 |
샘플 파티션 테이블
논리적 대 물리적 주소
CPU에서 생성된 주소는 일반적으로 논리적 주소라고 합니다. 메모리 단위에서 볼 수 있는 주소를 물리적 주소라고 합니다.
하드웨어의 기본 레지스터를 사용하여 논리적 주소를 물리적 주소로 매핑할 수 있습니다. 이를 메모리 참조의 동적 재배치라고합니다.
연속 메모리 할당 :
주 메모리는 운영 체제와 클라이언트 프로세스 모두에게 필요합니다. 따라서 메모리 할당은 운영 체제에서 중요한 작업입니다.
메모리는 상주하는 운영 체제와 사용자 프로세스를 위한 두 파티션으로 나뉩니다.
여러 사용자 프로세스가 동시에 메모리에 상주해야 한다면 대기열에 있는 프로세스에 사용 가능한 메모리를 할당하는 방법을 고려해야 합니다. 이를 위해 인접 메모리 할당 방법을 사용하면 각 프로세스는 메모리의 단일 연속 세그먼트에 포함됩니다.
연속 메모리 할당
메모리 할당이 효율적이어야 적절한 메모리 활용이 가능합니다. 메모리를 고정 크기 파티션으로 나누어 각 파티션에 하나의 프로세스를 할당하는 것이 가장 간단한 방법 중 하나입니다. 이렇게 함으로써 다중 프로그래밍의 정도는 파티션 수에 따라 결정됩니다.
다중 파티션 할당
고정 파티션 할당
First fit
First fit에서는 할당 된 프로세스의 요구 사항을 충족시키는 첫 번째 빈 Hole을 선택.
위의 다이어그램에서 40KB 메모리 블록은 프로세스 A (크기 25KB)를 저장할 수있는 첫 번째 사용 가능한 빈 Hole입니다. 처음 두 블록은 충분한 메모리 공간이 없기 때문에 사용할 수 없습니다.
Best fit
Worst fit
Fragmentation은 프로세스가 메모리에서 실행 후에 로드 및 제거될 때 작은 빈 공간을 생성하는 것으로 정의됩니다. 이러한 공간들은 메모리 요구 사항을 충족시키지 않거나 결합되지 않기 때문에 새로운 프로세스에 할당될 수 없습니다. 다중 프로그래밍의 정도를 달성하기 위해서는 메모리의 낭비 또는 Fragmentation문제를 줄여야 합니다. 운영 체제에서는 두 가지 유형의 Fragmentation이 있습니다:
내부 Fragmentation
외부 Fragmentation
메모리 할당 시스템은 첫 번째 적합과 최적 적합 모두 외부 Fragmentation에 영향을 받습니다.
해결 방안 1.압축 기술을 사용
→ 압축 기술은 빈 메모리 공간을 결합하여 하나의 큰 블록으로 만들어 다른 프로세스에서 효과적으로 사용할 수 있도록 합니다.
해결 방안 2.논리적 주소 공간 활용
→ 외부 Fragmentation의 다른 해결책으로는 프로세스의 논리적 주소 공간이 연속적이지 않도록 허용하여 사용 가능한 물리적 메모리에 프로세스를 할당하는 것이 있습니다.
Paging은 메모리 관리 기법 중 하나로, 물리적 메모리의 연속 할당을 필요로하지 않습니다. 이를 통해 프로세스의 물리적 주소 공간이 비연속적일 수 있습니다.
가상 주소에서 물리적 주소로의 매핑은 하드웨어 장치인 메모리 관리 유닛(MMU)에 의해 수행되며, 이 매핑을 Paging 기법이라고 합니다.
CPU에서 생성 된 주소는 다음과 같이 나누어집니다.
물리적 주소는 다음과 같이 나누어집니다.
페이지 테이블을 구현할 때 전용 레지스터를 사용할 수 있지만, 페이지 테이블이 크다면 레지스터를 사용하는 것은 효과적이지 않습니다. 페이지 테이블에 항목이 많은 경우, TLB(Translation Look-aside Buffer)와 같은 작고 빠른 하드웨어 캐시를 사용할 수 있습니다.
Main memory access time = m
If page table are kept in main memory,
Effective access time = m(for page table) + m(for particular page in page table)