본문 바로가기
컴퓨터 공학

[기술면접대비] 2. 스케줄링과 메모리 관리 전략

by 물고기고기 2023. 12. 27.

이전글에서 이어집니다.


3. 스케줄링


스케줄링의 단계

1. 장기 스케줄링 : 준비 큐에 어떤 프로세스를 넣을지 결정해 메모리에 올라가는 프로세스 수 조절 (잡 스케줄링, 승인스케줄링)
2. 중기 스케줄링 : 메모리에 로드된 프로세스 수를 동적으로 조절, 프로세스가 많이 로드되면 스왑 아웃해서 일부 프로세스를 통째로 저장 -> 이때 스왑아웃된 프로세스는 중단 상태가 됨(준비/대기 상태에 중단 되는 셈)
3. 단기 스케줄링 :  준비 큐에 있는 대기 상태 프로세스 중 순서를 정해주는 스케줄링 알고리즘으로 결정. 어떤 프로세스를 보낼지 결정함(CPU 스케줄링)

용어정리
- 스왑 아웃 : 프로세스가 너무 많이 로드돼 중기 스케줄러가 프로세스들을 통째로 저장 공간에 옮겨 저장하는 것
- 스왑 인 : 스왑 아웃한 프로세스에서 이벤트 요청이 오면 해당 프로세스를 통째로 메모리에 다시 로드하는 것
- 스와핑 : 프로세스를 통째로 메모리 영역과 저장 공간으로 옮기는 것

중기 스케줄링과 단기 스케줄링은 그럼 같이 쓰이는건가? 네
함께 사용되는 경우
통합된 관리: 몇몇 시스템에서는 단기 스케줄링과 중기 스케줄링이 통합되어 시스템의 성능을 향상시키고 자원을 효율적으로 관리합니다.
협력적인 역할: 단기 스케줄링이 CPU 사용을 최적화하는 동안, 중기 스케줄링은 메모리 관리 및 시스템 부하 균형을 유지하는 역할을 합니다.
단기 스케줄링과 중기 스케줄링은 각각 독립적인 기능을 수행하지만, 전체 시스템 성능에 영향을 미치는 상호 연관된 역할을 수행합니다. 따라서 이 둘은 서로 다른 측면에서 시스템의 성능과 효율성을 관리하는 중요한 부분입니다.

 

스케줄링 알고리즘


스케줄링 알고리즘 : 단기 스케줄러가 준비 큐에 있는 프로세스 중 어떤 프로세스를 실행 시킬지 결정할 때 사용, 아래와 같은 조건을 고려해서 우선순위를 매김

  • CPU 사용률 : cpu를 놀게하지 않고 사용하는지
  • 처리량 : 단위 시간 당 실행한 프로세스 수
  • 응답 시간 : 프로세스에 요청이 발생했을 때 응답까지 걸리는 시간
  • 반환 시간 : 프로세스가 로드된 이후부터 종료까지 걸리는 시간
  • 대기 시간 : 프로세스가 대기 큐에서 대기하는 시간의 총합


비선점형 스케줄링 : 실행 중인 프로세스가 종료될 때까지 다른 프로세스를 실행할 수 없음

  • FCFS 스케줄링 : 큐에 먼저 들어온 프로세스가 우선(순서대로)
  • SJF 스케줄링 : 실행 시간이 짧은 프로세스가 우선순위를 갖는 알고리즘 -> 실행 시간이 긴 프로세스는 뒤로 밀려 계속 기다릴 수도 있음


선점형 스케줄링 : 스케줄러가 실행 중인 프로세스를 중단시키고 다른 프로세스를 실행할 수 있음

  • RR 스케줄링 : 프로세스 간 우선순위가 없음, 모든 프로세스를 일정 시간 실행하며 일정 시간 초과 시 다른 프로세스 실행 -> 콘텍스트 스위칭이 빈번하게 일어나서 오버헤드가 크나, 모든 프로세스가 반복 수행되어 응답속도 빠름
  • SRTF 스케줄링 : 큐에서 대기 시간이 가장 짧게 남은 프로세스를 우선 수행하는 알고리즘, 한 프로세스가 실행 중일때 실행 시간이 더 짧은 프로세스가 들어오면 해당 프로세스가 CPU 차지 -> 실행시간 긴건 또 오래 기다려야함(기아상태)
  • 멀티 레벨 스케줄링 : 준비 큐를 목적에 따라 여러 개로 분리해 사용함, 분리한 큐는 각자 우선순위가 다르거나 다른 스케줄링 알고리즘을 적용할 수 있음 (예를 들어 foreground 큐는 응답 속도가 중요한 프로세스가 들어가고, background 큐는 성능을 중요시하는 프로세스가 들어감)


4. 메모리 관리 전략

논리 메모리와 물리 메모리 : 프로세스가 보는 메모리 영역을 논리 메모리 영역(가상 메모리)라고 하고 실제로 사용되는 영역이 물리 메모리 영역임, 그리고 CPU가 프로세스를 실행하며 보는 주소 값을 논리 주소라고 함 -> 이때 논리 주소를 물리 주소로 변환해주는 장치를 메모리 관리 장치(MMU)라고 함 (MMU에서 RAM을 거쳐 실제 데이터를 얻어오는 것)

