운영체제 - Process 1

송은석·2022년 7월 4일
0

KOCW 사이트를 이용하여 듣게 된 반효경 교수님의 운영체제 강의 내용을 간단히 정리하여 포스팅합니다.

"Process is a program in excution."

(프로세스란, 실행되고 있는 프로그램이다.)


현대 컴퓨터 시스템은 시분할 방식(time sharing)을 사용하므로 각 프로세스의 상태을 계속 기억하고 있어야 여러 개의 프로세스를 동시에 실행할 수 있다.

이때 기억해야 할 어떠한 시점의 프로세스의 상태를 Context라고 칭한다.

어떻게 Context를 확인할 수 있을까? 크게 아래의 3가지를 확인해 볼 수 있다.

1) CPU 문맥을 나타내는 하드웨어 문맥 -> register들, program couter(pc)
2) 각 프로세스의 주소 공간에 있는 code, data, stack의 상태
3) 각 프로세스 관련 커널 데이터 -> PCB(Process Control Block), Kernel Stack



프로세스의 여러 상태

프로세스는 여러 상태를 가진다.

1) Running - cpu를 잡고 실행 중인 상태
2) Ready - 다른 조건 만족하고 cpu만 기다리는 상태
3) Block(wait, sleep) - 어떠한 작업을 하느라 cpu를 주어도 실행 불가한 상태 ex) io 작업
+) new, terminate 등

*suspended는 아래 스케줄러를 이야기하면서 언급하겠다.



문맥 교환(Context Switch)

CPU에서 현재 running 중인 프로세스가 어떠한 이유(time interrupt, 비용이 큰 요청 등)로 인해 다른 프로세스로 교환 될 때, 이 교환되는 과정을 문맥 교환(context switch) 이라고 말한다.

이 때 OS는 현재 running 중인 프로세스의 정보를 pcb에 저장하고, 교환되어 cpu를 사용할 프로세스의 정보를 pcb로부터 복원한다.

헷갈리기 쉬운 개념

프로세스 실행 중 interrupt 나 system call이 있어서 kernel mode가 실행되어도 문맥 교환은 아니다. 간단히 pcb에 컨텍스트 일부를 저장해야할 수는 있지만, 이는 cache memory flush 같은 훨씬 오버헤드가 큰 작업을 수행해야 하는 문맥 교환과는 비교할 수 없다.



프로세스를 스케줄링 하기 위한 큐

프로세스를 스케줄링 하기 위한 큐로는 Job queue, Ready queue, Device queues가 있다.

Ready queue는 메모리 상에서 ready 상태에 있는 프로세스들을 가리키며, Device queues는 io device의 처리를 기다리는 프로세스들을 가리킨다. Job queue는 이 모든 큐들의 집합이다.

*device queues가 복수로 처리된 것은 여러 device가 있기 때문인 것으로 추정된다.

스케줄러

자세한 내용은 아래 필기 내용과 같은데, 핵심은 현대 컴퓨터 시스템에서 중기 스케줄러를 통해 프로세스들을 관리한다는 것이다. 일단 모든 프로세스를 메모리에 올리지만, 너무 많으면 메모리에 여유 공간을 마련하기 위해 프로세스들을 메모리에서 쫓아내어 프로세스의 수를 조절한다. 이를 degree of multiprogramming 이라 한다. 프로세스의 수를 조절하는 것이 핵심이다.

메모리에서 프로세스를 쫓아내는 것을 swap한다고 하는데, 이 때 쫓아진 프로세스의 상태를 suspended라고 칭한다.

헷갈리기 쉬운 개념

프로세스가 멈추어 있다는 점에서 blocked 상태와 혼동할 수 있다. 그러나 이는 오해다.

running, ready, blocked로 칭해진 프로세스의 상태는 사실 cpu의 관점에서 바라본 것이어서, 실제 프로세스는 blocked 상태여도 실행 중인 것이다. (Active 상태)

반면 suspended는 메모리 자원를 모두 잃었으므로, process가 실행 중이지 않다고 볼 수 있다. (Inactive 상태)

blocked는 자신이 요청한 이벤트(io 작업같은 오래 걸리는 작업)가 완료되면 스스로 ready 상태로 돌아갈 수 있으나, suspended는 외부의 resume 없이는 active 될 수 없다.



프로세스 상태도

헷갈리기 쉬운 개념

  • user mode에서 monitor mode로 변경 시 프로세스는 마치 ready 상태이고 kernel이 running 상태인 것처럼 생각될 수 있다. 그러나 이는 프로세스가 kernel mode로 running을 하고 있다고 보아야 한다. running, blocked, ready는 지극히 cpu 관점에서의 표현이다.
  • suspended는 메모리를 완전히 잃어버리게 되는 것이지만, 이전에 요청한 io 작업이 완료되었거나 하는 등의 작업이 수행되어 결과가 온다면, suspended blocked에서 suspended ready 상태로 상태가 변할 수는 있다. 그러나 여전히 Inactive 상태인 것은 동일하다.


참고

강의 | 운영체제(2014, 이화여대), 반효경
profile
Done is better than perfect🔥

0개의 댓글