3 - 프로세스 관리와 생성

우하하·2024년 11월 6일

운영체제

목록 보기
3/7
post-thumbnail

1. 프로세스의 개념

프로세스란?

  • 실행중인 프로그램을 뜻한다.

프로세스의 문맥(context)

  • 프로세스가 현재 어떤 상태에서 수행되고 있는지 정확히 규정하기 위해 필요한 정보를 의미

프로세스 문맥의 세 가지 분류

1️⃣ 하드웨어 문맥
- CPU의 수행 상태를 나타냄
- 프로그램의 카운터 값과 각종 레지스터에 저장하고 있는 값들을 의미
2️⃣ 프로세스의 주소 공간
- 프로세스는 코드, 데이터, 스택으로 구성된 자신만의 독자적인 주소 공간을 가짐
3️⃣ 커널상의 문맥
- 프로세스를 관리하기 위한 자료구조(PCB와 커널 스택)

2. 프로세스의 상태

프로세스는 상태가 변경되며 수행된다!

✔️ 활성 상태(active)

  • 생성(create)
    • 프로세스가 메모리에 올라와 실행 준비를 완료한 상태. 프로세스를 관리하는 데 필요한 PCB가 생성된다
  • 준비(ready)
    • 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태
  • 실행(running, execute)
    • 준비 상태에 있는 프로세스중 하나가 CPU를 보유하고, 기계어 명령을 실행하고 있는 상태
  • 대기(blocking)
    • 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태
  • 완료(terminated)
    • 실행 상태의 프로세스가 주어진 시간 동안 작업을 마치면 완료 상태로 진입함.
    • PCB가 사라진 상태

✔️ 비활성 상태 (inactive)

  • 휴식(pause)
    • 프로세스가 작업을 일시적으로 쉬고 있는 상태
  • 보류(suspended)
    • 중기 스케줄러의 등장으로 추가된 상태
    • 프로세스가 외부적인 이유로 인해 메모리에서 쫓겨난 상태
    • 메모리에 너무 많은 프로세스가 올라와 있을 때
    • 프로그램에 오류가 있어서 실행을 미루어야할 때
    • 입출력을 기다리는 프로세스의 입출력이 계속 지연될 때
    • 통째로 디스크에 swap out 된다

문맥교환이란?

실행시킬 프로세스를 변경하기 위해 원래 수행 중이던 프로세스의 문맥을 저장하고 새로운 프로세스의 문맥을 세팅하는 과정을 문맥교환이라고 한다.

  • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
  • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

3. 프로세스 제어블록(PCB)

PCB(Process Controll Block)란?

운영체제가 시스템내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보들을 담는 커널 내의 자료구조

  • 프로세스의 구성 요소
    • 프로세스의 상태
    • 프로그램 카운터의 값
    • CPU 레지스터의 값
    • CPU 스케줄링 정보
    • 메모리 관리 정보
    • 자원 사용 정보
    • 입출력 상태 정보

4. 스케줄러

운영체제 안에 있는 코드의 일부!

✔️ 장기 스케줄러(Job scheduler)

  • 시분할 시스템에는 장기스케줄러가 없음! (무조건 ready)
  • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
  • 프로세스에 메모리를 주는 문제
  • degree of Multiprogramming: 메모리에 프로세스 여러개가 올라가는 것

✔️ 단기 스케줄러(CPU scheduler)

  • 자주 호출됨(타이머 인터럽트가 걸릴 때 마다 호출)
  • 어떤 프로세스를 다음번에 running 시킬지 결정
  • 프로세스에 CPU를 주는 문제

✔️ 중기 스케줄러(Swapper)

  • 시분할 시스템이 장기스케줄러를 두지 않는 대신에 두는 스케줄러
  • 메모리가 부족할 때 특정 프로세스를 쫓아내는 역할
  • 프로세스에서 메모리를 뺏는 역할
  • degree of Multiprogramming을 제어

5. 프로세스의 생성

