대학원 일기

운영체제 8장 본문

School/Operation System

운영체제 8장

대학원생(노예) 2022. 6. 9. 20:48

1. 가상 메모리

가상 메모리 시스템: 물리 메모리의 크기와 상관없이 프로세스에 커다란 메모리 공간을 제공하는 기술

→ 운영체제가 어디에 있는지 신경쓰지 않아도 된다.

→ 물리 메모리의 크기가 어느 정도인지 신경쓰지 않아도 된다.

 

- 가상 메모리의 구성

  • 프로세스가 바라보는 메모리 영역 (가상 주소 공간)
  • 메모리 관리자가 바라보는 메모리 영역 (물리 메모리 + 저장 장치)

→ 가상 메모리에서 메모리 관리자(MMU)는 물리 메모리의 부족한 부분을 스왑 영역으로 보충

 

- 가상 메모리의 크기

  • 메모리의 전체 크기물리 메모리와 스왑 영역을 합한 크기

- 동적 주소 변환

  • 가상 주소를 실제 메모리의 물리 주소로 변환
  • 동적 주소 변환을 거치면 프로세스가 아무 제약 없이 사용자의 데이터를 물리 메모리에 배치할 수 있음

- 가상 메모리의 메모리 분할 방식

  • 가변 분할 방식을 이용한 세그멘테이션(가변, 외부 단편화)
  • 고정 분할 방식을 이용한 페이징 기법(고정, 내부 단편화)

→ 기본적으로 페이징 기법을 사용하지만 페이지 테이블 관리가 어려움

→ 가상 메모리 시스템은 두 기법의 단점을 보완한 "세그멘테이션-페이징 혼용 기법"을 주로 사용함

메모리 매핑 테이블

  • 가상 메모리 시스템에서 메모리 관리자가상 주소와 물리 주소를 일대일 매핑 테이블로 관리함

 

2. 페이징 기법

  • 고정 분할 방식을 이용한 가상 메모리 관리 기법
  • 물리 주소 공간을 같은 크기로 나누어 사용
  • 가상 주소는 프로세스 입장에서 바라본 메모리 공간으로 항상 0번지부터 시작
  • 페이지와 프레임

가상 주소는 페이지(Page Num)로 구분하고, 물리 주소는 프레임(Frame Num)으로 구분함

  • 가상 주소의 분할된 각 영역을 페이지라고 하며, 번호를 매겨 관리
  • 물리 메모리의 각 영역은 가상 주소의 페이지와 구분하기 위해 프레임이라고 함(프레임도 페이지처럼 번호를 매김)
  • 페이지와 프레임에 대한 관계(연결, 매핑) 정보는 페이지 테이블에 담겨 있음
  • 페이지 테이블에 invalid해당 페이지가 스왑 영역에 있다는 의미

  1. 가상 메모리에는 페이지 번호가 각각 저장됨
  2. 그 주소의 페이지들은 사용될 물리 주소에 들어감
  3. 이를 찾기 위해 페이지 테이블이 존재
  4. 페이지 테이블은 페이지 번호를 구분하고, 각 자신이 어느 프레임에 저장되어 있는지 번호가 저장

페이징 기법 주소 변환 과정

- VA(Virtual Address) = <Page Num, Distance> → VA = <P, D>

- PA(Physical Address) - <Frame Num, Distance> → PA = <F, D>

- 프로세스가 30번지의 내용을 읽으려고 할 때 주소 변환 과정

  1. 가상 주소 30번지가 어느 페이지에 있는지 찾음(30번지는 페이지 3의 0번째 위치에 있음: VA = <3, 0>)
  2. 페이지 테이블의 페이지 3으로 가서 해당 페이지가 프레임 1에 있다는 것을 알아냄
  3. 최종적으로 물리 메모리 프레임 1의 0번째 위치에 접근(이 주소가 가상 주소 30번지의 물리 주소)

