
프로세스가 시작되면 먼저 독자적인 주소 공간을 확보하게 되고,
프로세스가 CPU를 잡게 되면 프로그램 카운터라는 레지스터가 프로세스의 코드를 가르키고 있고, 이 기계어를 읽어서 CPU안의 레지스터로 불러온 다음(인스트럭션) 산술연산장치(ALU)가 연산을 하고, 결과를 레지스터나 메모리에 저장하게 된다.
이를 반복하다가 어느 시점에 '과연 이 프로세스는 지금 어디까지 와 있는가?'를 규명하기에 필요한 요소가 프로세스 문맥이다.
프로그램 카운터가 가르키는 것을 보고, 코드의 어느부분까지 실행을 했는가를 알아야 하고, 메모리에 어떤 내용이 담겨있는지도 봐야하고, 만약 코드에서 함수를 호출했다면 스택에 쌓여있을텐데 무슨내용을 얼만큼 쌓아놓고 있는지, data에 변수값이 현재는 얼마인지.. 등등 모든 요소를 다 알아야지만 프로세스의 현재 상태를 알 수 있을 것이다.
이렇게 현재 상태를 규명하기 위해 필요한 모든 요소를 문맥이라고 부른다.
현대에서는 여러 프로세스들이 번갈아 가면서 실행되기 때문에 여러 프로세스들이 번갈아가면서 CPU를 사용한다. 하던 작업을 백업을 해두지 않는다면(=현재 문맥을 모른다면) 다음번 CPU 점유중일때 이어서 작업을 하기가 어려울 것이다.
프로세스는 상태(state)가 변경되며 수행된다.


운영체제의 상태와 사용자 프로그램의 상태를 혼동하지 않도록 유의하자.

CPU에 비해 Disk는 100만배에서 1000만배 느릴 정도로 속도의 차이가 크기 때문에 모든 자원들을 쉬지않고 효율적이게 동작하게 하는 매커니즘이 필요하다.
놀이동산에서 줄을 기다렸다가 기구를 타는 것에 비유해서 CPU 작업중에 키보드 입력이 필요한 경우에 키보드 I/O에 줄을 서서 차례에 작업을 하고, 작업이 끝나면 다시 CPU에 인터럭트를 걸고 CPU ready줄에 서서 차례가 왔을때 작업을 이어서 수행한다는 설명이 인상 깊었다.
하지만 꼭 먼저 온 순서대로 처리하지는 않고 추후에 배울 스케쥴링에 의해 우선순위가 매겨지고 이에따라 순서가 달라지는 점을 기억하자.

위의 프로세스가 줄서는 큐는 사실 운영체제의 데이터저장 메모리 공간에 프로세스의 상태를 바꾸어 가면서 프로세스의 정보를 저장하고 있다.

다시 말해 프로그램의 문맥 정보는 커널 운영체제의 DATA 메모리영역에 PCB형태로 저장되어 있는데 PCB는 4단계로 구성되어 있다.

A프로세스가 CPU에서 실행중이라면 프로그램 카운터가 어딘가를 가리키고 있고, 레지스터에 값이 들어가 있고, 메모리의 위치 정보 map이 있는 상태였을 것이다. 그런데 타이머 인터렉트가 들어와서 CPU를 빼앗겨야 한다면 다음에 이어서 작업하기 위해 프로그램 카운터값과 레지스터의 값, 메모리 map을 A프로세스 PCB에 저장한다.
이후 B프로세스가 작업을 실행하기 위해서 운영체제가 CPU를 넘겨줄때는 B프로세스의 문맥을 PCB에서 찾아서 하드웨어에 복원을 시킨 후에 CPU를 넘긴다.

프로세스가 본인이 필요해서 CPU에 요청하는 System call과 controller와 같은 장치가 정보를 전달하기 위해 거는 Interrupt의 상황은 다르지만 둘 다 운영체제에게 CPU 권한이 넘어가게 된다.
하지만 이를 모두 context switch 라고 부르는 건 아니다. context switch는 프로세스에서 다른 프로세스로 넘길때 발생하는 것을 의미하므로 운영체제에게 권한을 준 이후에 다시 기존의 프로세스가 권한을 얻게 되는 경우도 있을 수 있다. 이럴때는 문맥교환이 발생하지 않았으므로 부담이 적을 것 이다.(ex) 캐시 메모리 삭제를 안해도 됨)

위 사진은 이는 오래걸리는 I/O작업을 위해 CPU를 내려놓은 동기식인 상황이다.
CPU에서 프로세스가 작업을 하다가 I/O요청이 들어오면 I/O큐에서 줄을 서서 대기를 하고, 그후 I/O를 마치면, 다시 CPU를 기다리는 ready큐에서 줄을 서서 기다리는 흐름을 볼 수 있다.
스케줄러는 자원별로 이번에 무슨일을 얼마만큼의 시간만큼 하고 다음번엔 어떤 일을 해야할지 결정하는 역할을 한다.

<참고자료>
교보문고 책 구입처
이화여대 반효경 교수님 강의
안녕하세요. 블로그 잘 봤습니다.
23년 여름쯤에 '취준 글'과 '앤드류 후버만 루틴 글'을 봤는데요.
지금은 취업에 성공하셨는지, 앤드류 후버만 루틴은 어땠는지 궁금합니다!