페이징을 통해 물리메모리보다 큰 프로세스를 실행 가능 하지만
그럼에도 불구하고 물리메모리의 크기는 한정되어 있다.
그렇기 때문에 기존에 적재된 불필요한 페이지를 보조기억장치로 옮겨야 하고
각 프로세스들에게 적당한 프레임을 할당 해야 한다.
이러한 방법에 필요한 기본적인 용어는 아래와 같다.
요구페이징 : 모든페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재 (요구되는 페이지만 적재)
- CPU가 특정 페이지에 접근 명령어 실행
- 해당 페이지가 메모리에 존재할 경우 (유효비트1) CPU는 페이지가 적재된 프레임에 접근
- 메모리에 없을경우 (유효비트 0) 페이지 폴트 발생
- 페이지 폴트 처리 루틴은 해당 페이지를 메모리로 적재후 유효비트 1로 갱신
- 위 작업 반복
요구페이징 기법으로 페이지들을 적재하다 보면 언젠가는 메모리가 가득찬다.
당장 필요한 페이지를 적재하기 위해 현재 불필요한 페이지를 보조기억장치로 옮겨야 한다.
이럴때 불필요한 페이지를 선별하는 방법을 페이지 교체 알고리즘이라고 한다.
* 일반적으로 페이지 폴트가 적은 알고리즘이 성능이 좋다 -> 페이지 폴트가 발생하면 보조기억장치에 접근해야 되서 성능이 저하 될 수 있음.
여기서 페이지 폴트 횟수 측정 방법은 페이지 참조열을 이용하는 방법이다.
페이지 참조열 : CPU가 참조하는 페이지들 중 연속된 페이지를 생략한 페이지열
222 3 55 333 7 -> 2 3 5 3 7 (연속된 페이지에 대해서는 페이지 폴트가 발생하지 않을 것 이기 때문에)
페이지 교체 알고리즘
1. FIFO 페이지 교체 알고리즘
가장 단순한 방식이고 메모리에 가장 먼저 올라온 페이지부터 내쫓는 방식
단점 : 프로그램 실행 동안 계속해서 실행할 페이지를 내쫓을 수 있음.
보완 방법 : 2차 기회 페이지 교체 알고리즘 ->
참조비트를 확인하여 1이라면 현재시간으로 할당시간을 초기화 해준다.
2. 최적 페이지 교체 알고리즘
CPU의 페이지 참조 횟수를 고려하여
자주 참조되지 않을 페이지를 교체하는 방법
단점: 실제 구현이 어렵다. 페이지 참조를 예측하기 어렵기 때문이다. 그래서 보통 다른 알고리즘의 성능 척도로 활용된다.
3. 최적 페이지 교체 알고리즘
가장 오래 사용되지 않는 페이지를 교체하는 방법
프레임 할당
페이지 폴트가 자주 발생하는 이유로 적절하지 못한 알고리즘 사용 OR 프로세스가 이용 가능한 프레임 자체가 적은 경우가 있다.
프레임이 넉넉한 컴퓨터인 경우 많은 양의 페이지가 메모리에 적재될 수 있다. --> 페이지 폴트 발생빈도가 적다.
그렇기 때문에 프레임 자체가 작으면 페이지폴트 발생이 높다.(디스크 참조가 많아져서 느려진다. CPU이용률이 떨어진다)
스레싱 : 프로세스가 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저하되는 문제 (과도한 페이지 교체로 인하여)
* 동시 실행되는 프로세스의 수를 늘린다고 CPU 이용률이 높아지지않는다 --> 페이지 교체가 자주 일어나기 때문에
스레싱의 주된 원인 :
- 각 프로세스가 요구하는 적절한 프레임이 확보되지 않았기 때문이다
- 적절한 프로임 수를 파악하고, 프로세스들에게 할당해주어야 한다.
프레임의 할당 방식
● 균등 할당
- 가장 단순한 할당 방식, 모든 프로세스들에게 균등하게 프레임을 할당한다.
실행되는 프로세스 마다 요구하는 프레임이 다르기 때문에 적절하지 않은 방식이다.
● 비례 할당
프로세스의 크기에 따라 프레임을 할당하는 방식
실제 실행되면서 필요로 하는 프레임수가 달라질 수 있기 때문에 요구되는 프레임 수는 실행해봐야 안다.
위의 두개는 프레세스의 크기와 물미 메모리의 크기만을 고려하여서 정적 할당 방식이라고 한다.
● 작업 집합 모델
- 프로세스가 실행중에 요구하는 프레임양을 결정
- 프로세가 특정 시간 동안 주로 참조한 페이지 수만큼만 프레임을 할당 (페이지 교체 감소)
작업 집합을 구하려면 참조한 페이지와 시간간격이 필요하다.
ex: t1동안 7,7,8,1,3,3을 참조하였다면 필요한 프레임 수는 4가 된다.
● 페이지 폴트 빈도 기반 방식
- 프로세스가 실행중에 요구하는 프레임양을 결정
- 페이지 폴트율이 높다 -> 적은 프레임 소유 , 페이지 폴트율이 높다 -> 과도한 프레임을 소유
이러한 가정으로 동작한다.
* 페이지폴트의 상한선과 하한선을 정하여 적당한 프레임을 할당하는 방식
쓰기시 복사
fork라는 시스템콜 호출시 부모프로세스와 동일한 자식 프로세스가 생성된다.
프로세스는 기본적으로 자원을 공유하지 않기에 개별적인 공간에 자식프로세스가 생성된다.
이러한 점은 다음과 같은 단점을 지닌다.
- 자식 프로세스 생성 시간 지연
- 메모리 낭비 (같은 내용이 메모리에 적재된 꼴)
자식 프로세스는 부모 프로세스와 동일한 프레임을 가르킨다.
하지만 둘 중 하나라도 페이지에 대한 입력 작업이 일어나면 해당 페이지는 개별적인 공간으로 복제된다.
이런식으로 메모리를 절약할 수 있다. (쓰기 작업이 일어난 페이지만을 복사본으로 개별적인 공간에 생성)
계층적 페이징
프로세스 테이블은 생각보다 크기때문에 모든 페이지 테이블 엔트리를 메모리에 적재하는 것은 큰 낭비이다.
그렇기때문에 프로세스를 이루는 모든 엔트리를 메모리에 항상 적재할 필요가 없다.
페이지 테이블 자체를 페이징을 다시 하여 여러 단계의 페이지를 두는 방식
CPU와 가장 가까운 페이테이블(outer)은 항상 유지되어야 한다.
계층적 페이지에서 논리주소를 통한 물리주소를 얻으려면
P1 (바깥 페이지 번호) P2 (안쪽 페이지 번호) d (변위)
P1 을 참조하여 P1에서 또 다시 P2를 참조한다.
P2에 진입하여 해당 페이지를 구하여
변위를 고려하여 프레임 번호를 찾으며 물리주소를 얻는다.
* 너무 계층을 많이두면 페이지 폴트시에 메모리 참조가 많이 일어나게 된다.
출처 : https://www.youtube.com/watch?v=i4rpeyqAODo&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=43
'개인공부 > 컴퓨터 구조와 운영체제' 카테고리의 다른 글
[스레드와 멀티스레딩] (0) | 2025.04.12 |
---|---|
[컴퓨터 시스템과 운영체제] (0) | 2025.04.11 |
[컴퓨터 구조와 운영체제] 연속 메모리 할당 (0) | 2025.01.23 |
[컴퓨터 구조와 운영체제] 교착 상태 (Dead lock) (0) | 2025.01.21 |
[컴퓨터 구조와 운영체제] 프로세스 동기화(중요) (0) | 2025.01.17 |