49
Chapter 8. Main Memory 22-1 나나나

운영체제 Chapter 8

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: 운영체제 Chapter 8

Chapter 8. Main Memory

22-1 나영근

Page 2: 운영체제 Chapter 8

목적

메모리 하드웨어를 구성하는 다양한 방법 배우기 페이징과 세그먼테이션 기법을 포함한 다양한 메모리 관리 기법 배우기

Page 3: 운영체제 Chapter 8

Background

메모리는 각각 주소가 할당된 원드 , 바이트 들로 구성 CPU 는 PC(Program counter) 가 가리키는 다음 명령어를 가져온다

메모리에서 그 이후 피연산자가 필요할 경우 메모리에서 또 가져오고 결과를 저장한다 .

Page 4: 운영체제 Chapter 8

Background

Main Memory, Register 들은 CPU 가 직접 접근 가능한 저장장치 모든 명령어와 자료들을 수행하기 위해선 CPU 가 가져와야 한다 .

만약 보조기억장치나 다른 곳에 있다면 먼저 메모리로 옮긴 이후에 수행

레지스터는 일반적으로 CPU 1clock cycle 만에 접근 ( ex- load a)

메모리는 일반적으로 CPU 2clock cycle 이상 버스도 타야되고 주소에 맞는 위치도 추적해야됨 ..

CPU 가 준비가 되었는데 메모리에 접근하지 못해 자료가 없는 경우가 있음 ( 지연 )

캐시

Page 5: 운영체제 Chapter 8

Background

CPU 스케줄링의 결과로 CPU 사용률 증가 사용자에 대한 반응속도 증가

성능 향상을 위해선 메모리에 여러 프로세스를 유지 해야함

각 프로세스는 분리된 메모리 공간을 갖는다 Base register 와 limit register 는 프로세스 주소 공간을 결정하는 데 사용

Page 6: 운영체제 Chapter 8

Background

프로그램은 보조 기억장치에 이진 실행 파일로 저장 메모리 관리에 따라 프로세스는 디스크와 메모리 사이를 움직임 라운드 로빈을 기억해보세요

p1

p2

p3

디스크 내의 프로세스는 실행을 위해 Input Queue 에서 메모리로 가기 위해 대기

Page 7: 운영체제 Chapter 8

Address Binding

모든 프로그램에서는 메모리 주소가 필요 그 주소를 바인딩 하는 타이밍을 말하는거임 ..

Compile Time 바인딩 프로그램이 어디에 얹어질지 컴파일 시점에 안다면 절대 코드 생성 가능 절대적인 메모리 위치를 입력하는 것 보통 운영체제의 bootloader 들이 많이 그럼 ..

Load Time 바인딩 메모리 위치가 컴파일 시간에 알 수 없다면 재배치 코드를 생성 실제로 프로그램이 어디에 갈지 모르기 때문에 시작점을 기준으로 주소 바인딩 이후 메모리 load 시점에 처리해주면 됨

Excution time 바인딩 실행중에 메모리가 옮겨질 수 있다면 ..

하드웨어적 지원 필요

Page 8: 운영체제 Chapter 8

Address Binding

모든 프로그램에서는 메모리 주소가 필요 그 주소를 바인딩 하는 타이밍을 말하는거임 ..

Compile Time 바인딩 프로그램이 어디에 얹어질지 컴파일 시점에 안다면 절대 코드 생성 가능 절대적인 메모리 위치를 입력하는 것 보통 운영체제의 bootloader 들이 많이 그럼 ..

Load Time 바인딩 메모리 위치가 컴파일 시간에 알 수 없다면 재배치 코드를 생성 실제로 프로그램이 어디에 갈지 모르기 때문에 시작점을 기준으로 주소 바인딩 이후 메모리 load 시점에 처리해주면 됨

Excution time 바인딩 실행중에 메모리가 옮겨질 수 있다면 ..

하드웨어적 지원 필요

1 A(200)LOAD A

Page 9: 운영체제 Chapter 8

Address Binding

