[운영체제] 프로세스 상태와 계층 구조

byeol·2023년 3월 21일
0
post-thumbnail

오늘은 프로세스 상태와 계층 구조에 대해서 배웠다.

프로세스 상태는 PCB에 기록되는 정보 중 하나이다.
CPU를 할당받은 상태인지, 할당받기를 기다리는 상태인지 등의 내용이 기록된다.

프로세스 사이에서도 계층 구조가 생기는데 그 이유는 프로세스가 다른 프로세스를 실행하도록 만들 수 있기 때문이다.
이처럼 프로세스 사이에는 계층 구조가 형성된다.

오늘은 이 두 가지 부분에 대해서 자세히 알아본다.

오늘도 🏃‍♀️🏃‍♂️🏃🏃‍♂️🏃‍♂️🏃‍♀️🏃‍♀️🏃‍♀️

프로세스 상태

여러 프로세스는 빠르게 번갈아 가며 실행된다.
따라서 프로세스 상태도 빠르게 바뀐다.

위와 같은 도표를 프로세스 상태 다이어그램(process state diagram)이라고 한다.

무슨 의미인지 각 상태를 살펴보자.

  • 생성 상태(new)
    메모리에 적재되어 PCB를 할당받은 상태
  • 준비 상태(ready)
    CPU를 할당 받기를 기다리는 상태
    프로세스가 CPU를 할당받기를 기다리는 준비 상태에서 할당받는 실행 상태로 전환되는 것을 디스패치(dispatch)라고 한다.
  • 실행 상태(running)
    CPU를 할당받아 실행중인 상태
    • 할당 받은 시간을 모두 사용하면 다시 준비 상태가 된다
    • 실행 도중 입출력장치로부터 인터럽트가 오면 입출력장치의 작업이 끝날때까지 대기 상태가 된다.
  • 대기 상태(blocked)
    입출력장치의 작업이 끝날 때까지 기다리는 상태로 만약 입출력장치의 작업이 끝나면 CPU의 할당을 기다리는 준비 상태가 된다.
  • 종료 상태(terminated)
    프로세스가 종료된 상태로 운영체제는 PCB와 프로세스가 사용한 메모리를 정리한다.

컴퓨터 내의 여러 프로세스는 위와 같이 생성, 준비, 실행, 대기, 종료 상태를 거친다. 이 상태를 PCB에 기록하며 운영체제는 PCB에 기록된 상태정보를 참고해서 프로세스들을 관리한다.

프로세스 계층 구조

프로세스는 실행 도중에 다른 프로세스를 호출해서 실행시킬 수 있다. 그 다른 프로세스는 또 다른 프로세스를 호출할 수 있다.

결국 프로세스는 계층구조를 가지게 된다.

이처럼 새 프로세스를 생성한 프로세를 부모 프로세스라고 한다.
그리고 부모 프로세스에 의해서 생성된 프로세스를 자식 프로세스 라고 한다.

프로세스 사이에는 PID가 다르며 일부 운영체제에서는 자식 프로세스의 부모 프로세스의 PID인 PPID(Parent PID)가 PCB에 기록된다.

위와 같이 프로세스들은 트리 구조를 가지는 계층 구조를 띄며 이를 프로세스 계층 구조라고 한다.

최초의 프로세스 확인 방법
pstree 명령어를 통해 확인 가능
최초의 프로세스의 이름이 운영체제마다 다르다.
유닉스 : init
리눅스 : systemd
MacOS : launchd
최초의 프로세스의 PID는 항상 1번이다.

프로세스 생성 기법 (fork와 exec)

fork와 exec는 시스템 호출이다.

시스템 호출이란?
"사용자 모드"에 있는 프로세스가 자원을 할당받기 위해서 운영체제 서비스를 이용해야하는데 그 때 운영체제에게 운영체제 서비스를 이용하기 위해 "커널 모드"로 전환해달라는 요청이다.

결국 fork와 exec는 자원을 할당받기 위한 운영체제의 서비스를 이용하는 것이다.
그림 출처: https://www.cse.unsw.edu.au/~cs1521/18s2/lectures/week07/slide038.html

  • fork 시스템 호출
    fork 시스템 호출은 부포 프로세스가 자신을 복제해서 자식 프로세스를 생성한다. 복제함으로써 자신의 자원을 자식 프로세스에 상속한다.(메모리의 내용, 열린 파일의 목록 등) 복제하지만 PID와 메모리의 주소는 다르다.

  • exec 시스템 호출
    exec 시스템 호출은 복제된 프로세스의 새로운 프로그램을 덮어쓴다. 즉 새로운 프로그램으로 전환된다.
    따라서 코드 영역(기계어로 된 명령어가 저장된)과 데이터 영역(대표적으로 전역 변수가 저장된)의 내용이 실행할 프로그램으로 바뀌고 나머지 영역을 초기화된다.

계층 구조를 이룬다는 것은 fork,exec의 과정이 반복되어 실행되며 이루어진다는 것

그러나 무조건 fork 다음에 exec의 시스템 호출이 일어나는 것은 아니다.

fork만 이루어지기도 한다.
결국 코드영역과 데이터 영역을 상속받아 다른 PID를 가진채 병행하여 실행하고 있는 것이다.

profile
꾸준하게 Ready, Set, Go!

0개의 댓글