개발 공부
페이징 Paging 본문
:프로세스를 일정 크기인 페이지로 잘라서 메모리에 적재하는 방식
*메모리에 올라온 프로그램은 연속되어야 실행이 됨..
* 그렇다면 잘라서도 프로그램이 돌려면 어떻게 해야할까?
>> CPU를 속이면 된다.
CPU를 속이려면?
-MMU에 다수의 relocation register(재배치 레지스터)를 두어 CPU가 보낸 주소에 재할당 주소를 추가해 조각난 프로세스를 조각난 메모리에 일정 단위별로 할당해서 프로세스를 돌린다.
정리
프로세스를 자르는 단위는 페이지(page)
동일한 크기로 메모리를 자른것이 프레임(frame)
>>페이지(프로세스)를 프레임(메모리)에 할당
MMU내의 재배치 레지스터의 값을 바꿈으로써 CPU는 프로세스가 연속된 메모리 공간에 위치한다고 착각을 함
MMU는 페이지 테이블(page table)이 된다. <-이러한 목적으로 사용되는 MMU가 페이지 테이블
주소변환
cpu가 내는 주소 : 논리주소(Logical address)
CPU에서 보낸 논리주소는 MMU인 페이지 테이블을 통해 물리주소(Physical address)로 바뀌어 메모리에서 찾게 됨
●논리주소(Logical address)
-CPU가 내는 주소는 2진수로 표현 전체(m비트)
-하위 n비트는 오프셋 또는 변위
>> n이 몇비트인지는 페이지 사이즈에 따라 달라짐
ex) 1페이지 단위가 16byte라고 가정시 16= 2^4, 즉 n은 페이지 단위이므로 4비트가 된다. 1KB라고 하면 1KB=1024byte=2^10 , 즉 n은 10비트가 되어 페이지단위는 10비트 |
-상위 m-n비트는 페이지 번호를 나타내는 인덱스 값
●주소변환 : 논리주소 >> 물리주소
페이지 번호(p)는 페이지 테이블 인덱스 값
p에 해당되는 테이블 내용이 프레임 번호
변위는 변하지 않음
예제 CPU가 50번지 주소를 냈다면 메인메모리에 할당되는 주소는? 페이지 사이즈 : 16byte 풀이 50 = 110010 페이지 크기 = 16byte = 2^4 >> n=4 즉 하위 4개의 비트 = d m-n비트 : p = 11(2) = 3 >> 페이지 번호 인덱스 n비트 : d = 0010 페이지 테이블의 인덱스3의 값이 8이면 p=8 = 1000 d=0010 >> 10000010 = 130 즉 물리주소는 130 |
내부단편화
프로세스의 크기가 페이지 크기의 배수가 아니라면
마지막 페이지는 한 프레임을 다 채울 수 없다
>> 남은 공간 = 메모리 낭비!!
페이지 테이블 만들기
- CPU 레지스터로
- 메모리로
- TLB(Translation Look-aside Buffer)로
: SRAM, 캐시처럼 된 레지스터(칩)을 사용
- 테이블 엔트리 개수 vs 변환 속도
TLB사용시 유효메모리 접근 시간 Tm(총 걸린 시간) = 100ns Tb(읽는 시간) = 20ns hit ratio = 80% |
보호와 공유
● 보호 : 해킹 등 방지
:모든 주소는 페이지 테이블을 경유하므로, 페이지 테이블 엔트리마다 r(read), w(write), x(execute)비트를 두어 해당 페이지에 대한 접근 제어 가능
● 공유 : 메모리 낭비 방지
같은 프로그램을 쓰는 복수 개의 프로세스가 있다면, code + data + stack에서 code는 공유 가능
(단, non-self-modifying code = reentrant code = pure code 인 경우)
프로세스의 페이지 테이블 코드 영역이 같은 곳을 가리키게 설정
'대학교 공부 > 운영체제' 카테고리의 다른 글
가상 메모리 (0) | 2021.06.08 |
---|---|
세그멘테이션 (Segmentation) (0) | 2021.06.04 |
주기억장치 관리 (Main Memory Management) (0) | 2021.06.03 |