- 프로세스가 가상주소 18번지에 값을 저장하려고 할 때 주소 변환 과정

  1. 가상 주소 18번지가 어느 페이지에 있는지 찾음(18번지는 페이지 1의 8번째 위치에 있음. VA = <1, 8>)
  2. 페이지 테이블의 페이지1로 가서 해당 페이지가 프레임 3에 있다는 것을 알아냄
  3. 프로세스가 저장하려는 값을 프레임 3의 8번 위치에 저장(d 는 동일)

- 정형화된 주소 변환

  • 페이징 기법에서는 가상 주소를 VA = <P, D>로 표현
  • 페이징 기법에서의 주소 변환은 가상 주소 VA를 PA로 변환하는 것
  • 여기서 distance는 항상 같음(VA와 PA의 distance 관계)

(가상 주소 = page num * page 크기 + distance)

(물리 주소 = frame 번호 * frame 크기 + distance)

 

- 페이지의 크기가 다양할 경우 가상 주소를 <P, D>로 변환하는 공식

  • P = (가상 주소 / 한 페이지의 크기)의 몫
  • D = (가상 주소 / 한 페이지의 크기)의 나머지

한 페이지의 크기10 Byte인 가상 메모리 시스템에서 가상 주소 32번지 

  • P = 3
  • D = 2
  • ∴ PA = <3, 2>

한 페이지의 크기512 Byte인 가상 메모리 시스템에서 가상 주소 2049번지

  • P = 4
  • D = 1
  • ∴ PA = <4, 1>

한 페이지의 크기 512 Byte인 가상 메모리 시스템에서 가상 주소 1224번지

  • P = 2
  • D = 200
  • ∴ PA = <2, 200>

- 16 bit CPU의 컴퓨터에서 한 페이지의 크기가 $2^{10}$ Byte일 때 페이징 시스템

  • 한 프로세스가 사용할 수 있는 가상 메모리의 크기는 $2^{16}$(65536)Byte
  • 사용자는 0번지부터 65535($2^{16} - 1$)번지까지 가상 주소 공간을 사용 가능
  • 가상 주소로 사용할 수 있는 16 bit 중 6 bit는 페이지 번호로, 10 bit는 페이지의 처음 위치에서 해당 주소까지의 거리

  • P → Page의 테이블 크기(= 페이지 테이블의 크기)
  • D → 한 페이지의 크기(= 한 페이지의 크기, Distance)

 

  • 전체 페이지의 수$2^{6}$, 즉 64개이고, 페이지 0번부터 63까지 존재
  • 물리 주소도 가상 주소와 같이 1024 Byte로 나뉨. 프레임은 0부터 31까지만 있다고 가정
  • 페이지 테이블페이지 테이블 엔트리가 0 ~ 63으로 총 64개(페이지 테이블의 크기는 물리 주소의 크기가 아니라 프로세스의 크기에 비례)

- 프로세스가 980번지에 저장된 데이터를 요청했을 때 동적 주소 변환

  • 가상 주소 980번지의 페이지 P, 거리 D를 구함(한 페이지의 크기 = 1024 Byte) VA = <0, 980>
  • 페이지 테이블로 가서 PTE(Page Table Entry)를 통해 페이지0이 프레임2에 저장되어 있다는 것을 확인
  • 물리 메모리의 프레임2 시작 지점으로부터 980번지 떨어진 곳에 접근하여 데이터를 가져옴(2048 + 980 = 3028번지)

→ 가상 주소 980번지는 물리 주소 3028번지에 저장되어 있음

 

- 다수의 프로세스가 있는 페이징 시스템

  • 프로세스마다 페이지 테이블이 존재. 프로세스의 수가 많아지면 페이지 테이블의 크기가 커지고, 이에 따라 프로세스가 실제로 사용할 수 있는 메모리 영역이 줄어듬
  • 페이지 테이블 크기를 적정하게 유지하는 것페이지 테이블 관리의 핵심

페이지 테이블은 메모리에 올라오기 때문에 프로세스가 증가하면 프로세스마다 있는 페이지 테이블도 증가하므로 메모리 영역이 줄어듬

 

