가상메모리 및 페이징 & 세그멘테이션 기법

고장난 고양이·2022년 8월 5일
0

운영체제

목록 보기
18/21

📚 가상메모리

가상 메모리는 물리메모리(실제메모리)의 크기와 상관없이 메모리를 이용할 수 있도록 지원하는 기술이다. 가상메모리는 크기가 다른 물리 메모리에서 일관되게 프로세스를 실행할 수 있는 기술이다.

가상메모리 및 메모리관련 정리

https://velog.io/@narangke3/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B4%80%EB%A6%AC

📚 페이징 기법

  • 페이징 기법은 고정 분할 방식을 이용한 가상 메모리 관리 기법이다.

  • 물리 주소 공간을 같은 크기로 나누어 사용한다.

  • 페이지 size == 프레임 size

  • 페이지 테이블은 하나의 열로 표한된다. 모든 페이지 정보를 순서대로 가지고 있기에 위에서부터 차례대로 페이지 0,1,2... 와 같은 프레임 번호를 가지고 있어 추가열이 필요없다.

프레임(Frame): 물리 메모리를 사용하는 최소 크기 단위.
페이지(Page): 가상 메모리를 사용하는 최소 크기 단위.

페이징 기법의 주소변환

주소변환 과정

페이징 기법에서 페이지는 페이지 테이블(Page Table)이라는 자료구조 형태로 관리된다.

가상주소 -> 물리주소

  1. 찾고자하는 가상주소가 어느 페이지에있는지 찾는다.
  2. 페이지 테이블의 페이지 3으로 가서 해당 페이지가 프레임 1에 있는지를 알아낸다.
  3. 물리 메모리 프레임 1의 0번째위치에 접근한다.

가상주소 어느 위치에 값을 저장할 경우

  1. 페이지를 찾는다.
  2. 페이지 테이블의 해당하는 페이지로 가서 정확한 프레임위치를 알아낸다.
  3. 프로세스가 저장하려는 값을 해당 프레임의 정확한 위치에 저장한다.
  • 가상주소는 페이지 번호(P)와 변위(d)로 구성 -> 가상 주소 V = (p,d)
    p는 페이지 번호, d는 페이지 p의 시작 위치로부터의 변위.
  • 프레임 시작 주소(f) + 변위(d)를 통해 물리 주소를 계산하여 실제 물리 주소에 접근한다.

페이징 기법의 주소 변환과정

VA=<P,D> => PA=<F,D>

요구 페이징(Demand Paging) : 프로세스의 모든 데이터를 물리 메모리에 적재하지 않고, 필요한 시점에만 메모리에 적재한다. 필요하지 않은 페이지 프레임은 다시 저장매체에 저장한다(물리 메모리에서 내린다).

페이지 부재(Page Fault) : 가상 메모리 공간에는 존재하지만 실제 물리 메모리에는 없을 때 일어나는 인터럽트를 말한다. 페이지 폴트가 발생하면 운영체제에서 해당 페이지를 물리 메모리에 올린다.

페이징 테이블 방식

시스템 내에는 여러 개의 프로세스가 존재하고, 각 프로세는 하나의 페이지 테이블을 가지며, 페이지 테이블은 운영체제 영역에 있다. 따라서 페이지 테이블의 크기가 너무 커지면 프로세스가 실제로 사용할 수 있는 메모리 영역이 줄어든다.

사용할 수 있는 물리 메모리 영역이 적을 경우 페이지 테이블의 일부도 스왑 영역으로 옮겨질 수 있다. 때문에 다양한 페이지 테이블 매핑 방식이 등장한다.

1. 직접 매핑(Direct Mapping)

  • 페이지 테이블 전체가 물리 메모리의 운영체제 영역에 존재하는 방식이다.

  • 페이지 테이블을 말 그대로 직접 활용한다.

2. 연관 매핑(Associative Mapping)

  • 페이지 테이블 전체를 스왑 영역에 관리하는 방식이다.

  • 물리 메모리의 여유 공간이 적을 때 사용하는 방식으로, 모든 페이지 테이블을 저장장치의 스왑 영역에 저장하고 그 중 일부만 물리 메모리에 가지고 있는다.

  • 연관 매핑은 페이지 테이블의 일부만 무작위로 가지고 오기 때문에 페이지와 프레임 번호를 둘다 표시해준다.

  • 무작위로 저장된 일부분의 테이블을 변환 색인 버퍼(TLB) 또는 연관 레지스터라고 부른다.

  • 물리 메모리 내의 페이지 테이블을 다 검색해야하는 문제가 있다. 검색 실패 시 스왑 영역에서 다시 찾아야한다.

