sw사관학교정글/OS 개념정리

[week09] KOCW 운영체제(반효경교수님) - Memory Management 3

D cron 2022. 1. 10. 20:34

Memory Management 3

Multilevel Paging and Performance

Address space가 더 커지면 다단계 페이지 테이블이 필요


4단계 페이지 테이블을 사용하는 경우

  • 주소변환하는데 4번 + 직접 메모리 접근 1번 = 총 5번의 메모리 access가 필요함
  • 메모리 접근 시간이 100ns, TLB 접근 시간이 20ns, TLB hit ratio가 20%인 경우
  • effective memory access time = 0.98 x 120+0.02 x 520 = 128ns
  • 결과적으로 주소 변환을 위해 걸리는 시간은 28ns이다.

Valid(v) / Invalid(i) Bit in a Page Table

Memory Protection

page table의 각 entry마다 아래의 bit을 둔다.

Protection bit

page에 대한 접근 권한(read/write/read-only)

다른 프로세스의 접근을 막는 개념이 아니다(애초에 각 프로세스마다 page table이 따로 있어서 불가능).

Valid-invalid bit

vaild는 해당 주소의 frame에 그 프로세스를 구성하는 유효한 내용이 있음을 뜻함(접근 허용)

invaild는 해당 주소의 frame에 유효한 내용이 없음을 뜻함(접근 불허)

  • 프로세스가 그 주소 부분을 사용하지 않는 경우
  • 해당 페이지가 메모리에 올라와 있지 않고 swap area에 있는 경우

Inverted Page Table

page table이 용량이 큰 이유

  • 모든 프로세스별로 각각의 logical address에 대응하는 모든 page에 대해 page table entry가 존재하기 때문
  • 대응하는 page가 메모리에 있든 없든간에 page table에는 entry로 존재하기 때문

Inverted page table


system 안에 page table이 딱 하나 존재(system-wide하게)

page frame 개수만큼 entry가 존재


page frame의 f번째 entry를 가면 논리적인 page 번호가 나오게(역방향) 되어있다.

  • physical address를 보고 logical address를 바꿀 수 있는 table
  • 첫 번째 entry에는 첫 번째 page frame에 들어가는 논리적인 page 번호가 들어있다.

따라서 page 번호가 주어지면 entry를 전부 검색해야지 주소변환이 가능하다.

page table을 위한 공간을 많이 줄이고자 사용한다(대신 시간의 overhead 존재).

추가로 어떤 프로세스가 사용하는 page인지도 저장하는 process ID도 존재해야 함

table 전체를 탐색해야 하는 단점을 극복하기 위해 associative register를 사용한다(expensive) → 병렬검색 가능

Shared Page

shared code

여러 프로그램에서 사용하는 공유 가능한 code는 physical memory에 하나만 올리자.

Re-entrant Code(=pure code, 재진입 가능 코드)

read-only(제약조건 1)로 하여 프로세스간에 하나의 code만 메모리에 올림(ex: text editors, compilers, window systems)

shared code는 모든 프로세스의 logical address space에서 동일한 위치에 있어야 함(제약조건 2)


그 이유는 무엇일까?


  • 코드안에 logical address가 적혀있다.
  • 그런데 동일한 physical address를 공유하는데, logical address가 통일되지 않으면 다른 코드가 실행될 수 있다.

private code and data

각 프로세스들은 독자적으로 메모리에 올림

private data는 logical address space의 아무 곳에 와도 무방

Segmentation

프로그램은 의미 단위인 여러개의 segment로 구성

  • 작게는 프로그램을 구성하는 함수 하나하나를 segment로 정의
  • 크게는 프로그램 전체를 하나의 segment로 정의 가능
  • 일반적으로는 code, data, stack 부분이 하나씩의 segment로 정의됨

Segment는 다음과 같은 logical unit들이다.

  • main(), function, global variables, stack, symbol table, arrays

Segmentation Architecture

Logical address는 다음의 두 가지로 구성됨

  • segment-number, offset

Segment table

각각의 table은 base와 limit을 가짐

  • base : starting physical address of the segment
  • limit: length of the segment (page와 다르게 길이가 다르기 때문에 설정해줘야 함)

Segment-table base register(STBR)

  • 물리적 메모리에서의 segment table의 위치

Segment-table length register(STLR)

  • 프로그램이 사용하는 segment의 수
  • segment number s is legal if s < STLR(몇 개의 segment로 구성되어있는지 그 개수)

Segmentation Architecture의 특징

Protection

각 segment 별로 protection bit 존재

각 entry마다

  • valid bit
  • read/write/execution 권한 bit

Sharing

shared segment

same segment number

segment는 의미 단위이기 때문에 공유(sharing)와 보안(protection)에 있어 paging보다 훨씬 효과적임 (의미단위로 일을 할 때 효과적)

Allocation

first fit / best fit

external fragmentation 발생

segment의 길이가 동일하지 않으므로 가변분할 방식에서와 동일한 문제점들이 발생