본문 바로가기

CS/운영체제

Running중이고, Kernel mode로 전환되면서 Waiting으로 상태가 변경된다면?



우리는 Running만 하고 바로 Ready Queue로 넘어가는 것은 Kernel Mode의 실행이 없을 때입니다. 단순히 현재 실행되는 상황을 잠시 접어두고 Ready Queue로 보내버리면 될 것입니다. 하지만, I/O가 이루어지는 데이터 이동 또는 Network를 통해서 옮겨지는 데이터 등이 있다면? 우리는 그 데이터를 받기까지 기다려야 할 것입니다. 어디서 대기를 하냐면 Waiting Queue에서 대기를 하게 됩니다. 이제 요청했던 데이터가 도착을 하게 되고 PCB에 상태가 저장될때까지는 우리는 Waiting의 상태가 되어야겠죠? 그렇다면 당연히 Memory에 프로세스의 메모리 영역이 할당되어 있을테고요?

그런데 만약 Ready Queue에서 새로운 프로세스를 메모리를 할당해줘야 하는데 메모리가 부족한 상황이 찾아온다면 어떻게 할까요? 새로운 프로세스를 무시할까요? 아니면 현재 언제 올지 모르는 데이터를 기다리고 있는 프로세스의 메모리 영역을 빼버릴까요? 운영체제는 후자를 선택합니다. 언젠가 그 데이터가 도착을 하게 되면 다시 그 프로세스의 메모리 영역을 다시 확보해 주면 되니까 일단 실행시켜야 하는 프로세스를 먼저 실행시켜 주겠다는 것이죠. 

그래서 현재 저장되어있는 프로세스의 메모리 영역 내 상태 정보들을 디스크 영역에 별도로 만들어진 영역에 저장을 하게 되는 것입니다. 이 과정이 Swapping이라는 것인데, 이것을 담당하는 중기 스케줄러(Mid Term)이 존재합니다.

실제로 Waiting 상태라면, 일단 Memory는 점유하고 있습니다. 언젠가 Ready Queue로 갈 것이고 다시 메모리를 할당해 주는 것은 사실상 비효율적이기 때문에 메모리 영역이 해제되진 않습니다.

하지만, 메모리가 부족한 순간이 찾아온다면? Waiting 상태의 프로세스는 Suspended 상태로 전이됩니다. Suspended 상태는 PCB 상태가 디스크와 같은 보조 저장 장치에 저장됩니다. 메모리 부족이나 사용자가 프로세스를 일시 중지할 때 발생하는데, 해당 프로세스의 메모리 내용이 디스크로 스왑 아웃됩니다.

프로세스가 다시 실행할 준비가 완료되어 운영체제는 디스크에서 해당 프로세스의 데이터를 다시 메모리로 로드하게 되고, 이 과정에서 PCB 정보도 함께 사용되어 이전 상태로 복원됩니다.

이렇게 다시 설명할 수 있겠습니다. 근데 이런 과정이 어디에서도 이루어질까요? Ready Queue에 올라온 프로세스 생성된 작업들은 현재 메모리를 할당받은 상태였다고 말씀드렸습니다.

그렇다면 당연히 Ready Queue에서도 중기 스케줄러가 작동을 하고 있을 겁니다. 그래서 Suspended Ready는 준비 상태에 있던 프로세스가 디스크로 스왑 아웃 되었다. Suspended Blocked는 I/O 작업을 기다리던 프로세스가 디스크로 스왑 아웃 되었다. 이렇게 두 가지를 정의할 수 있을 것입니다.

중기 스케줄러(Medium Term Scheduler)의 동작 과정입니다.

아까 말했듯이, Swapping에 관련되어있습니다. CPU나 메모리의 부하를 줄이기 위해 프로세스를 메모리에서 일시적으로 제거하는 것을 의미합니다. 자원이 여유로워지면 프로세스를 다시 메모리로 복귀시키는 과정입니다.

중기 스케줄러의 동작 과정입니다.

1. 프로세스를 식별합니다.

- 스왑 대상의 프로세스를 선택하는데 아래의 정보를 바탕으로 선택합니다.
- 대기 상태 : I/O나 외부 이벤트를 기다리는 프로세스가 우선이 됩니다.
- 우선순위 : 낮은 우선순위 프로세스가 먼저 스왑됩니다.
- 자원 사용량 : 메모리 사용량이 큰 프로세스를 스왑해 많은 자원을 확보합니다.

2. 프로세스의 상태를 저장

- PCB를 업데이트합니다.
- 프로세스의 PC, CPU의 레지스터 등이 PCB에 저장됩니다.
- 프로세스의 메모리 내용이 디스크의 스왑 공간에 복사됩니다.




[디스크의 스왑 공간은 어디가 될까?]

디스크의 스왑 공간(swap space)은 프로세스의 메모리 내용을 일시적으로 저장하기 위해 하드 드라이브나 SSD에 예약된 특정 영역을 말합니다. 이 공간은 운영 체제가 관리하며 일반 파일 시스템과는 분리되어 있습니다. 스왑 공간은 다음과 같은 형태로 존재할 수 있습니다.

전용 파티션

