[운영체제] #22강

Junyoung Park·2022년 8월 5일
0

운영체제

목록 보기
22/25
post-thumbnail

Memory Management

Segmentation

  • 메모리 관리 방법: 메모리의 유저 뷰를 지원
  • 프로그램은 세그먼트의 집합
  • 세그먼트: 메인 프로그램, 프로듀서, 함수, 메소드, 오브젝트, 로컬 변수, 글로벌 변수, 일반 블록, 스택, 심볼 테이블, 배열 등
  • 논리적 주소를 세그먼트 번호 + 오프셋으로 분리 → 세그먼트 테이블을 통해 물리 주소를 알아낼 수 있음(base, limit 필요)
  • limit: 4KB 크기로 한정된 페이지와 달리 컴파일 시에 어떤 크기로 할당될지 모르기 때문에 별도의 자료 구조를 통해 전달해야 함
  • STBR(Segment-table base register): 메모리 내 세그먼트 테이블 위치
  • Protection: 각 엔트리가 세그먼트 테이블과 연관되어 있는 유저 스페이스에만 접근할 수 있도록 validation bit 체크. 추가적으로 읽기/쓰기 권한을 줌으로써 사용자에 따라서 조정 가능
  • E.g.) S를 통해 세그먼트 시작 주소 파악. Limit 범위까지만 체크 가능. 초과하지 않았다면 base에 넣어서 피지컬 메모리에 접근 가능(벗어났을 때에는 트랩을 통해 잘못된 접근으로 트랩 핸들러 호출).

Fragmentation

  • 세그먼트 사용 중 발생할 수 있는 이슈
  • External Fragmentation: 남아 있는 메모리 공간이 요청받은 메모리보다 크지만, 분리되어 있어서 요청 받은 메모리를 넣을 수 없을 때
  • Internal Fragmentation: 남아 있는 메모리 공간에 요청받은 메모리를 넣을 수 있지만 완전히 들어맞지는 않아서 낭비되는 조그마한 공간이 있는 경우. 이 공간을 다른 요청에 할당할 수 없기 때문에 낭비가 생길 때

최대한 메모리를 효율적으로 사용할 수 있도록 매핑하자!

  • 메모리가 있을 때에 1/3이 사용하기 부적합해진다는 법칙이 존재. 추가적인 방법으로 이를 줄일 수 있다!

Paging

  • 프로세스의 피지컬 주소 공간은 비연속적
  • 페이징 기법을 통해 External Fragmentation을 방지할 수 있음 - 메모리 블럭의 크기가 4KB 프레임 크기로 유지되기 때문
  • 물리 메모리 할당 시 N 페이지, N 프레임을 매핑, 추후 프로그램 실행 가능
  • 페이지 테이블을 통해 논리적 주소를 물리적 주소에 번역
  • Internal Fragmentation은 여전히 해결 X(피지컬 메모리에 프레임을 사용하더라도 비연속적으로 적재되어 있기 때문)

  • CPU의 주소는 페이지 번호 및 페이지 오프셋으로 분리된다. 이때 주어진 논리적 주소 크기는 2^m, 페이지 크기는 2^n이다.
  • E.g.) 논리적 주소 크기는 2^4 = 16바이트, 페이지 크기는 2^2 = 4바이트이다. 피지컬 메모리의 한 페이지는 4바이트이다.

Memory Protection

  • protection bit를 각 프레임에 할당 → 읽기 전용 / 읽기 쓰기 모두 가능 접근을 선택할 수 있음
  • 페이지 테이블의 각 엔트리에 붙은 vaild-invalid 비트: 프로세스의 논리적 주소 공간에 존재한다면 valid, 그렇지 않다면 invalid. 또는 PTLR을 통해 어디까지 접근할지 명시해서 확인
  • 위반 사항(violation)이 존재한다면 동기적 이벤트를 처리하는 트랩 핸들러 호출

Shared Page

  • 여러 개의 프로세스 상 코드 공유가 필요할 때
  • E.g.) lib.c 라이브러리를 통해 호출될 때 주소 공간을 효율적으로 사용하기 위해 동일한 코드의 중복 사용 X
  • E.g.) P1, P2, P3가 동일한 ed1, ed2라는 공유 페이지를 참조할 수 있기 때문에 메모리 효율적
  • 보안이 필요한 코드는 페이지 테이블 플래그 비트를 설정함으로써 따로 설정 가능

Intel 32, 64 bit Architectures

Intel IA-32 Architecture

  • segmentation, paging 모두 지원
  • 각 세그먼트 사이즈는 4GB(32비트 컴퓨터가 표현 가능한 가장 큰 길이): 프로세스 당 16K 세그먼트
  • 두 파티션으로 분리: (1). 처음 8K는 private, (2) 두 번째 8K는 shared

  • s가 세그먼트 번호, g가 상태 비트, p가 오프셋 담당 비트
  • 논리적 주소 → 연속 주소 → 물리적 주소 접근

  • 리니어 주소에서는 페이지 디렉토리 접근 → CR3 레지스터 접근(프로세스마다 서로 다른 페이지 디렉토리 가짐) → 페이지 테이블에서 페이지 테이블 번호 체크 → 오프셋을 통해 피지컬 메모리의 프레임 체크
  • 4MB 페이지를 사용하기 위해서는 22비트의 오프셋을 사용해야 함. 나머지 10비트만 페이지 디렉토리를 위한 용도로 사용.

Page Address Extension

  • 32비트 컴퓨터에서 4GB 바이트 이상의 메모리를 사용하는 프로그램을 사용할 수 있도록 지원하는 방법(4GB: 2^32비트로 표현 가능한 가장 큰 주소)
  • 3-레벨 멀티 페이지 사용하기 → 64비트 지원 가능(2비트의 페이지 디렉토리 포인터 테이블을 사용함으로써 32비트/32비트 총 64비트 표현 가능)

Intel x86-64

  • 64비트로 표현 가능한 메모리 공간은 매우 큼. 일반적으로 48비트 정도를 주소 공간 표현에 사용함
  • 페이지 테이블 레벨은 최대 4레벨까지 지원 가능

ARM architecture

  • 모바일 칩 시장에서 가장 우위를 점하는 칩
  • 4KB, 16KB, 64KB 페이지
  • 4레벨의 페이지 테이블을 제공
  • TLB 레벨이 2레벨: Micro, Main 두 종류 존재. 두 종류의 캐시를 통해 매우 효율적으로 페이지 테이블을 사용하기 위한 방법(Micro, Main, Page Table 순서의 Table walking). 페이지 테이블을 최대한 적게 사용하기 위해 캐시 히트 비율을 높이기 위함
profile
JUST DO IT

0개의 댓글