사용 이유
- 메모리 단편화의 해결 방안 - 페이징과 세그멘테이션
메모리 단편화
- 프로그램 실행시 메모리에 프로그램을 적재하고 실행
- 주기억장치에 메모리가 할당되고 반납하고를 반복하면 메모리가 작은 조각처럼 공간이 나뉘게 됨
- 이에 따라 메모리가 충분한대도 메모리 할당이 불가능한 현상
메모리 단편화 종류
- 내부 단편화
- 고정된 파티션으로 분할할 때(고정 분할 기법) 사용자 영역(파티션)이 프로그램 할당 영역보다 커서 메모리가 남는 현상
- 예시 - 2MB를 할당해 줬지만 1MB밖에 사용하지 않는 경우
- 외부 단편화
- 동적 분할 기법에서 나타나는 현상 - 파티션이 동적으로 생성되며 자신의 크기와 같은 파티션에 적재
- 작은 메모리 영역을 반납했을때 더 큰 프로세스는 그 구간에 메모리 할당을 받지 못함
- 예시 - 4MB 할당되고 그 뒤에 8MB가 할당되었고 앞의 4MB가 반납되었을때 4MB 공간은 사용 가능하지만 5MB의 프로세스는 할당되지 못함. 이런 공간이 메모리 사이사이에 있어서 사용하지 못하는 현상
페이징
- 프로세스를 일정한 크기의 페이지로 분할해서 메모리에 적재하는 방법
- 장점
- 하나의 프로세스가 사용하는 메모리 공간이 연속되어 저장할 필요가 없음
- 남는 프레임에 페이지가 적절히 배치되어 외부 단편화가 발생하지 않음
- 단점
- 내부 단편화가 발생할 수 있음
- 페이지 단위를 작게하면 해결할 수 있지만 페이지 매핑 과정이 복잡해져 비효율
페이지 테이블
- 물리 메모리(고정 크기의 프레임) / 가상 메모리(고정 크기의 페이지)로 구성
- 프로세스의 각 페이지(작은 크기의 프로세스 조각)에 해당하는 프레임(페이지와 같은 크기의 메모리 조각) 위치 관리
- 모든 프로세스에는 하나의 페이지 테이블이 존재
- 메인 메모리에 적재되어 있는 페이지 번호와 해당 페이지(프로세스 조각)가 위치한 메모리 시작 주소가 있음
- 페이지 번호와 메모리 시작 주소가 맵핑
- 테이블을 통해 메인 메모리 어디에 적재되어 있는지 알 수 있음
- 논리 주소 <Page, offset>
- 메모리 번지 공간을 관리하는 테이블
유형
- Direct Mapping
- 페이지 테이블을 주기억장치(메모리)에 위치시킴
- 데이터 접근을 위헤 메모리에 접근 → 접근 시간 길어짐
- Associative Mapping
- 페이지 테이블을 버퍼에 위치시킴
- 접근이 빠름 / 비쌈
- Direct / Associative Mapping
- 페이지 테이블을 메모리와 버퍼에 분산시킴
- 버퍼에서 찾고 없으면 메모리에서 찾
세그먼테이션
- 가상 메모리를 서로 크기가 다른 논리적 단위로 분할한 것
- 프로세스를 물리적 단위인 페이지가 아닌 논리적 단위인 세그먼트로 분할해서 메모리에 적재하는 방식
- 논리적 내용을 기준으로 프로그램을 분할하기 때문에 크기가 같지 않음
- 장점
- 내부 단편화 해소
- 보호/ 공유 기능 수행 가능
- 프로그램의 중요한 부분과 그렇지 않은 곳을 분리하여 저장
- 같은 코드 영역은 한번에 저장
- 단점
- 외부 단편화 발생할 수 있음
세그먼테이션 테이블
- 페이지 테이블과 동작 방식 동일한 매핑 방식
- 논리 주소 앞에는 페이지 번호가 아닌 세그먼트 번호가 저장됨 - <Segment, offset>
- segment no / limit / base
- 주소값과 크기 맵핑
혼용기법
세그먼테이션 테이블에 권한 비트, 페이지번호, 페이지를 몇개 쓸지 저장
권한이 있는것만 맵핑시켜 좀 더 빠르게 효율적으로 관
가상메모리
- 실제 메모리와 상관없이 사용할 수 있도록 가상 메모리 주소 사용
- 프로세스의 일부분만 메모리에 로드하고 나머지는 보조 기억 장치에 할당
- 가상 주소를 주기억장치의 실제 주소와 맵핑하는 방법을 통해 구현
참고
'OS' 카테고리의 다른 글
CPU 스케줄링 (0) | 2023.03.16 |
---|---|
가상메모리 (0) | 2023.02.13 |
운영체제 / 커널 / 콘솔 / 터미널 / 쉘 (0) | 2022.12.23 |