04. 프로세스2

YeJi Kim·2023년 1월 19일
0

운영체제

목록 보기
4/7

스레드

  • 스레드: 프로세스를 구성하는 실행 단위. 프로세스를 구성하는 실행의 흐름 단위. 하나의 프로세스는 여러 개의 스레드를 가질 수 있다. 스레드는 프로세스 내에서 실행에 필요한 최소한의 정보(프로그램 카운터를 포함한 레지스터, 스택)만을 유지한 채 프로세스 자원을 공유하며 실행된다.

멀티 프로세스와 멀티 스레드

  • 멀티 프로세스: 여러 프로세스를 동시에 실행하는 것
  • 멀티 스레드: 여러 스레드로 프로세스를 동시에 실행하는 것
  • 멀티 프로세스와 멀티 스레드의 차이는?
    • 프로세스끼리는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유한다는 큰 차이점이 있다.
    • 멀티 프로세스는 모든 자원이 별도로 사용되기 때문에 중복과 이에 따른 낭비가 발생할 수 있다. 하지만 자원을 공유하지 않기 때문에 각각의 프로세스가 독립적으로 실행되고 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향을 주지 않는다.
    • 멀티 스레드의 경우, 같은 프로세스 내의 모든 스레드는 동일한 주소 공간의 코드, 데이터, 힙 영역 등의 프로세스 자원을 공유한다. 이에 따라, 메모리를 더 효율적으로 사용할 수 있고 프로세스의 자원을 공유하기 때문에 서로 협력과 통신에 유리하다.

프로세스 간 통신(IPC; Inter-Process Communication)

  • 파일을 통한 프로세스 간 통신
  • 공유 메모리: 프로세스들이 서로 공유하는 메모리 영역을 두어 데이터를 주고받을 수 있다.

CPU 스케줄링

운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것을 CPU 스케줄링이라고 한다.

프로세스마다 우선순위가 다르다. 우선순위가 높은 프로세스란 빨리 처리해야 하는 프로세스를 의미한다.


스케줄링 큐

운영체제가 매번 일일이 모든 PCB를 검사하여 먼저 자원을 이용할 프로세스를 결정하는 일은 매우 번거로우며 오랜 시간이 걸리는 비효율적인 일이다.

운영체제는 CPU, 메모리, 입출력 장치 등의 자원을 이용하고 싶은 프로세스들을 줄 세워서 관리한다. 이 줄을 스케줄링 큐라고 한다.

운영체제는 큐에 삽입된 PCB들 중 우선순위가 높은 프로세스를 먼저 실행한다.

  • 준비 큐(ready queue): CPU를 이용하고 싶은 프로세스들이 서는 줄
  • 대기 큐(waiting queue): 입출력 장치를 이용하기 위해 대기 상태에 접어든 프로세스들이 서는 줄

선점형과 비선점형 스케줄링

  • 선점형 스케줄링: 운영체제가 프로세스로부터 자원을 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링 방식
    • 장단점: 어느 한 프로세스의 자원 독점을 막고 프로세스들에 골고루 자원을 배분할 수 있다. 하지만 그만큼 문맥 교환 과정에서 오버헤드가 발생할 수 있다.
  • 비선점형 스케줄링: 하나의 프로세스가 자원을 사용하고 있다면 그 프로세스가 종료되거나 스스로 대기 상태에 접어들기 전까지 다른 프로세스가 끼어들 수 없는 스케줄링 방식.
    • 장단점: 문맥 교환의 횟수가 선점형 스케줄링보다 적기 때문에 비교적 문맥 교환에서 발생하는 오버헤드가 적다. 하지만 모든 프로세스가 골고루 자원을 사용할 수 없으며 아무리 급한 프로세스이더라도 하나의 프로세스가 이미 자원을 사용 중이라면 무작정 기다려야 한다.