모든 프로그램에서는 메모리 주소가 필요 그 주소를 바인딩 하는 타이밍을 말하는거임 ..

Compile Time 바인딩 프로그램이 어디에 얹어질지 컴파일 시점에 안다면 절대 코드 생성 가능 절대적인 메모리 위치를 입력하는 것 보통 운영체제의 bootloader 들이 많이 그럼 ..

Load Time 바인딩 메모리 위치가 컴파일 시간에 알 수 없다면 재배치 코드를 생성 실제로 프로그램이 어디에 갈지 모르기 때문에 시작점을 기준으로 주소 바인딩 이후 메모리 load 시점에 처리해주면 됨

Excution time 바인딩 실행중에 메모리가 옮겨질 수 있다면 ..

하드웨어적 지원 필요

0123

200LOAD 1

Page 10: 운영체제 Chapter 8

Address Binding

모든 프로그램에서는 메모리 주소가 필요 그 주소를 바인딩 하는 타이밍을 말하는거임 ..

Compile Time 바인딩 프로그램이 어디에 얹어질지 컴파일 시점에 안다면 절대 코드 생성 가능 절대적인 메모리 위치를 입력하는 것 보통 운영체제의 bootloader 들이 많이 그럼 ..

Load Time 바인딩 메모리 위치가 컴파일 시간에 알 수 없다면 재배치 코드를 생성 실제로 프로그램이 어디에 갈지 모르기 때문에 시작점을 기준으로 주소 바인딩 이후 메모리 load 시점에 처리해주면 됨

Excution time 바인딩 실행중에 메모리가 옮겨질 수 있다면 ..

하드웨어적 지원 필요

0123

200LOAD 시작점 +1

Page 11: 운영체제 Chapter 8

Address Binding

모든 프로그램에서는 메모리 주소가 필요 그 주소를 바인딩 하는 타이밍을 말하는거임 ..

Compile Time 바인딩 프로그램이 어디에 얹어질지 컴파일 시점에 안다면 절대 코드 생성 가능 절대적인 메모리 위치를 입력하는 것 보통 운영체제의 bootloader 들이 많이 그럼 ..

Load Time 바인딩 메모리 위치가 컴파일 시간에 알 수 없다면 재배치 코드를 생성 실제로 프로그램이 어디에 갈지 모르기 때문에 시작점을 기준으로 주소 바인딩 이후 메모리 load 시점에 처리해주면 됨

Excution time 바인딩 실행중에 메모리가 옮겨질 수 있다면 ..

하드웨어적 지원 필요

14151617

200LOAD 시작점 +1

Page 12: 운영체제 Chapter 8

Logical Address, Physical Address Space

Memory Management 의 필수 요소

Logical Address CPU 가 생성하는 주소 가상 주소

Physical Address Memory 에서 쓰이는 실제 주소

이를 관리하기 위해 MMU 가 필요

Page 13: 운영체제 Chapter 8

Memory Management Unit(MMU)

Logical Address 를 Physical Address 로 Mapping 하는 하드웨어 보내는 순간 더함

프로그래머는 논리주소만 취급 실제 주소를 모른당 .

Page 14: 운영체제 Chapter 8

Dynamic Loading

대규모 코드 필요 시 유용 OS 의 기능이 필요 없다

머 지원해 줄수는 있다 메모리 공간이 적어짐

Stub 루틴이 있다는 걸 알려주는 작은 코드

특히 라이브러리 사용시 유용 Stdio 같은 거 있잔아요 ..

모든 라이브러리가 코드마다 박혀 있을 필요가 읍다 코드 효율성 업 ~

주 프로그램 메모리 적제

사용되는 루틴이 있을 때 메모리에 있는지 확인

없을 시 디스크에서 메모리 적재 후 실행

Page 15: 운영체제 Chapter 8

Swapping

임시적으로 프로세스를 메모리에서 저장장소로 옮기고 실행을 위해 다시 메모리로 적재하는 것

Dispatcher 가 처리 Swap out

