프로세스

몽이·2022년 7월 1일
0

운영체제

목록 보기
3/9

프로세스(Process)

1) 프로세스의 개념

  • 프로그램이 주기억 장치에 적재되어 CPU에 의해 실행 과정에 있을 때 프로세스라고 부른다.
  • 목적 또는 결과에 따라 발생되는 사건(프로시저)들의 과정이다.
  • CPU가 할당되는 실체이며 PCB*가 정의하는 실체이다.
    • *PCB(Process Control Block) : 프로세스들의 정보를 기록한 테이블

2) 프로세스 상태

(1) 프로세스 주요 상태

  • 준비(Ready) 상태
    • 기억 장치에 존재하는 프로세스를 선택하여 CPU의 할당을 기다리는 시점
    • 프로세스의 대기 상태가 종료되어 다시 CPU의 할당을 기다리는 시점
  • 실행(Run) 상태 : 대기 상태의 프로세스가 CPU를 할당받아 작업이 진행되는 상태
  • 대기(Block) 상태 : 프로세스의 특정 작업을 진행하기 위해 입출력 작업 등을 기다리는 상태
  • 종료(Exit) 상태 : 프로세스 실행이 완료되어 종료된 상태

(2) 상태 전이 과정

  • Dispatch : 준비 상태의 프로세스가 실행 상태로 변하는 과정
  • Time Run Out : 실행 상태의 프로세스가 할당된 시간을 다 사용했지만 아직 작업을 끝내지 못한 경우 다시 준비 상태로 넘어가는 과정
  • Block : 실행 상태의 프로세스가 입출력에 의한 작업을 위해 대기 상태로 변하는 과정
  • Wake Up : 입출력 등이 완료되어 대기 상태의 프로세스가 준비 상태로 변하는 과정

(3) 프로세스의 자원 이용 절차 : 프로세스는 운영체제의 자원을 요청, 사용, 해제하는 순으로 진행된다.

3) 인터럽트 처리(Interrupt Processing)

(1) 인터럽트 처리

  • 프로세스 수행 중에 다른 프로세스를 수행하거나 외부 입력 장치에 의해 현재 수행 중인 프로세스를 중단되는 상태를 말한다.
  • 잠시 중단된 프로세스의 상태는 다시 실행을 시작하기 위해 중단되었던 시점의 정보를 저장해야 한다.
  • 입출력 연산, 하드웨어 실패, 프로그램 오류 등에 의해서 발생한다.

(2) 인터럽트 처리 절차

  • 인터럽트 요청
  • 프로그램 실행 중단 : 현재 실행 중이던 Operation까지 수행
  • 현재의 프로그램 상태 보존 : PCB(Process Control Block), PC(Program Counter) 등에 저장
  • 인터럽트 처리루틴 실행 : 인터럽트를 요청한 장치를 식별
  • 인터럽트 서비스 루틴 실행
    • 인터럽트 원인을 파악, 레지스터 상태를 보존
    • 우선순위가 더 높은 인터럽트가 발생하면 또 다시 인터럽트를 수행
  • 상태 복구 : 인터럽트 발생 시 저장해둔 PCB, PC를 통해 복구
  • 중단된 프로그램 실행 재개 : 이전에 수행 중이던 프로그램을 재개

(3) 인터럽트의 종류

  • 외부 인터럽트
    • 전원 이상(Power fail) 인터럽트 : 정전이나 전원공급장치의 이상
    • 기계착오(Machine check) 인터럽트 : CPU 등의 기능적 오류
    • 입출력(Input Output) 인터럽트 : 입출력 데이터의 오류
  • 내부 인터럽트
    • 프로그램 검사(Program check) 인터럽트 : 잘못된 명령어나 데이터를 사용
  • 소프트웨어 인터럽트
    • SVC(SuperVisor Call) 인터럽트 : 명령의 요청에 의해서 발생

4) PCB(Process Control Block)

(1) PCB의 개념

  • 운영체제가 프로세스에 대한 정보를 기록한 테이블로 Process 대신 Task나 Job을 사용하기도 한다.
  • 각 프로세스가 생성, 제거될 때마다 고유의 PCB가 생성, 제거된다.

(2) PCB에 저장되어 있는 정보 : 프로세스의 고유 번호, 현재 상태, 포인터, 레지스터와 자원 정보, 스케줄링 정보, 입출력 상태 정보, 계정 정보 등이 저장되어 있다.