"시스템이 부팅된 후 최초의 프로세스는 운영체제가 직접 생성하지만 그다음부터는 이미 존재하는 프로세스가 다른 프로세스를 복제 생성하게 된다"
(운영체제와 정보기술의 원리, 반효경, 2023, p. 131)

  • 프로세스를 생성한 프로세스: 부모 프로세스
  • 새롭게 생성된 프로세스: 자식 프로세스
  • 프로세스는 족보와 같은 계층을 형성하게 된다.
  • 자식이 먼저 죽고, 이에 대한 처리는 자식을 생성했던 부모 프로세스가 담당

✔️ 자원을 획득하는 방법

  • 운영체제로 부터 직접 할당
  • 부모 프로세스와 자원을 공유해서 사용

✔️ 프로세스가 수행되는 모델

  • 부모와 자식이 공존하며 수행되는 모델
    • 자식과 부모가 같이 CPU를 획득하기 위해 경쟁하는 관계가 됨
  • 부모가 자식의 종료를 기다리는 모델(wait)
    • 자식 프로세스가 종료될 때까지 부모 프로세스는 아무 일도 하지 않고 봉쇄 상태에 머물러 있음
    • 자식 프로세스가 종료되면 그때 부모 프로세스가 준비 상태가 되어 다시 CPU를 얻을 권한이 생김

✔️ 주소 공간

  • 자식은 부모의 주소 공간을 그대로 복사해서 생성함
  • 자식이 새로운 프로그램을 수행하기 위해서는 그 위에 새로운 주소공간의 주소 공간을 덮어씌움

5.1 프로세스 생성(유닉스)

✔️ fork() 시스템 콜

  • 유닉스에서는 fork() 시스템 콜을 통해 새로운 자식 프로세스를 생성함
  • 프로세스 ID를 제외한 모든 정보를 그대로 복사
  • 주소 공간은 따로 갖게 되지만 주소 공간 내에는 동일한 내용을 가짐
  • 함수의 결괏값으로 부모에게는 양수를 주고 자식에게는 0을 줌

✔️ exec() 시스템 콜

  • exec() 시스템 콜을 통해 새로운 프로그램으로 주소 공간을 덮어씌울 수 있음
  • 프로세스가 지금까지 수행했던 상태를 잊어버리고 그 주소 공간을 완전히 새로운 프로그램으로 덮어씌운 후 새로운 프로그램의 첫 부분부터 다시 실행을 시작하도록 함

✔️ wait() 시스템 콜

  • 자식 프로세스가 종료되기를 기다리며 부모 프로세스가 봉쇄 상태에 머무르도록 함
  • 자식 프로세스가 종료되면 부모를 준비 상태로 변경시켜 작업을 재개

5.2 프로세스 종료

1️⃣ 자발적 종료

  • 프로세스가 마지막 명령을 수행한 후 운영체제에 이를 알려줌
  • 프로그램이 마쳐지는 코드 부분에 exit() 시스템 콜 넣어줌

2️⃣ 비자발적 종료(강제 종료)

  • 부모 프로세스가 자식 프로세스의 수행을 강제로 종료시킴(abort())
  • 자식이 할당 자원의 한계치를 넘어서는 많은 양의 자원을 요구할 때
  • 자식에게 할당된 작업이 더 이상 필요하지 않을 때
  • 부모 프로세스가 종료(exit)되는 경우 -> 단계적인 종료 발생

6. 프로세스 간의 협력

✔️ 독립적인 프로세스

  • 프로세스는 각자의 독립적인 주소 공간을 가지고 수행되므로 원칙적으로 프로세스가 다른 프로세스의 주소 공간을 참조하는 것은 허용되지 않음

✔️ 협력 프로세스(IPC: Inter-Process Communication)

  • 독립적인 프로세스들이 협력할 때 업무의 효율성이 증진될 수 있음
  • 프로세스간 협력 매커니즘
    1️⃣ 메세지 전달
    커널을 통해 메시지를 전달함
    2️⃣ 공유메모리
    프로세스들이 주소 공간의 일부를 공유함 -> 서로의 데이터에 일관성 문제가 유발될 수 있음

참조
👨🏻‍🏫 이화여자대학교 운영체제 강의
📚 운영체제와 정보기술의 원리
📚 쉽게 배우는 운영체제

profile
Hello World!

0개의 댓글