연속 메모리 할당

  • 고정 분할 방식 : 메모리 영역을 분할한 뒤 각 영역에 프로세스를 할당 -> 부분 파편화가 되어 원래는 올릴 수도 있는 프로세스인데 분할되어 못올리기도함(단편화 문제 발생)
  • 가변 분할 방식 : 할당된 프로세스의 크기에 따라 메모리 공간을 분할
    1. 최초 적합 : 가용 메모리 공간에서 크기만큼 비어있는 공간을 찾아 차례로 프로세스 로드(중간에 비어있는 순서대로 넣는 것)
    2. 최적 적합 : 가용 메모리 공간 중 가장 작은 공간에 프로세스를 할당함, 대신 가용 메모리 공간을 모두 탐색해야
    3. 최악 적합 : 할당하려는 프로세스 크기보다 큰 가용 메모리 공간 중에서 가장 큰 공간에 프로세스 할당, 얘도 마찬가지로 모두 탐색해야함



외부 단편화 vs 내부 단편화

  • 외부 단편화 : 고정 분할로 인해 원래는 들어갈 수 있는데 못들어가는 상황(10짜리인데 자리가 2,8로 나뉘어 못들어감)
  • 내부 단편화 : 분할된 크기가 만약 8이라고할때 분할된 크기보다 작은 프로세스들이 들어가 자리가 남는 상황(8짜리인데 6이 들어가서 2가 남음)


비연속 메모리 할당 : 프로세스의 메모리 영역을 나눠서 메모리 공간에 저장하는 방법

  • 페이징 : 프로세스의 논리 메모리 영역과 물리 메모리 영역을 각각 일정한 크기의 페이지와 프레임으로 나눔,
    • 각 페이지와 프레임에 번호를 할당해 프로세스의 페이지와 메모리의 프레임을 매핑해줌 (테이블 형식, 페이지 테이블) -> 페이지를 물리 메모리에 연속으로 할당할 필요가 없어서 외부 단편화 문제를 해결 가능, 여전히 내부 단편화 문제 발생
  • 세그멘테이션 : 프로세스의 메모리 영역을 논리적 단위인 세그먼트로 분할해 메모리를 할당
    • -> 세그먼트 테이블을 사용해 시작주소인 base와 길이인 limit을 저장 -> 프로세스의 메모리 영역을 논리적 단위로 나눠 저장하니 단위별로 데이터 보호가 쉬우나 세그먼트의 크기가 균등하지 않아 외부 단편화 문제 발생, 그리고 특정 세그먼트 영역에서 오버플로가 발생하면 다른 프로세스와 메모리를 통째로 스왑 아웃해야됨



5. 가상 메모리



가상 메모리 : 프로세스의 일부만 메모리에 로드하고 나머지는 디스크에 둔 상태로 프로세스를 실행, 논리(가상) 메모리라는 것을 만들어 모든 페이지가 메모리 위에 있는 것처럼 보이게 함

  • 프로그램이 메모리 크기에 대한 제약을 덜 받음
  • 동시에 많은 프로그램을 실행해 CPU 이용률과 처리율을 높임
  • 필요한 영역만 메모리에 로드해 스와핑 횟수를 줄여 프로그램 실행 속도를 높임


요구 페이징 : 프로세스에서 필요한 페이지만 메모리에 로드하는 방식, 당장 쓰지 않는 페이지들은 요청이 올 때 메모리에 로드함, 물리 메모리에 필요한 페이지가 없을때(페이지 폴트) 디스크에서 필요한 페이지를 스왑 인해옴 -> 이때 내가 요구한 페이지가 물리 메모리에 있는지는 페이지 테이블로 파악가능함(있으면 v, 없으면 i)

+) 요구 페이징에서 필요한 페이지가 물리 메모리에 있는지 없는지 페이지 테이블에서 확인하잖아. 이때 페이지 테이블에 있는지 확인하는 주체가 CPU인거야? 아님 메모리인거야? -> CPU입니다~

스레싱 : 동시에 일정 수 이성의 프로그램을 실행했을 때 오히려 CPU 이용률이 떨어지는 상황 -> 프로세스가 CPU 작업보다 페이지 교체에 더 많은 시간을 소비하여 전반적인 시스템 성능이 저하되는 현상
워킹 세트 : 스레싱을 예방하기 위해 지역성을 기반으로 자주 사용하는 페이지는 따로 저장해 두는 것(물리 메모리에 고정)

6. 캐시 메모리

캐시 메모리 : CPU와 메인 메모리 간에 데이터 접근 시 속도 차이를 줄이기 위해 사용. 자주 사용하는 데이터는 캐시 메모리에 따로 저장
지역성 : CPU가 자주 참조하는 데이터가 고르게 분포되지 않고 특정 부분에 몰려 있는 것

  • 시간 지역성 : 최근 참조 내용을 재참조할 가능성이 높음
  • 공간 지역성 : 실제 참조한 주소 근처 내용을 참조할 가능성이 높음

댓글