디스크에서 스왑 작업을 위해 특별히 할당된 별도의 파티션.
예: 리눅스 시스템은 설치 시 "스왑 파티션"을 생성하는 경우가 많습니다.

스왑 파일
주 파일 시스템에 위치한 파일로 스왑 공간 역할을 합니다.
예: Windows는 pagefile.sys라는 파일을 스왑 공간으로 사용합니다.

스왑 공간의 위치와 크기는 운영 체제 설정에 따라 구성 가능합니다.

3. 메모리 해제

프로세스 상태가 저장되면 할당된 메모리가 해제되어 다른 프로세스가 사용할 수 있게 됩니다.

4. 재활성화

메모리의 여유가 생기게 되면, 스왑된 프로세스를 다시 메모리에 로드합니다.
[ 스왑된 프로세스의 우선순위는 어떻게 될까? ]
- PCB를 복원합니다. 저장된 상태가 메모리에 복원됩니다.
- Ready Queue에 또는 이전 상태인 Waiting으로 돌아가게 됩니다.


틀리거나 애매한 내용

  • Suspended Ready와 Suspended Blocked의 정의:
    Suspended Ready는 "Ready 상태였던 프로세스가 디스크로 스왑 아웃된 상태"로 정의되었으며, Suspended Blocked는 "Waiting 상태였던 프로세스가 디스크로 스왑 아웃된 상태"로 설명되었습니다. 이는 일반적으로 맞는 설명이지만, 실제 운영체제에서는 Suspended 상태로 이동하는 세부적인 조건이나 트리거(예: 정책 기반 또는 명시적 사용자 요청)와 관련하여 다소 애매할 수 있으므로, 해당 OS의 문서를 참조해야 구체적인 상황을 파악할 수 있습니다.
  • 스왑 대상 선정 기준의 일반화:
    스왑 대상 선정 기준으로 "우선순위가 낮거나 메모리 사용량이 큰 프로세스를 선택한다"고 했지만, 실제 스왑 알고리즘은 운영체제의 정책(예: Least Recently Used, First-In First-Out 등)에 따라 다양합니다. 이 부분은 다소 일반화된 설명이므로 보완할 여지가 있습니다. [뒤에 메모리와 가상 메모리를 할때 설명에 추가하겠습니다.]
  • 중기 스케줄러와 스왑의 관계:
    중기 스케줄러가 항상 스왑과 관련된 작업만 담당한다고 보긴 어렵습니다. 일부 운영체제에서는 중기 스케줄러가 I/O 관리나 특정 자원 관리를 위해 사용되기도 합니다. 글에서는 스왑 작업에만 중점을 둔 설명이므로 약간의 추가 설명이 필요합니다.

3. 추가로 알아봐야 할 사항

  1. 중기 스케줄러와 스왑의 차별화된 구현 방식:
    • 리눅스와 Windows 등 주요 운영체제에서 중기 스케줄러와 스왑 관리 방식이 다를 수 있습니다. 이를 비교해보면 더 심화된 분석이 가능합니다.
  2. 스왑 공간의 설정과 운영체제 간 차이:
    • 리눅스에서 스왑 파티션과 스왑 파일의 성능 차이, Windows에서 pagefile.sys의 동작 방식 등을 조사해볼 필요가 있습니다.
  3. Suspended 상태가 실질적으로 활용되는 사례:
    • 현대 운영체제에서 Suspended 상태가 얼마나 활용되고 있는지, 특히 리소스 제약이 적은 현대 시스템에서의 역할을 분석하면 좋습니다.
  4. 메모리 부족 상황에서의 스왑 오버헤드:
    • 메모리 부족 상황에서 스왑 오버헤드(예: 디스크 I/O 병목, 컨텍스트 전환 지연)가 시스템 성능에 미치는 영향을 구체적으로 알아볼 필요가 있습니다.
  5. 운영체제 별 스왑 알고리즘:
    • 리눅스의 kswapd 데몬이나 Windows의 메모리 관리자 등 운영체제에서 스왑 작업이 수행되는 구체적인 메커니즘을 비교할 필요가 있습니다.

요약 (Summary)

중기 스케줄러(Medium-Term Scheduler)의 역할

  • 프로세스를 일시적으로 메모리에서 제거(Swapping)하여 메모리 자원을 확보.
  • 주로 Waiting 상태의 프로세스를 대상으로 작동.
  • PCB와 메모리 내용이 디스크의 스왑 공간에 저장됨.

Suspended 상태

  • Suspended Ready: Ready 상태에서 디스크로 스왑 아웃된 상태.
  • Suspended Blocked: Waiting 상태에서 디스크로 스왑 아웃된 상태.
  • 프로세스가 복구될 때 PCB 정보를 사용해 이전 상태로 돌아감.

스왑 공간

  • 전용 파티션: 리눅스에서 스왑 파티션으로 사용.
  • 스왑 파일: Windows에서 pagefile.sys 형태로 구현.
  • 성능과 설정 방식은 운영체제마다 다름.

스왑 대상 선정 기준

  1. I/O를 기다리는 대기 상태의 프로세스.
  2. 낮은 우선순위 프로세스.
  3. 메모리 사용량이 큰 프로세스.