※ 운영체제 정리에 앞서 정리한 자료는 한국외대 컴퓨터전자시스템공학부 이윤석 교수님의 수업 자료를 참고하였음을 밝힙니다.
각 프로세스는 그들 자신만의 address space와 open files, virtual CPU를 가져서 독립적으로 작동합니다.
위의 그림은 우리가 흔히 프로그램을 구성하는 영역이라고 알고 있는 code, data, heap, stack입니다. 프로세스를 배우면서 알아야 점은 code와 data는 실행 중이 아니더라도 공간을 차지하고 있는 영역입니다. heap과 stack은 프로세스 즉, 프로그램이 실행 중일 때에 비로소 공간을 차지하는 영역입니다.
위의 그림은 process가 생성되어 실행, 대기의 과정을 거쳐 종료될 때까지의 과정을 state 중심으로 나타낸 것입니다.
프로세스의 모든 정보를 담고 있는 자료구조로 다음과 같은 것을 포함합니다.
여기서 중요한 것이 machine context라는 개념입니다. 이것은 PC, SP, register 같은 hardware state의 값들을 말하는데 이것은 Context Switch가 되기 위해 반드시 필요합니다.
위의 그림은 Context Switching이 일어나는 과정을 보여주고 있습니다.
1. 현재 실행 중인 프로세스에서 다른 프로세스로 실행의 흐름이 넘어가려면 지금 실행 중인 프로세스는 멈추고 제어권을 넘겨주어야 합니다.
2. 이때 실행 중인 프로세스의 hardware state는 CPU에서 여러 작업을 처리하며 그 값이 변하고 있는데 작업들을 멈추고 CPU에 있던 hardware state를 다시 프로세스의 PCB에 옮겨 담아서 저장시킵니다.
3. 이제 실행되어야 할 프로세스에 CPU 자원을 넘겨주면 가장 먼저, 실행될 프로세스의 PCB에 있던 hardware state들이 CPU로 옮겨가게 됩니다.
4. CPU에서는 해당 프로세스의 작업을 처리하면서 자연스럽게 다른 프로세스로 흐름이 넘어가게 되는 것입니다.
우리가 여러 가지 프로그램을 동시에 쓰는 것처럼 느끼게 해주는 역할을 context switching이 해주고 있습니다. 너무 switching이 빨라서 느끼지 못할 뿐입니다. (1초에 몇 백 ~ 몇 천 번)
context switch는 커널 안에서만 일어나고 멈추는 시점에서 다시 CPU 자원을 얻었을 때 이어서 진행되므로 사용자 입장에서는 끊김 없이 여러 프로그램을 동시에 사용하는 것 같이 느낄 수 있게 됩니다.