메모리에서 저장 장소로 옮겨지는 것 Input Queue 로

Swap in 저장 장소에서 실행을 위해 메모리로 다시 적재 Ready Queue 로

Roll out, Rool in 우선순위 기반의 스케줄링 알고리즘을 위해 다양하게 사용되는

Swapping

낮은 우선순위 프로세스는 높은 우선순위 프로세스를 위해 Roll out 한다 .

Swapping Time 의 대부분은 전송시간 이는 당연히 스왑되는 메모리 양에 비례

Page 16: 운영체제 Chapter 8

Contiguous Allocation

Main Memory 는 두 부분으로 나뉜다 OS

보통 인터럽트 백터와 함께 하위 메모리에 위치 사용자 프로세스

상위 메모리

각 프로세서는 메모리의 하나의 연속적인 부분에 포함 Base register 방식으로 사용자 프로세스 끼리 서로 보호

Base register 는 가장 작은 물리 주소값 포함 Limit register 는 논리 주소의 크기 포함

Page 17: 운영체제 Chapter 8

Contiguous Allocation

Page 18: 운영체제 Chapter 8

Contiguous Allocation

Hole( 구멍 ) 유효한 메모리 블록 메모리에는 다양한 구멍이 있다

운영체제는 할당된 부분 (allocated partition)

자유 부분 (free partitions = hole)

을 보관 \

프로세스 도착 시 큰 구멍에 할당OS

process 5

process 8

process 2

OS

process 5

process 2

OS

process 5

process 2

OS

process 5

process 9

process 2

process 9

process 10

Page 19: 운영체제 Chapter 8

Contiguous Allocation

자유 구멍 리스트에서 프로세스 할당 방법 First-fit( 첫번째 만족 )

충분히 큰 첫 번째 구멍에 할당 Best-fit( 최적의 만족 )

충분히 큰 구멍 중 가장 작은 구멍에 할당 크기 순서대로 정렬되어 있지 않다면 전체 리스트를 찾아야함 가장 작은 남겨진 구멍을 만든다

Worst-fit( 최악의 만족 ) 가장 큰 구멍에 할당 이것두 전체 리스트 찾아야 함 남겨진 구멍의 크기가 가장 크다

First-fit 과 best-fit 이 속도와 저장소 사용률 측면에서 더 좋다 일반적으로 first-fit 이 속도가 가장 빠르다

Page 20: 운영체제 Chapter 8

Quiz

Page 21: 운영체제 Chapter 8

단편화 (Fragmentation)

External Fragmentation 전체 메모리 공간은 한 요청을 만족시키기에 충분하지만 연속적이지 않다 Compaction (압축 )

압축을 통해 External Fragmentation 을 줄인다 모든 자유 메모리 공간이 함께 모여 큰 블록으로 만들기 위해 하는 짓 재배치가 동적일 때만 가능하다 , 재배치가 실행 시간에 이루어지는 경우에만 가능

OS

process 5

process 8

process 2

OS

process 5

process 2

OS

process 5

process 2

OS

process 5

process 9

process 2

process 9

process 10

process 11

OS

process 5

process 2

process 10

OS

process 5

process 2

process 10

Page 22: 운영체제 Chapter 8

단편화 (Fragmentation)

Internal Fragmentation 할당된 메모리가 요청한 메모리보다 아주 약간 더 큰 경우에 생김 정수배의 메모리를 할당하는게 보통인데 이로 인해 남는 공간을 의미

OS

process 5

process 8

process 2

OS

process 5

process 2

128byte

126byte

2byte 의 internal fragmentation

Page 23: 운영체제 Chapter 8

Fragmentation

External Fragmentation 문제를 해결하는 방법으로는 3 가지가 있다 아까 말했던 압축

비용이 많이 든다 ..

페이징 세그먼테이션

Page 24: 운영체제 Chapter 8

Paging

연속적이지 않게 쪼개서 메모리에 적재하는 방식 페이징으로 인해 발생하는 이점

