3-1. Process 1

운영체제 – 이화여대 KOWC 공개강의

 

 

프로세스의 문맥(context). 프로그램이 무엇을 어떻게 실행했는지, 어디까지 실행을 했는지, 현재 시점이 어떤 상태에 있는지를 정확하게 나타내기 위해 사용되는 개념이 문맥이다. CPU 수행 상태를 나타내는 하드웨어 문맥(PC와 각종 레지스터에 어떤 값이 들어있었는가), 프로세스 주소 공간 code, data, stack에 어떤 값이 들어 있었는가, 프로세스가 하나 실행 될때 마다 운영체제는 그 프로그램을 관리하기 위한 PCB를 두고 이 프로그램에는 얼마나 CPU를 줘야할지 메모리를 얼마나 줘야할지 등을 관리한다.

이것을 왜 알아야 하는가? 프로세스가 하나 혼자 실행된다면 이러한 프로세스 문맥을 알 필요는 없겠지만 현대의 컴퓨터 시스템에서는 타임 쉐어링 또 멀티태스킹, 프로세스들이 번갈아가며 실행이 되기 때문에 하나의 프로세스가 CPU를 잡고 실행하다가 또 CPU를 놓고 다른 프로세스로 넘어가는 방식으로 되어있다. 따라서 하나의 프로세스가 CPU를 사용하고 있던 정보를 백업해 놓지 않으면, 즉 프로세스의 문맥을 모르면 다음번 CPU를 해당 프로그램이 잡았을때 맨 처음부터 다시 실행해야 한다던가 해야 할 것이다. 그래서 프로세스의 문맥을 정확하게 파악하고 있으면서 어디까지 실행이 되었는지를 알고 있어야 바로 그 다음 시점의 인스트럭션부터 실행할 수 있다.

admitted = 메모리에 올라가는 것을 admitted

PCB. Process state(running, ready, blocked). 위 프로세스의 상태 그림의 queue 부분을 보면 먼저 온 프로세스가 먼저 실행되는 것처럼 해놓았지만(라운드 로빈) 사실 정확한 CPU 스케줄링은 queue에 있는 프로세스 중에 우선순위가 높은 프로세스에게 다음번에 CPU를 넘겨주고 하는 매커니즘이 있다.

문맥교환. 프로세스에서 CPU를 사용하고 있었던 CPU의 상태 그대로를 저장한다.
프로세스A에서 프로세스B로 문맥교환이 일어나면 cash memory flush(캐시 메모리 삭제)가 발생해야 한다. 그런데 유저모드에서 커널모드로 갔다가 다시 기존의 프로세스 유저모드로 돌아가는 경우는(위 그림의 1의 경우) 상당히 큰 오버헤드를 발생시키는 캐시 메모리 플러시가 발생하지 않는다.

스케줄러. 장기 스케줄러는 프로세스에 메모리를 주는 문제를 다룬다. degree of Multiprogramming. 메모리에 올라가 있는 프로세스의 수를 제어하는 것이 롱 텀 스케줄러의 역할이다. 메모리에 너무 많은 수의 프로세스가 올라가면 컴퓨터 전체 성능이 안좋아진다. 당장 필요한 부분의 코드도 메모리에 올라와 있지 않게 되는 것이기 때문이다. 보통 우리가 사용하는 시스템에서는 장기 스케줄러가 없다. 우리가 사용하는 시스템에서는 Medium-Term Scheduler를 통해 degree of Multiprogramming이 제어된다. 롱텀 스케줄러에서는 애초에 메모리에 올라갈 수 있는 프로세스의 수를 제어했었는데 중기 스케줄러에서는 일단 메모리에 프로세스들을 다 올려놓고 너무 많이 올라가 있으면 미드 텀 스케줄러가 프로세스에게서 메모리를 뺏는다.

중기 스케줄러때문에 추가된 프로세스의 상태가 있다 그것은 Suspended(stopped) 상태이다. 이는 중기 스케줄러에게 메모리를 뺏긴 프로세스의 상태이다. Suspended 상태의 프로세스는 언제 다시 위의 상태로 올라갈 수 있느냐? 사람이 그 프로세스를 다시 재개시켜주어야 한다.

프로세스가 자기 코드를 실행하다가 시스템 콜을 해서 운영체제의 코드가 실행중일 때에도 사용자 프로세스가 커널모드에서 러닝 상태라고 한다. (운영체제가 러닝 상태이다 라고 하지 않는다.) 위 그림은 사용자 프로세스의 상태도를 나타낸다.(운영체제의 상태X)
Suspended 상태는 기본적으로 메모리를 완전히 잃어버리는 상태를 나타낸다.(Swap out) 따라서 CPU관점에서는 아무 일도 할 수 없다. IO와 같은 작업이 진행 중에 Suspended가 되었다면  I/O가 끝나고 Suspended Ready 상태로는 넘어갈 수 있다.

댓글 남기기

Close Menu