본문 바로가기
Operating System

Process Description andControl 2

by mangstory 2021. 4. 13.

 

Mode switch vs Process switch

1. Mode switch 

  • user mode와 kernel mode 사이의 전환
  • 모드가 전환되더라도 running state인  process상태는 변화되지 않는다.
    ->같은 프로세스 사이에서 mode switch일 경우 process상태는 바뀌지 않고 모드만 바뀐다는 의미
  • 위와같은 경우, saving/restoring contexts는 오버헤드를 포함한다.
  • 하드웨어적으로 동작

2. Process switch

  • 한 프로세스에서 다른 프로세스로의 전환
  • 현재 process의 context를 저장한다.
  • PCB를 update하여 ready, block 등 상태를 변화시키고 상태에 따라 적절한 queue로 이동한다.
  • 실행을 위한 다른 process를 선택한다. -> call schedule() : kernel 함수 -> overhead 발생 : 이 때의 overhead는 mode switch와 비교할 수 없이 크다.
  • running 상태인 PCB를 update하고 TLB를 update(다음 시간에 자세히 배울 예정) 후 restore context

Process 1 -> kernel : Timer interrupt 발생으로 인한 mode switch. 이 때, process 1의 시작부터 process 2가 시작되기 전 kernel의 영역까지 Process 2의 영역이라고 볼 수 있다.

Process 2 -> kernel : System call 발생으로 인한 mode switch. 위와 동일

Process 1 -> process 2 : mode switch를 동반하는 process switch

Process 2 -> process 2 : Process 끼리의 전환이 없는 mode switch ( 대표적인 예로 time slice가 끝나지 않은 timer interrupt)

이와 같이 process switch와 mode switch를 구분할 수 있다.

 

Process switch overhead

1. PCB update

2. 실행할 다음 process 찾는 일

3. cache changing에 대한 overhead

 

 

 

OS의 모델 

Nonprocess kernel : kernel 이 user processes와 분리된 형태로 제공됨

Execution within User Proceses : 현대 OS 대부분의 방식으로 프로세스마다 kernel stack을 제공한다.(물론 user stack도)

Process-based Operating System : 핵심적인 커널만 남기고 non-critical은 user kernel로 올려서 유연하게 이용하는 방식이다.

 

Kernel Stack

프로세스는 user stack과 kernel stack을 가지고 있다.

이들을 분리한 이유는 mode분리와 마찬가지로 system을 보호하기 위함이다.

 

-> process switch는 커널이 제어권을 가질 때 발생가능하다.

saving and restoring function들은 하드웨어적으로 수행된다.

 

 

process switch

->

Process switch 과정

좌측 위부터

1. 프로세스 P실행

2. process switch를 유발하는 interrupt or exception or syscall 발생

3. PCB0에 P의 state 저장

3.PCB1에 있는 프로세스 Q reload

4. 프로세스 Q실행

5. 또다시 프로세스 스위치 하고 이번엔 

6. 프로세스 Q를 PCB1에 저장하고

7. 프로세스 P를 PCB0로부터 reload 함으로써 프로세스 Q->P로 switch될 준비

 

-> 주황색 부분이 kernel에서 일어나는 일들

 

이 때, Process switch는 mode switch를 필연적으로 발생시키지만 mode switch는 process switch를 필연적으로 발생시키진 않는다!

 


자 이제부터 mode switch, process switch가 진행되는 자세한 예를 설명할 것이다.

집중!!!

 

User progam p가있다.

PC값은 다음에 실행될 yield()함수의 주소,

SP는 current top 인 메인의 함수의 시작부분

PSW는 user mode 를 담고있다.

 

여기서 yield() 함수는 process switch를 유발시키는 함수이다.

우리는 이미 알다시피 process switch가 발생하면 mode switch가 필연적이라는 것을 알 수 있다.


 

yield()함수를 살펴보자.

mov 7,$eax 를 보고 레지스터를 통하여 이동한다는 것을 알 수 있다.