프로세스의 Physical Address 공간이 연속적이지 않아도 된다 프로세스는 메모리가 유효할 때는 언제든지 Physical Address 에 할당된다

Physical Memory 는 프레임 (2 의 지수 ) 으로 나눠진다 프레임은 일정 크기의 블록 (2 의 지수 byte)

Logical Address 는 페이지라고 불리는 같은 크기의 블록으로 나뉜다 모든 자유 프레임을 기록하고 관리 크기가 n 인 페이지 프로그램을 실행하기 위해 n개의 자유 프레임을 찾는다 Logical Address 를 Physical Address 로 변환하는 페이지 테이블 설정 External Fragmentation 은 발생하지 않지만 Internal Fragmentation 은 발생 각각의 블록마다 짜잘하게 생기기 때문 .

Page 25: 운영체제 Chapter 8

Paging

Paging 에서의 internal Fragmentation 예시

프로세스가 72766 byte 요구하고 페이지가 2048 의 크기일때 나누면 36개의 프레임 필요 근데 마지막 프레임은 꼴랑 1086 만 씀 때문에 발생

Page 26: 운영체제 Chapter 8

Paging

페이지 테이블 Physical Address 와 각 페이지의 기본 주소를 포함

페이지 테이블은 각 프로세스 별로 생성

CPU 에 의해 생성되는 Logical 는 아래로 구성 Page Number(p)

Physical Memory 내의 각 페이지의 기본 주소를 포함 페이지 테이블의 인덱스로 사용

Page offset(d) 메모리 유닛에 보내지는 물리 메모리 주소를 조합하기 위해 기본

주소와 조합된다

Logical Address 공간의 크기가 2^m 이고 페이지 크기가 2^n 이면

Page 27: 운영체제 Chapter 8

Paging

Page 28: 운영체제 Chapter 8

Paging 페이지 ( 프레임 ) 크기 : 4 bytes

물리 메모리 : 32 bytes 8 프레임 주소를 위한 5 bits

페이지 테이블 엔트리를 위한 3 bits

논리 주소 공간 : 16 bytes 4 페이지 주소를 위한 4 bits

논리 주소 4 bits 상위 2 bits: 페이지 번호 하위 2 bits: 페이지 오프셋

논리 주소 0 (0000) 은 페이지 0, 오프셋 0 → 5 x 4 + 0 = 20

논리 주소 11 (1011) 은 페이지 2, 오프셋 3 → 1 x 4 + 3 = 7

Page 29: 운영체제 Chapter 8

Paging

일반적으로 페이지 테이블 엔트리는 4 바이트 32-bit 엔트리는 2^32 개의 물리 페이지 프레임 중 하나를 가리킬 수 있음 한 프레임의 크기는 일반적으로 4(2^12)KB

4byte 페이지 테이블 엔트리를 가진 시스템은 물리메모리의 2^44 bytes = 16TV를 지정할 수 있다 .

Page 30: 운영체제 Chapter 8

Paging

새로운 프로세스가 생성되면 4 페이지 주소 공간 필요

이건 예시 ~

Page 31: 운영체제 Chapter 8

Page Table 구현

페이지 테이블은 Main Memory 에 저장 페이지 테이블 기본 레지스터 (Page-table base register: PTBR)

페이지 테이블 길이 레지스터 (Page-table length register: PRLR)

모든 데이터 / 명령 접근은 두번의 메모리 접근이 필요 페이지 테이블 접근 데이터 / 명령어 접근

이로 인한 오버헤드를 TLB(translation look-aside buffers) 를 통해 해결 특수한 빠른 검색이 가능한 하드웨어 캐시

Page 32: 운영체제 Chapter 8

Quiz

Page 33: 운영체제 Chapter 8

TLB(Translation look-aside buffer)

매우 빠른 연관 메모리 페이지 테이블을 위해 쓰이는 캐시