- 물리 메모리 내 페이지 테이블의 구조

  • 페이지 테이블의 시작 주소페이지 테이블 기준 레지스터(PTBR, Page Table Base Register)에 보관

  • 물리 메모리의 크기가 작을 때는 프로세스만 스왑 영역으로 옮겨지는 것이 아니라 페이지 테이블의 일부도 스왑 영역으로 옮겨짐

 

페이지 테이블 매핑 방식

직접 매핑(이놈은 빨라 대신 메모리 효율이 안좋아)

  • 페이지 테이블 전체물리 메모리의 운영체제 영역에 존재하는 방식
  • 별다른 부가 작업없이 바로 주소 변환이 가능하기 때문에 직접 매핑이라고 부름

- 직접 매핑 방식의 구조

  • 페이지 테이블 전체가 물리 메모리에 저장되기 때문에 가상 주소 VA = <P, D>물리 주소 PA = <F, D>로 변환하려면 페이지 테이블의 P번째 위치(PTE P)에서 원하는 프레임 값을 얻을 수 있음
  • 페이지 테이블의 시작 주소는 페이지 테이블 기준 레지스터가 가지고 있으므로 물리 메모리 상 페이지 테이블의 P번째 주소가 시작 주소로부터 P번째 위치에 존재

연관 매핑 - 물리 메모리에서 페이지 테이블을 검색하고, 없으면 다시 스왑영역에서 검색하는 것(이놈은 느려 대신 메모리 효율이 좋아)

  • 페이지 테이블 전체를 스왑 영역에서 관리하는 방식
  • 물리 메모리의 여유 공간이 작을 때  사용하는 방식
  • 모든 페이지 테이블을 저장장치의 스왑 영역에 저장하고 그 중 일부만 물리 메모리에 가져옴
  • 일부 내용만 무작위로 가져오기 때문에 페이지 번호와 프레임 번호를 둘 다 표시
  • 주소 변환 시 물리 메모리 내의 페이지 테이블을 다 검색해야 하며 만약 원하는 프레임 번호를 얻지 못하면 스왑 영역에 있는 페이지 테이블 검색
  • 검색 실패 시 스왑 영역에서 다시 찾아야 하므로 시간을 낭비하게 됨

→ 데이터가 무작위로 올라옴

- 연관 매핑 방식의 구조

  • 메모리에 접근하기 위해 변환 색인 버퍼(TLB)를 찾음
  • TLB 히트: 원하는 페이지 번호가 변환 색인 버퍼(TLB)에 있는 경우로, 곧바로 물리 주소로 변환
  • TLB 미스: 원하는 페이지 번호가 변환 색인 버퍼(TLB)에 없는 경우로, 스왑 영역에 저장된 직접 매핑 테이블을 사용하여 프레임 번호로 변환
  • 전체 페이지 테이블을 물리 메모리에 보관하지 않아 메모리를 절약할 수 있음
  • TLB미스가 빈번하게 발생할 경우 시스템의 성능이 떨어지는 단점 존재
  • 변환 색인 버퍼는 페이지 테이블의 일부를 무작위로 가지고 있기 때문에 모든 변환 색인 버퍼를 검색한 후에야 원하는 페이지가 메모리에 없다는 것을 알 수 있음

 

집합-연관 매핑

  • 연관 매핑에서는 물리 메모리에 있는 데이터가 무작위로 올라오기 때문에 원하는 프레임 번호를 얻기 위해 모든 테이블을 검색해야 하는 문제 존재
  • 집합-연관 매핑은 디렉토리 매핑이라고도 부름
  • 집합-연관 매핑에서는 페이지 테이블을 일정한 집합으로 자르고 자른 덩어리 단위로 물리 메모리에 가져옴
  • 페이지 테이블을 n개씩 자르고 이를 관리하는 페이지 테이블을 하나 더 생성
  • 새로 생성한 집합 테이블에는 일정하게 자른 페이지 테이블이 물리 메모리에 있는지, 스왑 영역에 있는지에 대한 위치 정보를 표시
  • 연관 매핑과 비교했을 때 집합 테이블을 통해 원하는 페이지 테이블 엔트리가 스왑 영역에 있는지, 물리 메모리에 있는지 간단히 파악할 수 있음
  • 연관 매핑과 집합-연관 매핑은 캐시에서 사용하는 방식임

