주소 바인딩 (=주소 변환)

주소 바인딩 : 논리적 주소(가상 주소)를 physcial 메모리 주소로 매핑하는 작업

주소바인딩이 일어나는 시점에 따라 3가지로 분류 가능

 

1. 컴파일 타임 바인딩

ㄴ 물리적 메모리 고정 위치에 프로그램이 올라가는것

2. 로드 타임 바인딩

ㄴ 실행될 때 프로그램이 올라가는 위치가 결정됨

3. 실행 중 바인딩

ㄴ 실행될 때, 실행중 프로그램이 올라가는 위치가 결정되고 바뀔 수 있다.

 

용어 : dynamic loading과 dynamic linking

dynamic loading : OS가 프로그램 일부 필요한 부분만 메모리에 올리는 것은 운영체제가 지원 해주는 페이징 시스템

비슷한 말인데 dynamic loading은 프로그래머가 os 라이브러리를 사용해서 구현하는 개념

 

static linking

ㄴ 라이브러리가 프로그램의 실행 파일 코드에 포함되어 실행 파일의 크기가 커짐

ㄴ 동일한 라이브러리를 각각의 프로세스가 메모리에 올리므로 메모리 낭비

 

dynamic linking (윈도우 dll 파일) (shared library)

ㄴ 라이브러리가 실행시 연결(link)됨 

ㄴ 라이브러리 호출 부분에 라이브러리 루틴의 위치를 찾기 위한 stub이라는 작은 코드를 둠

ㄴ 라이브러리가 메모리에 이미 있으면 그 주소로 가고 없으면 디스크에서 읽어옴

ㄴ 운영체제의 도움이 필요함

 

물리적 메모리에 프로세스를 할당하는 방법

1. 연속 할당

ㄴ 고정분할, 가변분할 방식

ㄴ 운영체제는 메모리에 어떤 공간이 할당되어 사용하고 있는지, 가용 공간(hole)인지 정보를 유지해야 함

2. 불연속 할당

ㄴ paging, segmentation, paged segmentation

 

Paging

ㄴ process의 virtual memory를 동일한 사이즈의 page 단위로 나눔

ㄴ virtual memory의 내용이 page단위(물리적 메모리의 frame과 같은 단위)로 저장됨 

ㄴ 일부는 backing storage(swap area)에, 일부는 physical memory에 저장

ㄴ 페이지 테이블을 이용함

ㄴ 프로그램마다 페이지 테이블을 가질 수 있음

두개의 레지스터 사용

PTBR(page table base register) : 페이지 테이블의 주소

PTLR(page table length register) : 페이지 테이블의 크기

TLB

CPU와 page table(main memory) 사이에 있는 캐싱 역할을 하는 하드웨어 

빈번히 참조되는 entry 몇개에 대해서만 내용을 저장하고 있음

TLB 내용 전체를 탐색해야 하기 때문에 Parallel search가 가능한 Associative register를 사용

TLB 탐색했는데 없으면 page table 보면 됨

TLB는 context switch 때 flush

 

2단계 페이지 테이블(계층적 구조)

ㄴ page tabe 자체를 page로 구성

ㄴ 사용되지 않는 주소 공간에 대한 outer page table의 엔트리 값은 NULL

ㄴ 64-bit 명령어 기계에서는 적합하지 않음

ㄴ 2단계 페이지 테이블을 사용하지 않는 페이지에 대해서는 안쪽 테이블이 만들어지지 않음

Inverted page table

ㄴ 전체 시스템에서 페이지 테이블이 하나만 존재

ㄴ 물리적 메모리 페이지 프레임 개수만큼 페이지 테이블의 엔트리가 존재

ㄴ 하나의 페이지 프레임 엔트리는 PID와 가상 주소를 가짐

ㄴ 물리적 메모리에 연속적으로 저장된 테이블에서 PID와 가상주소가 일치하는 인덱스를 찾아 물리적 주소로 변환

ㄴ 페이지 테이블을 associative register로 병렬 탐색해야함 (비용 발생)

Memory Protection

페이지 접근 권한에 대한 bit

ㄴ read/write/read-only

ㄴ 프로그램의 code는 내용이 바뀌지 않아야 하므로 read-only

ㄴ 프로그램의 data는 읽기 쓰기 가능해야하므로 read/wirte

 

페이지 테이블의 valid-invalid bit

valid-bit

ㄴ 주소 변환이 가능한 경우

invalid-bit

ㄴ 프로세스가 그 페이지를 사용하지 않는 경우

ㄴ 해당 페이지가 메모리에 올라와 있지 않고 swap area에 있는 경우

ㄴ 주소 변환시 invalid bit이 set 되어 있으면 page fault가 발생

 

Shared pages

ㄴ 같은 프로그램을 여러개 돌리는 경우 프로세스들의 code 부분은 똑같기 때문에 하나만 메모리에 올리는 기법

ㄴ shared code는 모든 프로세스의 logical address space에서 동일한 위치에 있어야 함

Segmentation

ㄴ 프로그램을 의미 단위로 (크기는 균일하지 않음) 잘라서 물리 메모리에 올린다.

ㄴ 함수, 전역 변수, 스택, symbol table, 배열 등의 단위로 나눌 수 있다.

ㄴ protection bit를 세그먼트 별로 줄 수 있어서 paging 보다 효과적인 protection이 가능하다. sharing면에서도 paging보다 효과적이다.

ㄴ 세그멘테이션 테이블에는 시작 위치와 세그먼트 길이가 기록됨 (페이지와는 달리 길이가 일정하지 않기 때문에)

STBR(segment table base register) : segment table의 주소

STLR(segment table length register) : 프로그램이 사용하는 segment의 수

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

10. 파일 시스템  (0) 2022.06.09
9. Virtual memory  (0) 2022.06.09
7. Deadlock  (0) 2022.06.09
6. 프로세스 동기화  (0) 2022.06.09
5. CPU 스케줄링  (0) 2022.06.09

+ Recent posts