Process 정리

Kang In Sung·2021년 1월 21일
0

OS

목록 보기
1/6

프로세스 (Process)

프로세스 정의

  • 프로세스 (Process) 는 실행 중인 프로그램, 컴퓨팅 시스템에서 한 작업의 단위이기도 하다.
    • 작업 (Job) 은 일괄 처리 시스템, 태스크 (Task) 는 시분할 시스템에서 사용된다. (각 시스템 별로 단위는 다르다.)
  • 프로세스 활동 상태는 PC (프로그램 카운터) 및 프로세스 레지스터 값으로 표현 가능하다.
    • 즉 실행 중인 작업이 CPU 에서 참고하고 있다는 의미.
  • 프로그램 : 명령어 목록으로 구성된 디스크 저장 파일에 불과하다. (수동적)
    • 사용자가 OS 를 사용하여 실행을 해야 프로세스 라는 개체가 되는 것이다. (자동적)
  • 프로세스 자체가 다른 실행 환경으로 동작할 수 있다.
    • 예를 들어 JVM (Java Virtual Machine) 원리를 참고할 것.
  • 프로세스가 한 번에 여러 작업 (Job) 을 할 수 있게 허용하는 개체를 Thread 라고 한다.

메모리 섹션

  • 메모리 Heap : 프로세스 실행 중 동적으로 생성되는 메모리.
  • 메모리 Stack : 프로세스 실행 중 함수 호출 시의 임시 저장 장소.
  • 메모리 Text : 실행 코드
  • 메모리 Data : 전역 (Global) 변수.

프로세스 상태

  • NEW : 프로세스 생성 중.
  • RUNNING : 프로세스 실행 중.
  • WAITING : 프로세스 I/O 대기.
  • READY : 프로세스가 PC 에 할당되기 기다림.
  • TERMINATED : 프로세스 종료.

PCB (Process Control Block)

  • 각 프로세스 별 OS 와 연관된 정보들을 보유한다.
  • 보유하고 있는 정보 중 일부
    • 프로세스 상태 (상단부)
    • PC 주소
    • CPU 레지스터, 스케쥴링 정보 및 회계 (Accounting) 정보
    • 메모리 관리 정보
    • I/O 정보
    • Thread 정보

프로세스 스케쥴링

  • 코어 및 프로세스 실행 횟수 별로 작업 분배를 효율적으로 진행하는 개념.
  • 다중 프로그래밍의 정도를 측정하는 값 : 프로세스의 개수.
  • I/O 바운드 프로세스 : CPU 연산 < I/O 연산 (대부분 프로세스)
  • CPU 바운드 프로세스 : CPU 연산 > I/O 연산
  • 일반적으로 I/O 바운드 프로세스의 우선 순위를 높게 책정한다.

스케쥴링 큐

  • Ready 큐 : 프로세스가 시스템에 실행되기 이전 시점.
    • Long-Term 스케쥴러 (외부 -> 시스템) / Short-Term 스케쥴러 (시스템 -> 시스템)
  • Waiting 큐 : 프로세스가 I/O 작업을 요청했을 시점.
  • PCB 에 각 Queue 별로 가리키는 인덱스를 보유.

CPU 스케쥴링

  • 1 코어 당 1 개의 프로세스를 배치한다.
  • 디스패치 : CPU 에 다음 프로세스가 배치되기 위한 작업.
  • 스와핑 : 메모리가 꽉 찬 경우 이를 제거하여 다중 프로그래밍의 정도를 감소 시킨다.

문맥 교환

  • 프로세스 실행 중 운영체제가 개입하여 프로세스를 교환하는 과정.
  • 인터럽트 발생 시, 이를 처리한 후 문맥으로 복귀하기 위해 이를 저장하는 개념.
  • 문맥 데이터는 PCB 에 저장된다.
  • 문맥 교환 시간은 아무런 처리를 못 하는 오버헤드 작업이다.
    • 자주 하는 경우에는 시스템 저하를 일으킨다.

프로세스 생성 과정

  • 프로세스의 관계는 부모 - 자식 관계로 생성된다.
  • 프로세스 식별자 (PID) : 프로세스를 식별하기 위한 값.
  • fork() : 프로세스의 복사본을 생성. 부모 프로세스는 자식 PID, 자식 프로세스는 0 의 값을 지정.
    • 복제된 부모, 자식 프로세스는 동시에 작동한다.
  • exec() : 프로그램을 생성한다. 이를 프로세스의 개념이라 칭한다.
  • wait() : 프로세스 종료를 기다린다.

프로세스 종료 과정

  • exit() 을 호출하면 프로세스를 종료할 수 있다.
  • 물리, 가상 메모리, I/O 버퍼, 파일 등 모든 자원들의 연동이 해제된다.
  • 부모 프로세스가 종료되면 자식 프로세스가 상위로 바라보게 된다.
  • 자식 프로세스가 종료되면 부모 프로세스에게 종료 상태를 알려야 한다.
  • 오작동하는 프로세스에 대해 kill 을 할 수 있다.
  • 연쇄식 종료 (Cascading Terminal) : 부모 프로세스가 종료될 때, 종속된 자식 프로세스들도 전부 종료된다.
  • 좀비 프로세스 : 자식 프로세스가 종료 되었는데 부모 프로세스가 자원 정보를 회수하지 않은 경우 메모리에 남는 현상.
  • 고아 프로세스 : 부모 프로세스가 종료된 이후 자식 프로세스들이 남아버리는 현상.
    • 이는 init 에서 wait() 를 호출하여 어느 정도 해결할 수 있다.

프로세스 간 통신 (IPC)

  • 프로세스는 본래 다른 프로세스들과 자원을 공유하지 않아 독립적이었다.
  • 그러나 실행 중인 프로세스들의 영향에 따라 작동하는 협력적인 성향도 있다.
  • 공유 메모리 (Shared Memory)
    • 협력 프로세스들에 의해 메모리 접근 방식을 제공하여 빠른 편.
    • 메모리 동시 접근 현상을 프로그래머가 막아야 하는 단점이 있다.
  • 메시지 전달 방식 (Message Passing)
    • 협력 프로세스들에 의해 메시지를 주고 받아, 커널 측에서 정보를 주고 받는다.
    • 커널 기능 구현이 잘 되어 있어 프로그래머의 업무 부담이 줄어든다. 다만 문맥 교환 현상이 많아진다.

생성자 - 소비자 패러다임

  • 클라이언트와 서버의 관계랑 같은 맥락이라 볼 수 있다.
  • 생산하는 프로세스가 생산자 (Producer), 소비하는 프로세스가 소비자 (Customer)
  • 두 프로세스가 동시에 동작될 때 야기될 수 있는 이슈. (공유 메모리 개념 적용 시.)
    • 버퍼를 사용하여 동기화 문제를 해결해야 할 것이다.
    • 버퍼의 크기는 유한 (소비자 유리), 무한 (생산자 유리) 버퍼로 나뉜다.

Blocking, Non-Blocking

  • 메시지 전달에 대한 문제를 해결하기 위한 방법들.
  • Blocking 전송 : 수신자가 메시지를 받을 때까지 Block 됨.
  • Blocking 수신 : 메시지를 받고 이용 가능할 때까지 수신자가 Block 됨.
  • Non-Blocking 전송 : 송신자가 메시지를 보내고 계속 작업한다.
  • Non-Blocking 수신 : 수신자가 메시지를 받되 유효한 메시지 혹은 NULL 을 받을 수 있다.
profile
Back-End Developer

0개의 댓글