- 집합-연관 매핑의 방식

  • 페이지 테이블을 같은 크기의 여러 묶음으로 나누고, 각 묶음의 시작 주소를 가진 디렉토리 테이블새로 만들어 관리
  • 전체 페이지 테이블은 스왑 영역에 있으며, 일부 테이블은 묶음 단위로 메모리를 옮김
  • 해당 묶음이 현재 메모리에 있는지, 스왑 영역에 있는지를 표시하는 디렉터리 테이블을 새로 만듦
  • 디렉터리 테이블을 살펴보면 원하는 테이블 묶음이 어디에 있는지 알 수 있으므로 전체 테이블을 찾아보지 않아도 TLB 미스를 바로 알 수 있음

- 집합-연관 매핑 방식의 가상주소

  • 페이지 테이블이 일정 크기의 묶음으로 나뉘기 때문에 가상 주소를 VA = <P, D>가 아니라 VA = <P1, P2, D>로 바꾸어 표시
  • P1: 디렉터리 테이블에서의 위치정보
  • P2: 묶음 내에서의 위치 정보
  • 페이지 테이블을 10개씩 한 묶음으로 나눌 경우 0~9번 테이블은 0번 디렉터리에, 10~19번 테이블은 1번 디렉터리에 속함
  • 가상 주소 32번지: <0, 3, 2>로 변환
  • 가상 주소 127번지: <1, 2, 7>로 변환

- 집합-연관 매핑 방식의 구조

  • 디렉터리 페이지 테이블의 시작 주소페이지 테이블 기준 레지스터(PTBR)가 가지고 있음
  • 프로세스가 특정 주소를 요구하면 VA = <P1, P2, D>로 변환되고, P1을 이용하여 디렉터리 테이블에서 주소를 찾음
  • 만약 I(Invalied)라고 표시되어 있으면 TLB 미스가 발생한 것
  • 원하는 테이블이 물리 메모리에 있으면 묶음 테이블의 시작 주소가 명시되어 있음

역매핑

  • 물리 메모리의 프레임 번호를 기준으로 테이블을 구성
  • 물리 메모리의 프레임에 어떤 프로세스의 어떤 페이지가 올라와 있는지 표시
  • 프로세스 수와 상관없이 테이블이 하나만 존재하므로 테이블의 크기가 모두 작음
  • 프로세스가 가상 메모리에 접근할 때 프로세스 아이디와 페이지 번호를 모두 찾아야 하는 단점이 있음

역매핑 방식의 구조

  • 테이블이 <프레임 번호(Frame Num), 프로세스 아이디(PID), 페이지 번호(Page Num)>로 구성
  • 페이지 테이블의 행 수실제 프레임의 수와 같음
  • 프로세스의 수와 상관없이 항상 일정 크기의 페이지 테이블을 유지하여 테이블의 크기가 매우 작음
  • 주소 변환 시 메모리 관리자는 주소 변환을 해야 하는 프로세스의 아이디와 페이지 번호가 물리 메모리에 있는지 역매핑 테이블에서 검색
  • 현재 테이블에 원하는 데이터가 없으면 스왑 영역에서 가져옴
  • 페이지 테이블을 다 검사한 후에야 저장장치에 접근하기 때문에 검색 시간을 낭비하는 단점이 있음

 

3. 세그멘테이션

