운영체제 관련 글 순서
- 프로세스란
- 쓰레드
- CPU 스케줄링
- 동기화 툴
- 동시성 제어 예제
- 데드락
- 주 메모리
- 페이징과 스와핑
- 가상 메모리와 디맨드 페이징
- 페이지 교체 알고리즘(FIFO, OPT, LRU), 쓰레싱, working set
페이징(Paging)
- 메모리를 쪼개서 사용하는 것
- 연속적 할당의 반대개념이다.
- 외부 단편화 발생을 방지해준다.
가장 기본적인 페이징 방법
- 실제 메모리를 고정된 크기(frame)로 쪼개서 사용 == 메모리를 나눈 조각
- 똑같은 크기로 논리 메모리도 쪼갬(page) == 프로세스를 나눈 조각
- 논리주소는 몇번 페이지에 몇번 오프셋에 있는지 알려준다.
- 페이지 넘버와 오프셋으로 페이지 테이블을 통해서 실제 물리적인 주소를 알려준다.
페이지 사이즈
- 반드시 2의 배수여야 한다.
- 페이지 크기가 작을 경우, 페이지 테이블 크기가 커지게 되고, 메모리가 낭비된다.
- 페이징 크기는 하드웨어가 결정한다.
- logical address space가 2^m, page size가 2^n bit이면,
- page number는 m-n bit 필요
- page offset은 n bit 필요
새로운 프로세스 들어온 경우
- frame 리스트엔 14,13,15,18,20 순서로 되어있음.
- 페이지를 4개 가지고 있는 새로운 프로세스가 들어옴.
- 리스트 순서대로 14 -> 13 -> 18 -> 20에 할당됨.
하드웨어 지원
cpu 스케줄러가 새로운 프로세스를 실행하기위해 선택하려고할때, 페이지 테이블도 context switch에 포함된다.
페이지 테이블이 클수록 관리하기 힘들다.
PTBR(page-table base register)
- 페이지 테이블을 context switch 시에 다시 로드하지 않기 위한 것.
- context switch는 감소하지만, PTBR로 메모리 상에 있는 페이지 테이블 접근 후 실제 메모리로 접근 되기때문에 메모리 access 시간은 TLB에 비해 증가한다.(2번 접근하게 됨. 기존방식도 결국 2번 접근하는 형태
TLB(transloation Look-aside Buffer)
- TLB라는 cpu와 메모리 사이의 캐시 메모리를 통해 바로 접근이 가능하다.
- TLB hit: page number가 TLB 존재할때
- TLB miss: page number가 TLB 존재하지 않을 때
- hit ratio: page number가 TLB에서 발견되는 비율
- 예시 ) 10 NS 시간만큼 메모리 접근시간이 걸릴때,
- 80% hit ratio : 0.80*10 + 0.2*20 = 12ns
- 99% hit ratio : 0.99*10 + 0.01*20 = 10.1ns
- 예시 ) 10 NS 시간만큼 메모리 접근시간이 걸릴때,
페이징 시에 메모리 보호방법
- 연속 메모리 할당에선 시작주소와 끝주소를 통해서 쉽게 legal한 주소인지 판단 가능했지만,
- 페이징에선 보호 비트에 의해 구현된다.
- 해당 그림에서 page table에 valid-invalid bit가 추가되었다.(보호 비트)
- 보호비트를 통해 사용하지않는 해당 번호에 접근하더라도 보호 비트에 의해 걸러진다.
Shared Pages
- 페이징의 장점은 공통적인 코드는 공유할 수가 있다.
- 이로인해 메모리 낭비가 방지된다.
- 조건은 코드가 reentrant code여야 한다. 4
- 위의 그림처럼 같은 프로그램을 쓰는 프로세스들은 같은 코드를 가지고 있으므로, 각각의 논리적인 주소로 동일한 실제 주소를 참조하여 쓸 수가 있다.
페이지 테이블의 구조
계층적 페이징(Hierachical Paging)
- 페이지 테이블의 페이지 테이블을 만드는 것.
해시 페이지 테이블(Hashed Page Tables)
- 주소공간이 32비트보다 크면 사용하는 구조
- 논리주소가 오면 해시테이블을 통해서 페이지 넘버를 관리.
- 페이지 번호가 오면 해싱
- 해시형 페이지의 테이블에서 연결리스트를 따라가며 들어온 번호와 테이블 내 가상 페이지 번호를 비교
- 일치하면 해당하는 물리적 주소를 얻음
역 페이지 테이블(Inverted Page Table)
- 페이지 테이블을 위해 많은 메모리를 요구하는 이유는 각 프로세스마다 페이지 테이블을 가지고 있기 때문이다.
- 이러한 문제를 해결 하기 위해, 실제 메모리의 프레임마다 페이지 테이블의 한 항목을 할당하여 1개의 페이지 테이블만 만든다.
- 각 항목 가상 주소는 PID,Page Number가 기록되어 있다.
- 단점
- 주소를 변환할때마다 페이지 테이블을 탐색해야 하므로 시간이 소모된다.
- 물리 주소에 대해 하나의 가상 주소를 매핑하기때문에 공유가 어렵다.
스와핑(Swapping)
메모리에 올라와 있는 프로세스의 주소 공간 전체를 디스크의 스왑 영역으로 일시적으로 내려 놓는 것. 5
역할
- 실제 메모리보다 큰 프로그램을 돌릴 수 있게 된다.
- 멀티 프로그래밍을 조절한다.
- 메모리에 많은 프로그램이 실행중이면, 한정된 메모리의 양을 각각 적게 사용하게 되어 성능을 크게 떨어트린다. 이러한 문제 해결을 위해 일부 프로그램을 스왑영역으로 보내서 메모리 공간을 확보해준다.
과정
- 스와퍼라고 불리는 스케줄러에 의해 스왑 아웃 및 스왑 인 시킬 프로세스 선택
- 스왑 아웃(swap out): 프로세스에 할당된 메모리 주소 공간을 빼앗고 스왑 영역으로 보낸다.
- 스왑 인(swap in): 스왑영역에 있는 프로세스를 메모리 주소 공간을 할당시킨다.
페이징 된 스와핑 과정
- 작은 단위의 스와핑이 가능해진다.
- swap 대신 page out, page in으로 부른다.
참조
'CS > OS(운영체제)' 카테고리의 다른 글
[운영체제] 페이지 교체 알고리즘(FIFO, OPT, LRU), 쓰레싱, working set (0) | 2022.01.11 |
---|---|
가상 메모리(Virtual Memory)와 디맨드 페이징 (0) | 2022.01.10 |
주 메모리(Main Memory) (0) | 2022.01.07 |
데드락(Deadlock) (0) | 2022.01.05 |
동시성 제어 예제(Bounded-Buffer, Readers-Writers (0) | 2022.01.05 |
댓글