(3) 문맥 교환(Context Switching)

  • CPU가 할당되는 프로세스를 변경하기 위해 현재 실행되는 프로세스의 상태 정보를 저장하고, 이후 실행될 프로세스의 상태 정보를 설정한 다음 CPU를 할당하여 실행하는 작업이다.
  • 인터럽트가 발생한 경우, 진행 중인 프로그램의 재개(Resume)에 필요한 레지스터 문맥을 저장한다.
  • Time Slice가 작을수록 문맥 교환수와 인터럽트 횟수, 오버헤드가 증가한다.
  • Time Slice가 클수록 문맥 교환수와 인터럽트 횟수, 오버헤드가 감소한다.

5) IPC(Inter Process Communication)

(1) IPC의 개념

  • 협력하는 프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로를 뜻한다.

  • 프로세스들의 자원 공유, 속도 향상, 모듈화, 편의성 증대에 활용된다.

  • 메시지 교환(Message Passing) 방식과 메모리 공유(Shared Memory) 방식이 있다.

    - 메시지 교환 : 메모리 보호를 위해 커널이 대신 데이터 전달, 안전하지만 성능이 떨어짐
    
    - 메모리 공유 : 공유 메모리 생성. 성능이 우수하지만 동기화 문제 발생 

6) 스레드(Thread)

(1) 스레드의 개념

  • 프로세스 내에서의 작업 단위로서 시스템의 여러 자원을 할당받아 실행하는 프로그램 단위이다.
  • 하나의 프로세스에 하나의 스레드가 존재하는 경우에는 단일 스레드, 하나 이상의 스레드가 존재하는 경우에는 다중 스레드라고 한다.
  • 프로세스의 일부 특성을 갖고 있기 때문에 경량(Light Weight) 프로세스라고도 한다.
  • 스레드 기반 시스템에서 스레드는 독립적인 스케줄링의 최소 단위로서 프로세스의 역할을 담당한다.
  • 동일 프로세스 환경에서 서로 독립적인 다중 수행이 가능하다.

(2) 스레드 사용의 장점

  • 하나의 프로세스를 여러 개의 스레드로 생성하여 병행성을 증진시킬 수 있다.
  • 하드웨어, 운영체제의 성능과 응용 프로그램의 처리율을 향상시킬 수 있다.
  • 응용 프로그램의 응답 시간을 단축시킬 수 있다.
  • 실행 환경을 공유시켜 기억장소의 낭비가 줄어든다.
  • 프로세스들 간의 통신이 향상된다.

(3) 스레드의 분류

  • 사용자 수준의 스레드
    • 사용자가 만든 라이브러리를 사용하여 스레드를 운용
    • 속도는 빠르지만 구현이 어려움
  • 커널 수준의 스레드
    • 운영체제의 커널에 의해 스레드를 운용
    • 구현이 쉽지만 속도가 느림

(4) 멀티스레드 모델

  • 커널 레벨 스레드
    • 커널이 직접 생성하고 관리하는 스레드이다.
    • 하나의 사용자 스레드가 하나의 커널 스레드와 연결되는 1대1 모델이다.
    • 독립적으로 스케줄링이 되므로 특정 스레드가 대기 상태에 들어가도 다른 스레드는 작업을 계속할 수 있다.
    • 커널 레벨에서 모든 작업을 지원하기 때문에 멀티 CPU를 사용할 수 있다.
    • 하나의 스레드가 대기 상태에 있어도 다른 스레드는 작업을 계속할 수 있다.
  • 사용자 레벨 스레드
    • 라이브러리에 의해 구현된 일반적인 스레드이다.
    • 사용자 프로세스 내에 여러 개의 스레드가 커널의 스레드 하나와 연결되는 다대일 모델이다.
    • 라이브러리가 직접 스케줄링을 하고 작업에 필요한 정보를 처리하기 때문에 문맥 교환이 필요 없다.
    • 커널 스레드가 입출력 작업을 위해 대기 상태에 들어가면 모든 사용자 스레드가 같이 대기 상태가 된다.
    • 한 프로세스의 타임 슬라이스를 여러 스레드가 공유하기 때문에 여러 개의 CPU를 동시에 사용할 수 없다.
  • 멀티 레벨 스레드
    • 사용자 레벨 스레드와 커널 레벨 스레드를 혼합한 방식이다.
    • 커널 스레드가 대기 상태에 들어가면 다른 커널 스레드가 대신 작업을 하여 사용자 레벨 스레드보다 유연하게 작업을 처리할 수 있다.
    • 커널 레벨 스레드를 같이 사용하기 때문에 여전히 문맥 교환 시 오버헤드가 있어 사용자 레벨 스레드만큼 빠르지 않다.
    • 빠르게 움직여야 하는 스레드는 사용자 레벨 스레드로 작동하고, 안정적으로 움직여야 하는 스레드는 커널 레벨 스레드로 작동한다.
profile
풀스택 개발자가 되는 날까지 달리자!

0개의 댓글