int 0x80은 인텔에서 kernel에 진입하여 인터럽트를 호출하는 함수이다. (int 는 정수형을 말하는 int가 아닌 interrupt를 의미)

 

이제 yield()함수로 jump했고

PC값은 다음에 실행될 함수인 int 0x80,

SP값은 current topdls yield함수의 시작

PSW는 user mode를 가리킨다.


 

이제 int 0x80을 통해 kernel로 진입하게 된다. 

 

PC값은 다음에 수행될 함수인 old = current_pid()를 가리키고

SP는 current top인 sys_tield의 시작부분을 가리키고

PSW는 kernel mode를 가리킨다.

 

이 때, 오른쪽 아래에 보이는 stack은 kernel stack이다.

 

여기서 user stack(좌측 하단)과 kernel stack(우측 하단)을 구분하여 정리해야 한다!

 

kernel stack에는 저 5개의 값이 담길 수 있는데

saved PC는 저장된 PC를 의미하기에 process P의 관점에서 int 0x80의 다음에 수행될 어떠한 함수를 가리킨다.

saved SP는 저장된 SP인 yield함수,

saved PSW는 user mode를 나타낸다.


이제 sys_yield의 new = schedule() 로 왔다.

PC는 다음에 수행될 값인 process_switch(old,new)를

SP는 kernel stack의 current top 인 sys_yield

PSW는 kernel mode를 가리킨다.

 

kernel stack을 살펴보자.

old와 new가 바뀌었다.

 

이제 process_switch(old,new);를 실행하면서

old에는 이전 process인 P

new에는 다음 process인 Q 가 담긴다.


process_switch 함수로 진입하였다.

PC는 다음에 수행될 save_context(old)를

SP는 current top인 process_switch를

PSW를 kernel mode를 가리킨다.

 

process_switch 내에서

save_context(old)를 수행하는 것은

P의 context를 저장하는 것을 의미한다.

Process switch를 준비하는 것이다!

 

여기서 주의해야할 것은

kernel stack에 두 개의 stack frame이 생성되었다.

 

process_switch stack frame에 In_progress: 0이 담긴다.

나머지는 동일


이제 PCB가 등장한다.

save_context하면 어디에 저장되는가

바로 PCB이다!

 

PCB에는 saved PC와 saved SP가 저장된다.

 

P의 PCB의 입장에서

saved PC는 save_context(old);를

saved SP는 kernel stack의 proces_switch를 의미한다.

 

 


그 다음으로 if(in_progress ==1)로 가지만 성립하지 않기에

(현재 in_progress == 0 임)


else인

in_progress = 1;로 설정된다.


그 후 restore_context(new);를 해주면

새로운 프로세스인 Q가 나타난다.


이 때, PC와 SP는 Q를 위한 PC,SP를 가리킨다.

PCB(P)는 계속 save_context(old);를 가리키고 있음을 주시해라.


이제 프로세스 Q를 실행하다가 어떤 이유로 다시 P가 실행된다고 가정하자.

그렇다면 process switch가 일어났기에 process_switch함수로 간다고 생각할 수 있지만

PCB(P)를 주목하면 saved PC가 save_context를 가리키고 있다.

이는 process_switch함수의 처음이 아닌 P가 수행되던(saved_PC가 가리키는)

save_context로 돌아간다는 것을 의미한다.

 

 


in_progress는 아까 1로 바꿔 주었기에 if(in_progress == 1)로 들어가 return한다.


return 했으니 더이상 PCB(P)는 필요가 없다.

다시 sys_yield()함수로 돌아가고 process_switch(old,new);까지 마쳤으니

sys_yield()함수를 끝마치고


user program으로 돌아온다

 

웅장...

'Operating System' 카테고리의 다른 글

Process Scheduling  (0) 2021.04.25
Process Description and Control 3  (0) 2021.04.16
Process Description and control 1  (0) 2021.04.11
User program and System Call  (2) 2021.04.11
Operating System  (0) 2021.04.10