3. 집합-연관 매핑(Set-Associative Mapping)

  • 연관 매핑에서는 모든 TLB를 검색한 후에야 TLB 미스가 있다는 사실을 알게된다. 집합-연관 매핑은 이 문제를 개선한 방식이다.

  • 페이지 테이블을 같은 크기의 여러 묶음(집합)으로 나누고, 각 묶음의 시작 주소를 가진 디렉터리 테이블을 새로 만들어 관리한다.

  • 전체 페이지 테이블은 연관 매핑과 마친가지로 스왑 영역에 있으며, 일부 테이블 묶음 단위로 메모리에 옮긴다.

  • 원하는 페이지 테이블 엔트리가 스왑 영역에 있는지, 물리 메모리 영역에 있는지 간단히 파악할 수 있다.

4. 역 매핑(Invert Mapping)

  • 물리 메모리의 프레임 번호를 기준으로 테이블을 구성한다.
    다시 말해, 물리 메모리의 프레임에 어떤 프로세스의 어떤 페이지가 올라와 있는지를 표시한다.

  • 프로세스 수 상관 없이 테이블 하나만 존재하여 테이블 크기가 매우 작다.

  • 모든 페이지 테이블을 다 검색한 후에야, 해당 페이지가 스왑 영역에 있다는 것을 알게 되므로 속도가 느려 질 수 있다.

📚 세그멘테이션 기법

  • 가변 분할 방식 사용

  • 매핑 테이블인 세그멘테이션 테이블

  • 세그멘테이션 테이블에는 세그먼트의 크기를 나타내는 limit과 물리 메모리 상의 시작 주소를 나타내는 adress가있다.

  • 프로세스의 크기에 따라 메모리를 분할하기 때문에 매핑 테이블에 크기 정보를 포함한다.

세그먼테이션 기법의 주소변환


1. 먼저 가상주소를 구한다. s=0 D=32이다. -> VA=<0,32>

  • 세그먼테이션 기법에서는 가상 주소를 VA=(S,D)라고 표현한다.
    여기서 S는 세그먼테이션 번호, D는 세그먼트 시작 지점에서 해당 주소까지의 거리를 의미한다.

2.세그먼테이션 테이블에서 세그먼트 0의 시작 주소를 알아낸 후 시작 주소 120에 거리32를 더하여 물리주소 152번지를 구한다. 이때 메모리 관리자는 거리가 세그먼트의 크기보다 큰지점검한다.

  1. 만약 크면 메모리 오류를 출력, 프로세슬르 강제종료한다.

4, 물리주소에 접근하여 원하는 데이터를 읽거나 쓴다.

📚 단편화

단편화

  • 주기억장치 상에서 빈번하게 기억장소가 할당되고 반납됨에 따라 기억장소들이 조각들로 나누어지는 현상이다.

  • 메모리 공간이 조각조각 나뉘게 되어 실제로는 사용가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태가 발생하게 된다.

내부 단편화

  • 프로세스가 요청한 양보다 더 많은 메모리를 할당할 때 발생하며, 메모리 분할 자유 공간과 프로세스가 사용하는 공간의 크기 차이를 의미한다.

  • 주기억장치 내 사용자 영역 > 실행 프로그램

외부 단편화

  • 메모리 할당 및 해제 작업의 반복으로 작은 메모리가 중간 중간 존재할 수 있다. 이렇게 사용하지 않는 메모리가 존재해서 총 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황이다.

  • 주기억장치 내 사용자 영역 < 실행 프로그램

세그먼테이션 - 페이징 혼용기법

  • 위와 같이 페이징 기법에 세그먼테이션 테이블을 추가하고, 권한 비트와 같이 중복되는 데이터를 세그먼테이션 테이블로 옮겨오면 테이블의 크기를 줄일 수 있다.

  • 페이징 기법과 세그먼테이션 기법을 혼합하여 사용하면 순수 페이징 기법과 순수 세그먼테이션 기법의 장점만 취함으로써 메모리 관리를 효율적으로 할 수 있다.

  • 현재 대부분의 운영체제는 이 방식을 사용하고있다.

profile
개발새발X발일지

0개의 댓글