ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Process 실행 원리와 context switching
    운영체제 2022. 7. 10. 18:13

    틀린 내용이 있을 수도 있습니다! 

    틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다!

     

     

     

     

    프로세스 실행 원리

    1. 프로세스가 실행되기 전 프로세스는 HDD나 SSD에 올라가 있으며, 이 상태를 job 또는 Program이라고 한다.

    2. job을 실행시키면 프로세스 당 PCB가 하나 생성되어 시스템 커널에 등록된다. 커널에 등록된 후(커널 메모리에 할당) 메모리 할당 받기전 상태를 created 상태라고 한다.  

    3. created 상태에 있는 프로세스는 메모리 할당을 받게 되면 프로세스 상태는 ready 상태로 변경된다. 이 때부터 프로세스는 프로세서 외 필요한 모든 자원을 할당 받은 상태가 되며, 프로세서만 할당 받게 되면 즉시 실행가능한 상태가 된다. 

    4. 프로세스 스케줄링에 의해 해당 프로세스를 실행할 차례가 되면, 프로세스는 CPU 자원을 할당 받게 되면서 running 상태로 변경한다. 

    5. 만약 해당 프로세스가 I/O 자원이 필요해 자원 할당 요청을 하게 된다면 해당 프로세스가 사용중이던 CPU 자원을 반납 후, 프로세스는 asleep 상태가 된다. asleep 상태는 프로세서 외 다른 자원을 기다리는 상태이며, 이 때 자원 할당은 system call에 의해서 이루어진다. 

    6. 프로세스가 I/O 자원을 할당 받았다면 ready 상태로 변경되며, 다시 4번 과정을 진행한다.   

    7. 만약 프로세스가 커널에 등록된 후 메모리를 할당 받지 못하거나 빼앗긴다면, suspended 상태로 변경된다. 메모리가 부족해 메모리 자원을 빼앗기면, 프로세스는 통으로 swap device에 보내져 보관되며, 필요할 때 swap device에서 꺼내 사용한다. 이렇게 메모리에서 swap space로 보내지는 것을 swap out이라고 한다. swap out과 page out은 다르므로 둘을 헷갈리지 말자.

    8. 프로세스 수행이 끝난다면, 모든 자원을 반납 후 terminated/zombie state가 된다. 이는 PCB에 일부 필요한 정보만 남긴 상태이며 이후 프로세스 관리를 위한 정보 수집에 사용된다. 이 state가 좀비 프로세스와 관련이 있는 프로세스인데, 만약 부모 프로세스가 자식 프로세스의 PCB를 회수하지 않는다면, 자식 프로세스는 좀비 프로세스가 된다. 

     

    PCB(process control block)에는 어떤 내용들이 있을까?

    PCB는 운영체제가 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스로 프로세스에 대해 다음과 같은 내용들을 관리한다. 

    1. 프로세스 식별자: Process ID

    2. 프로세스 카운터: 이 프로세스가 다음에 실행할 명령어의 주소를 가르킨다. 

    3. 스케줄링 정보 - 프로세스 우선순위와 같은 스케줄링 정보를 관리 

    4. 프로세스 상태 - 프로세스에 어떤 자원이 할당되었는지, 어떤 자원을 요청했는지에 대한 정보 (created, ready, running...)

    5. 입출력 상태 정보 - 프로세스가 할당 받은 입출력 장치, 파일 등에 대한 정보

    6. context 저장 영역 - CPU 레지스터 및 일반 레지스터 상태 

    7. 계정 정보 - page table, 소유자, 부모 등을 관리  

     

    context와 context switching 

    context는 CPU가 해당 프로세스를 실행시키기 위한 관련된 프로세스 정보들의 집합이다.

    context switching은 실행 중인 프로세스의 context를 PCB에 저장하고, 앞으로 실행할 프로세스의 context를 PCB로부터 가져와 프로세스를 실행시키는 작업이다. 

    프로세스 수준의 context switching은 비용이 크기 때문에 이에 대한 비용을 줄이기 위해 프로세스 내에서 스레드 수준의 context switching을 사용하는 것이 좋다. 스레드 수준은 프로세스 내 메모리 영역 중 코드, 힙, 데이터 영역을 공유하므로 프로세스 수준의 context switching 보다 효율적인 것이다. 

     

    Interrupt 발생시 프로세스는 어떻게 동작할까?

    인터럽트란 CPU가 프로그램을 실행하고 있을 때, 하드웨어의 입출력이나 어떤 예외 상황이 발생해서 처리가 필요할 경우, 프로세서에게 알려 처리할 수 있도록 하는 것을 의미한다. 

    1. I/O가 발생하면 인터럽트가 발생하여 시스템 콜을 CPU에게 전달한다.

    2. CPU는 현재 실행 중인 프로세스 일을 마무리하고 프로세스의 context를 PCB에 저장한다. 이를 context saving이라 한다. 

    3. 이후 CPU는 인터럽트 루틴을 수행한다. 

    4. CPU의 인터럽트 루틴이 끝나면 PCB에서 다음에 수행될 프로세스의 정보를 가져와 실행한다. 이를 context restoring이라 한다. 이 때 가져오는 context는 이전에 수행되었던 프로세스가 아닌 다른 프로세서의 context일 수도 있다.  

     

    이렇게 interrupt 발생시 context switching이 발생하며 다음과 같은 경우에도 context switching이 발생한다.

    1. I/O 인터럽트 

    2. CPU 사용 시간 만료 

    3. 자식 프로세스 fork

    4. 인터럽트 처리를 기다릴 때 

     

    반응형

    댓글

Designed by Tistory.