CPU 스케줄링 알고리즘

  • 선입선출 스케줄링 (FCFS 스케줄링)
    • First Come First Served Scheduling.
    • 준비 큐에 삽입된 순서대로 프로세스들을 처리하는 비선점형 스케줄링 방식
    • 호위 효과(convoy effect): CPU 사용 시간이 긴 프로세스에 의해 사용 시간이 짧은 프로세스들이 오래 기다리는 현상
  • 최단 작업 우선 스케줄링 (SJFS 스케줄링)
    • Shortest Job First Scheduling.
    • 준비 큐에 삽입된 프로세스들 중 CPU 이용 시간의 길이가 가장 짧은 프로세스부터 실행하는 스케줄링 방식.
  • 라운드 로빈 스케줄링
    • Round Robin Scheduling.
    • 정해진 타임 슬라이스(각 프로세스가 CPU를 사용할 수 있는 정해진 시간)만큼의 시간 동안 돌아가며 CPU를 이용하는 선점형 스케줄링. 타임 슬라이스 내에 프로세스가 완료되지 않았다면 다시 큐의 맨 뒤에 삽입된다.
    • 타임 슬라이스의 크기가 매우 중요하다. 타임 슬라이스가 지나치게 크면 사실상 선입선출 스케줄링과 다를 바가 없어 호위 효과가 생길 여지가 있고, 타임 슬라이스가 지나치게 작으면 문맥 교환에 발생하는 비용이 커 CPU는 프로세스를 처리하는 일보다 프로세스를 전환하는 데에 시간을 쏟게 된다.
  • 최소 잔여 시간 우선 스케줄링 (SRT 스케줄링)
    • Shortest Remaining Scheduling.
    • 최단 작업 우선 스케줄링 알고리즘과 라운드 로빈 알고리즘을 합친 스케줄링 방식이다.
    • 정해진 타임 슬라이스만큼 CPU를 사용하되, CPU를 사용할 다음 프로세스는 남아있는 작업 시간이 가장 적은 프로세스가 선택된다.
  • 우선순위 스케줄링 (Priority Scheduling)
    • 프로세스들에 우선순위를 부여하고, 가장 높은우선순위를 가진 프로세스부터 실행하는 스케줄링 알고리즘.
    • 기아 현상: 우선순위가 높은 프로세스를 우선하여 처리하기 때문에 우선 순위가 낮은 프로세스는 계속 실행되지 못한다.
      • 에이징: 오랫동안 대기한 프로세스의 우선순위를 점차 높이는 방식
  • 다단계 큐 스케줄링
    • 우선순위별로 준비 큐를 여러 개 사용하는 스케줄링 방식. 우선순위가 가장 높은 큐에 있는 프로세스를 먼저 처리하고, 그 다음 우선순위 큐에 있는 프로세스들을 처리한다.
    • 프로세스 유형별로 우선순위를 구분하여 실행하는 것이 편리해진다. 큐별로 타임 슬라이스를 여러 개 지정할 수 있고 큐마다 다른 스케줄링 알고리즘을 사용할 수 있습니다.
  • 다단계 피드백 큐 스케줄링
    • 다단계 큐 스케줄링의 발전된 형태. 다단계 큐 스케줄링과 비슷하게 작동하지만 다단계 피드백 큐 스케줄링은 프로세스들이 큐 사이를 이동할 수 있다. 이로써 기아 현상을 방지한다.
    • 즉, 다단계 피드백 큐 스케줄링은 프로세스들이 큐 사이를 이동할 수 있는 방식이기 때문에 낮은 우선순위 큐에서 너무 오래 기다리고 있는 프로세스가 있다면 점차 우선순위가 높은 큐로 이동시키는 에이징 기법을 적용하여 기아 현상을 예방할 수 있다.

프로세스 생성

  • 좀비 프로세스: 부모 함수가 wait 함수를 호출하지 않아 자식 프로세스의 최소한의 정보가 메모리에 남아 있는 경우, 자식 프로세스를 좀비 프로세스라고 한다. 좀비 프로세스는 최소한의 정보만을 가지고 있어 큰 성능 저하를 야기하지 않지만 운영체제는 한정된 PID를 가지고 있으므로 좀비 프로세스가 PID를 차지하며 다른 프로세스 실행을 방해한다.

  • 고아 프로세스: 부모 프로세스가 자식 프로세스보다 먼저 종료되는 경우 부모 프로세스가 없는 자식 프로세스. 운영체제는 이러한 프로세스를 허용하지 않으며 부모 프로세스가 먼저 종료되면 자식 프로세스의 새로운 부모 프로세스로 init(PID = 1)가 설정된다.

    • init 프로세스는 자식 프로세스가 종료될 때까지 기다린 후 wait 함수를 호출하여 고아 프로세스의 종료 상태를 회수하여 좀비 프로세스가 되는 것을 방지한다.
    • 고아 프로세스는 프로세스 자신이 시스템의 자원을 낭비할 수 있고, 시스템이 프로세스가 종료될 때까지 추적을 해야 하기 때문에 성능 저하의 원인이 된다.
  • 프로세스 종료

    • 자발적 종료
      • 마지막 statement 수행 후 부모에게 output data 보내고 운영체제에게 이를 알려준 후 종료 프로세스의 각종 자원들이 운영체제에 반납된다.
    • 비자발적 종료
      • 부모 프로세스가 자식 프로세스를 강제 종료시키는 경우
      • kill 명령어 등을 통해 강제 종료되는 경우

[참고자료]
혼자 공부하는 컴퓨터구조+운영체제(저자: 강민철, 출판사: 한빛미디어)
profile
이전의 기록들 👉 https://blog.naver.com/reviewerkyj

0개의 댓글