CH10) 프로세스와 스레드 - 2

Jobmania·2023년 6월 10일
0

운영체제

목록 보기
3/13
post-thumbnail

10-2) 프로세스 상태와 계층 구조

프로세스는 저마다 상태를 가지고 있다.

그림처럼, ' 실행 중' , '일시 중단됨' 등.. 그래서 운영체제는 이런 프로세스 상태를 PCB에 기록하여 관리한다.

운영체제는 동시에 실행되는 수많은 프로세스를 계층적으로 관리한다.

< 프로세스 상태 >

여러 프로세스들이 빠르게 번갈아 가며 실행되며 하나의 프로세스는 여러 상태를 거치며 실행된다. 그리고 운영체제는 프로세스 상태를 PCB를 통해 인식하고 관리한다. 아래가 프로세스가 가질수 있는 대표정인 상태들이다.
프로세스 상태는 운영체제마다 조금씩 차이가 있다! 😏

1. 생성 상태( NEW)

  • 이제 막 메모리에 적재되어 PCB를 할당 받은 상태
  • 준비가 완료되었다면 준비상태로 변한다.

2. 준비 상태( READY)

  • 준비 상태는 당장이라도 CPU를 할당받아 실행 할 수는 있지만, 아직 차례가 아니라 기다리고 있는 상태
  • 차례가 되면 CPU를 할당받아 실행 상태가 된다. ( =디스 패치 )

3. 실행 상태 ( RUNNING)

  • CPU를 할당 받아 실행 중인 상태
  • 할당된 시간 모두 사용시 ( 타이머 인터럽트 발생 시 ) 준비 상태로 변함
  • 실행 도중 입출력장치를 사용하면 입출력 작업이 끝날때까지 대기 상태로된다.

4. 대기 상태 ( Blocked)

  • 프로세스가 실행 도중 입출력장치를 사용하는 경우
  • 입출력 작업은 CPU에 비해 느리기 때문에 이 경우 대기상태로 접어든다.
  • 입출력 작업이 끝나면 (입출력 완료 인터럽트를 받으면) 준비상태로 간다.
  • 🧐 대기상태가 되는 이유가 입출력만 있는 것이 아니다, 일반적으로 특정 이벤트가 일어나길 기다릴때 프로세스는 대기상태가 된다.(대부분 이벤트 원인은 입출력 작업이긴 하다.)

5. 종료 상태 ( Terminated)

  • 프로세스가 종료된 상태
  • 프로세스가 종료되면 운영체제는 할당받은 PCB와 프로세스가 사용한 메모리를 정리한다.

프로세스 상태 다이어그램

< 프로세스 계층 구조 >

프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할수 있다.
새 프로세스를 생성한 프로세스 : 부모 프로세스
부모 프로세스에 의해 생성된 프로세스 : 자식 프로세스

부모 프로세스와 자식 프로세스는 별개의 프로세스이므로 각기 다른 PID를 가짐, 일부 운영체제에서는 자식 프로세스 PCB에 부모 프로세스 PID(PPID)를 명시하기도 한다.

즉, 프로세스가 여러 계층적으로 구성될 수 있다.

프로세스 계층 구조의 예시

1. 최초의 프로세스는 로그인 프로세스인 자식프로세스를 생성
2. 로그인 프로세스는 BASH, BASH는 VIM 프로세스를 생성한다.

최초의 프로세스 확인하기

< 프로세스 생성 기법>

🤐 Windows 운영체제와 큰 관련이 없다 하지만 다른 os는 사용.

부모와 자식 프로세스는 어떻게 코드를 만들어내고 실행할까?

복제와 옷 갈아입기

  • 부모 프로세스는 fork 시스템 호출을 통해 자신의 복사본을 자식 프로세스로 생성
  • 자식 프로세스는 exec 시스템 호출을 통해 자신의 메모리 공간을 다른 프로그램으로 교체

fork 시스템 호출

  • 자기 자신의 프로세스의 복사본을 만듬
  • 메모리의 내용, 열린파일의 목록등이 자식 프로세스에 상속
  • 다만 메모리의 주소나 PID값을 다르다!

exec 시스템 호출

fork 시스템 호출이 끝났다면 exc시스템(갈아입기) 호출이 된다.

  • 메모리 공간을 새로운 프로그램으로 덮어쓰기
  • 코드/ 데이터 영역은 실행할 프로그램 내용으로 바뀌고 나머지 영역은 초기화

정리

- 프로세스의 계층 구조를 이루는 과정은 fork와 exec가 반복되는 과정

  • 만약 fork후 exec를 실행하지 않다면 동일한 프로세스를 실행하는 구조일 것이다.
profile
HelloWorld에서 RealWorld로

0개의 댓글