[TIL] 2022.11.26. [Context switch]

2022. 11. 26. 20:53

프로세서의 상태 전환에 대해 알아보자.

실행 준비 완료 > ready > running > interrupt > ready > running > waiting > ready > .........

 

종료 상태 Terminated

  • 종료 시그널을 수신했을 때
  • 메인 함수에서 리턴했을 때
  • exit 함수를 호출했을 때

프로세서의 제어

-> Unix는 C 프로그램을 이용해서 다음과 같은 프로새스 제어 기능을 제공한다.

  • process ID를 가져온다
  • 프로세스를 만들거나 종료한다
  • 자식 프로세스를 제거한다 reaping child processes
  • 프로그램의 로딩 및 실행

 

* Process ID 가져오기

각 프로세스는 프로세스 ID를 갖는다.

pid_t getpid(void)
pid_t getppdi(void)

=> 호출한 프로세스 또는 그 부모 프로세스의 PID 를 리턴

 

int fork(void)

호출하는 프로세스(부모 프로세스)와 동일한 새 프로세스(자식 프로세스)를 생성

자식 프로세스는 0을 리턴

 

부모 프로세스는 자식프로세스의 pid를 리턴

 

Key points :

  • 부모와 자식은 동일한 코드를 실행한다.
    • fork로부터의 리턴 값으로 부모와 자식을 구분함.
  • 부모와 자식은 동일한 상태로 시작하지만, 각각의 사본을 갖는다.
    • 출력 파일 식별자도 copy하여 가져간다.
    • 각각의 출력문의 실행 순서는 랜덤이다.

 

exit : 프로세스를 종료하기

void exit (int stauts)
  • 종료 상태 status 값을 가지고 종료
    • 정상 리턴 시 status 0
  • atexit() function은 exit할 때 실행할 함수를 등록한다.

 

좀비(Zombies)

  • 프로세스가 종료되어도 여전히 시스템 자원을 점유한다.
    • 운영체제가 관리하는 테이블 구조체들이 있다.
  • zombie 종료되었지만, 아직 정리되지 않은 프로세스

프로세스 정리 과정 = reaping procedure

-> 부모가 자신의 종료한 프로세스에 대해 수행

-> 부모는 종료 상태 정보를 넘겨 받는다

-> 커널은 종료된 프로세스를 시스템에서 제거한다

 

 

부모가 정리하지 않은 경우

-> init process가 정리한다

-> 장기간 동작하는 프로세스들은 자신의 좀비 자식들을 정리해야 한다.

 

※ 해당 글은 충남대학교 컴퓨터융합학부 김형신 교수님의 강의 자료를 바탕으로 만들어진 것입니다. 

문제가 될 시 삭제하겠습니다.

 

 

 

 

 

BELATED ARTICLES

more