-
가상메모리, 페이징(Paging), 세그먼테이션(Segmentation)CS 2023. 5. 13. 04:55
가상메모리란?
: 보조기억장치를 주기억장치처럼 주소지정 가능하게 만든 저장공간 할당체제.
가상 메모리의 특성
- 프로세스의 모든 메모리 참조는 논리 주소(logical address)이며, 이는 동적으로 물리 주소(Physical address)로 변환된다.
- 프로세스의 주소공간은 블록(페이지 or 세그먼트)으로 분할되어 그들 간의 순서나 인접관계와 무관하게 주기억장치상에 배치되어 수행될 수 있다.
- 프로세스의 주소공간을 구성하는 페이지 중 일부만 주기억장치 상에 적재한 채 수행할 수 있다.
- 가상메모리의 크기는 주기억장치의 크기가 아니라 컴퓨터시스템의 주소지정체제와 보조기억장치의 가용크기에 의해 제한된다.
* 메모리 접근 오류(memory access fault)란?
: 주기억장치에 적재되지 않은 블록이 참조될 때 발생하는 하드웨어 이벤트로, 발생 시 해당 프로세스는 블록 상태 진입하고 참조할 블록이 디스크로부터 적재될 때까지 머문 후 다시 준비상태가 된다.
페이징(Paging)이란?
: 페이지 단위로 잘라서 주메모리를 관리하는 방법으로, 가상주소의 페이지 번호를 이용하여 대응된 페이지테이블 항목을 찾고, 그로부터 해당 페이지가 적재된 프레임의 번호를 얻는다.
페이징의 특징
- 가상메모리는 고정크기 페이지로 분할되고, 물리메모리는 페이지 크기의 페이지프레임(혹은 프레임)들로 분할
- 프로세스가 특정 가상주소(어떤 페이지 내의 한 주소 / 가상 페이지 넘버 + Offset)를 참조할 경우 그에 대응된 물리주소(그 페이지가 적재된 프레임 상의 대응 주소 / 물리 페이지 넘버 + Offset)가 참조되도록 주소 사상/변환
- 일반적으로 프로세스별 페이지테이블을 통해 주소변환 하드웨어(MMU)가 활용할 주소사상정보를 제공
- 페이지테이블에 페이지 적재 여부가 표시되고, 적재되지 않은 페이지가 참조될 경우 하드웨어에 의해 페이지폴트(page fault) 예외 발생
* 가상주소공간의 크기가 커질수록 페이지테이블의 크기가 증가하고, 주기억장치에 보다 큰 적재 공간을 요구함
해결 1) 페이지테이블을 n- 단계 계층구조로 구성
2) 페이지테이블 자체를 가상메모리에 적재
3) 역페이지테이블(inverted page table) 이용
역페이지테이블(inverted page table)
: 페이지당 하나가 아니라 프레임(물리페이지)당 하나의 페이지테이블 항목 설정
- 2^n개의 페이지, 2^m개의 프레임 (n > m), 2^m개의 테이블 항목
- 페이지 번호에 대한 해시값(hash value)을 해당 페이지가 적재된 프레임 번호로 간주 (n- 비트 페이지 번호를 m- 비트 값으로 사상시키는 해시 함수 사용)
- 충돌(collision) 해결을 위해 연결 기법 사용 -> 전형적으로 한 두개의 테이블 항목 간에 체인 설정
페이징테이블 항목 구성
가상주소의 페이지 번호를 이용하여 대응된 페이지테이블 항목을 찾고, 그로부터 해당 페이지가 적재된 프레임의 번호를 얻음.
- 존재비트(Present bit): P bit라고도 하며, 적재여부를 나타냄
- 변경비트(Modify bit): M bit라고도 하며, 적재된 이후 내용 변경 여부를 나타냄
세그먼테이션(Segmentation)이란?
: 프로세스의 주소공간을 동적으로 설정되는 가변 크기의 블록들로 분할 (가변 크기의 블록이기 때문에 시작점과 길이 지정이 필요함)
세그먼테이션의 장점
- 점진적으로 커져가는 자료구조 처리 단순화 -> 필요에 따라 운영체제가 해당 세그먼트를 확장/축소할 수 있음
- 프로그램 전체에 대한 relink나 reloading없이 세그먼트 별로 독립적인 변경 혹은 재컴파일 가능
- 논리적 개체(유틸리티 코드, 테이터 테이블 등)를 세그먼트로 설정하여 공유, 보호 가능
세그먼트테이블(segment table) 항목 구성
- 존재비트(Present bit): P bit라고도 하며, 적재여부를 나타냄
- 변경비트(Modify bit): M bit라고도 하며, 적재된 이후 내용 변경 여부를 나타냄
'CS' 카테고리의 다른 글
동적 메모리 할당 / malloc, calloc, realloc, free (0) 2023.05.08