세그멘테이션 테이블

  • 세그먼트의 크기를 나타내는 limit와 물리 메모리 상의 시작 주소를 나타내는 address가 있음
  • 각 세그먼트가 자신에게 주어진 메모리 영역을 넘어가면 안되기 때문에 세그먼트의 크기 정보에는 크기를 뜻하는 size 대신 제한을 뜻하는 limit 사용
  • 크기가 100Byte인 프로세스 D(세그먼트3)가 스왑 영역에 있고, 세그멘테이션 테이블의 address에 I(Invalied)라고 표시되어 있음

- 프로세스 A의 32번지에 접근할 때 주소 변환 과정

  1. 가상 주소를 구함 VA = <0, 32>
  2. 세그멘테이션 테이블에서 세그먼트 0의 시작 주소를 알아낸 후 시작 주소 120에 거리 32를 더하여 물리주소 152번지를 구함
  3. 물리 주소 152번지에 접근하여 원하는 데이터를 읽거나 씀

 

4. 세그멘테이션-페이징 혼용기법

  • 메모리의 특정 번지에 저장된 데이터를 사용할 수 있는 권한
  • 읽기(read), 쓰기(write), 실행(execute), 추가(append) 권한이 있음

- 프로세스의 영역별 메모리 접근 권한

  • 코드 영역: 자기 자신을 수정하는 프로그램은 없기 때문에 읽기 및 실행 권한을 가짐
  • 데이터 영역: 데이터는 크게 읽거나 쓸 수 있는 데이터와 읽기만 가능한 데이터로 나눌 수 있음(일반적인 변수는 읽거나 쓸 수 있으므로 읽기 및 쓰기 권한을 가지고 상수로 선언한 변수는 읽기 권한만 가짐)

- 페이징 기법에서 메모리 접근 권한까지 고려한 페이지 테이블 예

  • 패이지마다 접근 권한이 다르기 때문에 페이지 테이블의 모든 행에는 메모리 접근 권한과 관련된 권한 비트 추가
  • 메모리 관리자는 주소 변환이 이루어질 때마다 페이지 테이블의 권한 비트를 이용하여 유용한 접근인지 아닌지 확인
  • 페이지 테이블에 권한 비트가 추가도면 페이지 테이블의 크기가 커지는 문제가 있음(이 문제를 완화하려면 반복되는 권한 비트를 줄여야 함) -> 페이지 테이블이 커지면 프로세스가 실제로 사용할 메모리 영역이 감소되기 때문
페이징 기법의 메모리 접근 권한 설정
페이징 테이블과 세그멘테이션 테이블의 혼합

- 세그멘테이션-페이징 혼용 기법에서 동적 주소 변환과정

  1. 사용자가 어떤 주소에 있는 데이터를 요청하면 해당 주소가 몇 번째 세그먼트의 몇 번째 페이지로부터 얼마나 떨어져 있는지 계산하여 가상 주소 VA = <S, P, D>를 구함
  2. 세그멘테이션 테이블의 해당 세그먼트 번호로 가서 자신의 영역을 벗어나는 불법 접근이 아닌지, 권한이 없는 페이지에 접근하는 것은 아닌지 등을 확인(만약 권한이 없는 페이지에 접근하거나 자신에게 주어진 메모리 영역을 벗어나면 세그멘테이션 오류(트랩)를 발생시켜 프로세스를 강제 종료하고, 그렇지 않으면 연결된 페이지 테이블로 감)
  3. 페이지 테이블에서 해당 페이지가 어느 프레임에 저장되었는지 찾음(만약 물리 메모리에 프레임이 있다면 메모리에 바로 접근하고, 없다면 스왑영역에 가서 해당 페이지를 물리 메모리로 가져옴)
  4. 물리 메모리에 있는 프레임의 처음 위치에서 D만큼 떨어진 곳에 접근하여 데이터를 읽거나 씀

 

'School > Operation System' 카테고리의 다른 글

프로세스와 스레드  (0) 2023.10.31
운영체제 연습문제(6, 7, 8, 9장)  (0) 2022.06.11
운영체제 7장  (0) 2022.06.09
운영체제 6장  (0) 2022.06.08
Chapter 05 프로세스 동기화  (0) 2022.04.16
Comments