TLB 는 몇 개의 페이지 테이블 엔트리를 포함 CPU 에 의해 논리 주소가 생성되면 그 페이지 번호를 TLB 에서 확인한다 페이지 번호가 있을 경우 프레임 번호를 바로 알고 메모리에 접근 없을 경우 (TLB miss) Main memory 의 페이지 테이블로 접근 프레임 번호가 얻어지면 이를 통해 메모리 접근에 사용 페이지 번호와 프레임 번호를 TLB 에 추가 TLB 가 가득 차면 하나를 선택해 삭제

최근에 사용되지 않은 것 (LRU), 무작위 등

Page 34: 운영체제 Chapter 8

TLB 의 구조

Page 35: 운영체제 Chapter 8

유효 메모리 접근 시간 적중률 (Hit ratio: )

페이지 번호가 TLB 에서 발견될 확률 Ex) 80% 적중률 : 요청하는 페이지 번호의 80% 를 TLB 에서 찾을 수 있다

TLB 검색 시간 = time unit

메모리 접근 시간 = τ time unit

유효 접근 시간 (Effective Access Time : EAT) EAT = (τ + ) + (2τ + )(1 – )

= 80%, = 20 nanosecond, τ = 100 nanosecond

Page 36: 운영체제 Chapter 8

유효 메모리 접근 시간 적중률 (Hit ratio: )

페이지 번호가 TLB 에서 발견될 확률 Ex) 80% 적중률 : 요청하는 페이지 번호의 80% 를 TLB 에서 찾을 수 있다

TLB 검색 시간 = time unit

메모리 접근 시간 = τ time unit

유효 접근 시간 (Effective Access Time : EAT) EAT = (τ + ) + (2τ + )(1 – )

= 80%, = 20 nanosecond, τ = 100 nanosecond EAT = (100 + 20) x 0.8 + ( 2x100 + 20) x 0.2 = 140 nanosecond

Page 37: 운영체제 Chapter 8

메모리 보호

보호 비트 메모리 보호는 각 프레임의 연관된 보호 비트를 통해 구현 한 비트는 페이지가 read-only 인지 read-write 인지 정의 읽기 전용 페이지에 대한 쓰기 시도는 하드웨어 트랩 발생

유효 -무효 비트 페이지 테이블의 각 항목에 추가 유효 : 관련된 페이지가 프로세스의 논리 주소 공간에 존재하며 합법적인 페이지 무효 : 페이지가 프로세스의 논리 주소 공간에 속하지 않는다는 것

Page 38: 운영체제 Chapter 8

메모리 보호

다음과 같은 시스템을 가정해보자 14- 비트 주소 공간 ,

2KB 의 페이지 ( 프레임 ) 길이

프로세스는 6 x 2KB 의 주소 공간을 갖는다

페이지 테이블 길이 : 8 (=23)

페이지 0 부터 5까지의 주소는 페이지 테이블을 통해 정상적으로 매핑된다

페이지 6 과 7 에 대한 어떤 시도든지 유효 -무효 비트가 무효로 설정되고 , 트랩이 발생한다

Page 39: 운영체제 Chapter 8

세그멘테이션 : Segmentation

프로그램을 위한 메모리의 사용자 관점 프로그램은 조각들 (segments) 집합이다 .

세그먼트는 다음과 같은 논리 단위이다 주 프로그램 (main program),

절차 (procedure),

함수 (function),

방법 (method),

객체 (object),

지역 변수 (local variables), 전역 변수 (global variables),

공통 블록 (common block),

스택 (stack),

기호 테이블 (symbol table), 배열 (arrays)

세그멘테이션은 메모리의 사용자 관점을 지원하는 메모리 관리 방법 !

Page 40: 운영체제 Chapter 8

세그멘테이션 : Segmentation

프로그램은 세그먼트의 집합이다 주 프로그램 (main program)

서브루틴 (subroutine)

제곱근 (sqrt)

스택 (stack)

기호 테이블 (symbol table)

세그먼트 내의 요소들은 세그먼트의 시작점으로부터의 오프셋으로 구별 제곱근 (sqrt) 의 1 번째 문장 스택 내의 5 번째 요소 주소를 위한 < 세그먼트 이름 , 오프셋>

