CS/운영체제

Chapter 8: 가상 메모리

GaeunLee 2022. 5. 10. 15:18

8.1 가상메모리

프로그램을 작은 조각으로 나누어 적재한다.

사실은 제한적인 크기지만 큰 메모리가 있는 것처럼 여겨지게 한다.

가상메모리의 관리 : 한 번에 전송되는 단위(블록)

페이징 세그멘테이션 시스템
조각의 크기가 같음 (페이지) 조각의 크기가 다름 (세그먼트)

 

주소의 사상(mapping) : 가상 주소를 실 주소로 변환해주는 작업

  • 가상주소: 프로그램에서 참조하는 주소
  • 실제주소: 메모리상 주소

 

주소 사용

  • 주소의 지정 컴파일 시에 일어남: 프로그램이 실행될 때 참조하는 주소가 컴파일 시 지정
    • 참조 주소 = 실 주소
    • 프로그램은 항상 메모리의 지정된 곳으로 적재(고정분할, 절대로더)

  • 재배치: 메모리에서의 위치를 적재될 때마다 바꿈
    • 프로그램이 통째로 연속적으로 메모리에 적재
    • 프로그램의 첫 번째 줄을 0, 나머지는 첫 번째 줄과 거리(Offset or Distance)로 지정
    • 상대 주소: 떨어진 offset
    • 실 주소: 메모리 적재될 때 시작 주소(재배치 레지스터가 갖고 있음)
    • 주소 변환 : 재배치 레지스터 값 + 상대 주소

  • 가상메모리: 메모리에 비연속적으로 다른 프로그램의 조각과 섞여 적재
    • 메모리에 적재되어있는 프로그램 다중 프로그래밍의 정도에 포함
    • 가상주소: 참조하고자 하는 명령어나 변수가 어느 위치(offset)에 있는지 알려준다
    • ex) <3,5>는 3번째 조각 5번째 위치

 

8.2 페이징(paging)

페이지 프레임
같은 크기의 프로세스 조각, 주로 2의 승수배 크기 같은 크기의 메모리 조각, 일련번호

 

페이지 사상 테이블(map table)

가상주소를 실 주소로 변환하기 위해 프로세스당 하나의 페이지 테이블을 만드는 것

메모리의 커널 영역에 보관

 

페이지 테이블 기준 레지스터(page table origin register)

  • 실행 중인 프로세스의 페이지 테이블 시작 주소

엔트리 : 페이지당 하나씩 존재→ (k개의 페이지는 k개의 엔트리)

  • 존재(residence) 비트: 메모리에 적재되어 있는가 아닌가
    (메모리에 적재되어있지 않을 경우에 디스크에 있음)
    • 1: 적재되어있는 프레임의 번호
    • 0: 디스크의 주소를 나타내는 필드
      • 디스크로부터 페이지를 메모리에 적재해야 함
      • 존재 비트를 1로 바꾸고 프레임 번호 기입 후 mapping 진행

 

📌 페이징의 사상

가상 주소: p(page), d(위치)
실 주소 : frame number X page_size + d
               frame number = α(시작 주소) + p

(word_size == entry_size)

 

+) 보류 상태의 프로세스 테이블은 디스크, 메모리에 있는 테이블은 다중 프로그래밍의 정도에 포함

+) 두 번 메모리 접근( 페이지 테이블 접근, 실 주소 접근)의 시간을 줄이는 것이 가상메모리에 중요

 

TLB(Translation Lookaside Buffer)

  • key값으로 찾고자 하는 워드를 동시에 접근하는 연관 메모리(Associative Memory)
  • 검색이 빠르고 비싼 하드웨어
최근 빈번하게 검색된 엔트리들을 TLB에 넣으며, 페이지 번호 P값을 key로 검색

 

  • 엔트리가 있을 경우: 엔트리에 적혀있는 프레임 번호로 실 주소를 찾는다
  • 검색된 엔트리들의 페이지는 모두 메모리에 있음(존재비트 필요X)
  • 엔트리 검색 실패: page fault

엔트리의 검색 성공 확률 (hit ratio)

페이지의 보호와 공유

보호 : 엔트리에 보호 비트(protection bits)를 두어 허용되는 접근 설정

  • 1: 페이지 쓰기 허용
  • 0: Trap발생 (보호에 위반)
  • offset > page_size → 다른 페이지를 침범하므로 trap발생

 

공유: 재진입코드(Reentrant, Pure code)로 컴파일되어있다(실행 도중 변경되면 X)

  • 각 프로세스의 페이지 테이블의 엔트리에 같은 프레임 번호를 가지도록 함
  • mapping을 통해 같은 프레임에 접근 → 프레임 내용 공유

 

페이지

  • 코드페이지(명령어페이지) - 가상주소를 참조
    • 공유하려면 가상주소를 참조해야 함
  • 데이터페이지 - X

 

페이징에서 사상 테이블의 구성(저장용량을 아끼는 방법)

2단계 페이징

계층구조 2의 10승개의 엔트리

 

역 테이블 페이징

시스템 전체에 고정 크기의 페이지 테이블 하나만 둔다

역페이지 테이블은 메모리의 프레임 수만큼 엔트리를 가진다

 

페이징의 장점과 단점

  • 장점 : 고정 크기의 페이지로 메모리를 관리 → 구현이 쉽다
  • 단점 : 마지막 페이지의 내부 단편화(평균적으로 페이지 크기의 반)

 

8.3 세그멘테이션(Segmentation)

논리적인 단위별로 프로그램의 조각을 다른 크기로 자름

TLB 사용 못함

세그먼트 테이블 엔트리

  • 존재비트 - 실주소(메모리 주소 필드)
  • 세그먼트 길이 필드
  • 접근제어키

세그먼테이션의 사상(mapping)

  • 메모리 적재는 배치기법 홀 생길 수 있음

세그먼트의 보호와 공유

보호

공유

페이징 할 때와 같이 엔트리에서 같은 주소 값을 가지게 함

장점은 보호와 공유와 논리적 단위

 

8.4 페이징을 사용하는 세그멘테이션

프로그램을 세그먼트로 나누고, 각 세그먼트는 페이지로 나눈다.

세그먼트는 각각의 여러 페이지로 이루어짐

메모리는 페이지와 같은 크기의 프레임

세그먼트 테이블의 엔트리 개수 = 페이지 테이블

세그먼트 테이블의 각 엔트리는 나누어진 자신의 페이지들을 위한 페이지 테이블의 시작주소를 가리킴

세그먼테이션/페이징의 사상(mapping)

'CS > 운영체제' 카테고리의 다른 글

Chapter 11: 디스크와 스케줄링  (0) 2022.05.23
Chapter 9: 가상 메모리의 관리  (0) 2022.05.11
Chapter 7: 메모리 관리  (0) 2022.05.09
Chapter 6: 교착 상태(Dead Lock)  (0) 2022.05.05
Chapter 5: 병행 프로세스와 동기화  (0) 2022.05.03