Page 41: 운영체제 Chapter 8

세그멘테이션 : Segmentation

논리 주소 공간은 세그먼트 집합이다 각 세그먼트는 이름과 길이를 갖는다 < 세그먼트 이름 , 오프셋> 은 주소를 위해 사용된다 세그멘테이션은 각 세그먼트를 물리 메모리에 매핑한다

1

4

2

3

사용자 공간 물리 메모리 공간

1

3

2

4

Page 42: 운영체제 Chapter 8

세그먼테이션 Example

일반적으로 , 사용자 프로그램은 컴파일되고 , 컴파일러는 자동적으로 입력 프로그램을 반영하는 세그먼트를 구축한다

C 컴파일러는 다음을 위해 분리된 세그먼트를 생성할 수 있다 : 코드 전역 변수들 힙 , 메모리가 할당된 폼 각 쓰레드에 의해 사용되는 스택 표준 C 라이브러리

라이브러리들은 분리된 세그먼트에 할당될 수 있다 로더는 이 세그먼트들을 취해서 세그먼트 번호를 할당한다

Page 43: 운영체제 Chapter 8

세그먼테이션 구조

각 세그먼트는 번호가 할당된다 : 세그먼트 번호 논리 주소는 두 개의 튜플로 구성된다 :

< 세그먼트 번호 , 오프셋 >

세그먼트 테이블 – 이차원 물리 주소에 매핑된다 ; 각 테이블 항목은 다음을 갖는다 :

기본 (base) – 세그먼트가 메모리에 위치하는 시작 물리 주소를 포함한다 한계 (limit) – 세그먼트 길이를 나타낸다

세그먼트 테이블 기본 레지스터 (Segment-table base register: STBR) 메모리에 있는 세그먼트 테이블을 가리킨다

세그먼트 테이블 길이 레지스터 (Segment-table length register: STLR) 프로그램에서 사용되는 세그먼트 개수를 가리킨다 ;

세그먼트 개수 s 가 STLR 보다 작아야 합법적이다

Page 44: 운영체제 Chapter 8

세그먼테이션 예제

5 세그먼트 0 부터 4까지 번호가 붙는다

세그먼트 테이블은 각 세그먼트를 위한 분리된 항목을 갖는다

기본 (Base)

한계 (Limit)

논리 주소 세그먼트 2 의 53

물리 주소 4300 + 53 = 4353

Page 45: 운영체제 Chapter 8

세그먼테이션 구조

Page 46: 운영체제 Chapter 8

세그먼테이션 구조

보호 . 세그먼트 테이블의 각 항목은 다음과 연관된다 : 유효 비트 = 0 불법적인 세그먼트 읽기 / 쓰기 / 실행 권한

보호 비트는 세그먼트와 연관된다 ; 코드 공유는 세그먼트 수준에서 일어난다

세그먼트는 길이가 다양하기 때문에 , 메모리 할당은 동적 저장소 할당 문제와 같다 최초 만족 (first-fit) / 최적의 만족 (best-fit)

조각 ( 내부 , 외부 )

Page 47: 운영체제 Chapter 8

세그먼테이션 구조

재배치 (Relocation) 세그먼트는 디스패처에 의해 스왑 아웃되고 스왑 인 될 수 있다 동적 세그먼트 테이블에 의해

공유 (Sharing) 세그먼트는 여러 프로세스에 의해 공유될 수 있다 공유 세그먼트 같은 세그먼트 번호

할당 (Allocation) 최초 만족 (first fit) / 최적 만족 (best fit)

외부 , 내부 조각

Page 48: 운영체제 Chapter 8

세그먼테이션 구조

두 개의 같은 편집 프로세스가 수행 중이다 0 번인 편집기 세그먼트는 공유될 수 있다

공유 세그먼트는 같은 세그먼트 번호 0 을 갖는다

편집기 세그먼트를 위한 하나의 물리 메모리 공간 데이터 세그먼트를 위한 다른 물리 메모리 공간

Page 49: 운영체제 Chapter 8

Quiz