관리 메뉴

코딩하는 락커

03. 프로세스의 이해 본문

📀 운영체제

03. 프로세스의 이해

락꿈사 2022. 5. 10. 14:07

3.1 프로세스 개념

 

프로세스

  • 실행중인 프로그램
  • CPU의 작업 단위
  • CPU, 메모리를 사용할 수 있어야 하며 File, I/O Device 등의 리소스를 사용할 수 있어야함
  • 실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 됨
    • 실행 파일 메모리 적재 방법: 아이콘 더블클릭 / 명령어 라인상에서 파일 이름 입력
  • 프로세스의 메모리 배치는 여러 섹션으로 구분되어 있음
    • 텍스트 섹션: 실행 코드
    • 데이터 섹션: 전역 변수
    • 힙 섹션: 프로그램 실행 중에 동적으로 할당되는 메모리 (ex. malloc)
    • 스택 섹션: 함수를 호출할 때 임시 데이터 저장장소 (ex. 함수 매개변수, 복귀주소 및 지역 변수)

  • C 프로그램의 메모리 적재
    • 텍스트 섹션: a.out (소스 실행파일)
    • 데이터 섹션
      • initialized data: y
      • uninitialized data: x
    • 힙 섹션: malloc
    • 스택 섹션: values, i 

 

프로세스 상태

  • 위 그림은 프로세스의 상태를 나타내는 해당하는 상태 다이어그램
    • new: 프로세스가 생성중인 상태
    • running: 명령어가 실행되고 있는 상태. (CPU를 점유해서 프로세스의 명령어가 실행하고 있는 상태)
    • waiting: 프로세스가 어떤 이벤트(ex. I/O event)가 일어나기를 기다리고 있는 상태
    • reday: 프로세스가 처리기에 할당되기를 기다리는 상태
    • termindated: 프로세스 실행이 종료된 상태

 

프로세스 제어 블록

  • 각 프로세스는 운영체제에서 프로세스 제어블록(PCB, process control block, 태스크 제어 블록TCB라고도 불림)에 의해 표현됨
  • 위 그림은 PCB를 나타냄
  • PCB는 특정 프로세스와 연관된 여러 정보를 수록하며 다음과 같은 것을 포함함
    • 프로세스 상태
    • 프로그램 카운터: 이 프로세스가 다음에 실행할 명령어의 주소를 가리킴
    • CPU 레지스터들
      • 컴퓨터 구조에 따라 다양한 수와 유형을 가짐
      • 나중에 프로세스가 다시 스케줄 될 때 계속 올바르게 실행하기 위하여 인터럽트 발생 시 저장됨
    • CPU 스케줄링 정보
    • 메모리 관리 정보
    • 회계 정보
    • 입출력 상태 정보

 

스레드

  • 현재까지의 프로세스 모델은 모두 프로세스가 단일 실행 스레드를 실행하는 프로그램임을 암시함
    • 단일 실행 스레드: 프로세스가 한 번에 한 가지 일만 실행하도록 허용함
  • 현대 운영체제는 한 프로세스가 다수의 실행 스레드를 가지는 병렬 스레드를 허용함.

 

 

3.2 프로세스 스케줄링

  • 다중 프로그래밍의 목적: CPU 이용을 최대화하기 위하여 항상 어떤 프로세스가 실행되도록 하는 것
  • 시분할의 목적: 각 프로그램이 실행되는 동안 사용자가 상호 작용할 수 있도록 프로세스들 사이에 CPU코어를 번번하게 교체하는 것
  • 이 목적들을 달생하기 위해 프로세스 스케쥴러는 코어에서 실행 가능한 여러 프로세스 중 하나의 프로세스를 선택함

 

스케쥴링 큐

  • 레디큐ready queue
    • 프로세스가 시스템에 들어가면 레디큐에 들어가서 준비 상태가 되어 CPU 코어에서 실행되기를 기다림
    • 일반적으로 연결 리스트로 저장됨
  • 웨이트큐wait queue
    • 프로세스가 디스크와 같은 장치에 I/O 요청을 한다고 할 때 장치는 프로세스보다 느리가 진행되므로 프로세스는 I/O가 사용 가능할 때 까지 기다려야함
    • 이 때 I/O 완료와 같은 특정 이벤트가 발생하기를 기다리는 프로세스가 들어가는 큐

  • 위 그림은 큐잉 다이어그램을 나타냄
    • 새 프로세스가 처음 준비큐에 놓임
    • 실행을 위해 선택되거나 디스패치 될 때 까지 기다림
    • CPU 코어가 할당되고 실행 상태가 되면 여러 이벤트가 발생할  수 있음

 

Context Switch

  • 인터럽트는 운영체제가 CPU 코어를 현재 작업에서 뺏어 내어 커널 루틴을 실행할 수 있도록 함
  • 인터럽트가 발생하면 시스템은 인터럽트 처리가 끝난 후에 Context를 복구할 수 있도록 현재 실행중인 프로세스의 현재 Context를 저장해야 함
  • 이때 Context는 PCB로 표현됨
  • Context Switch
    • CPU의 현재 상태를 저장하는 작업(state save)을 수행하고 나중에 연산을 재개하기 위해 복구 작업(state restore)을 수행함
    • 인터럽트가 일어났을 때 커널은 과거 프로세스의 Context를 PCB에 저장하고, 실행이 스케쥴된 새로운 프로세스의 저장된 Context를 복구함
    • Context Swtich 시간은 순수한 오버헤드임

 

3.3 프로세스에 대한 연산 

  • 대부분 시스템 내의 프로세스들은 병행 실행하고 있으며 반드시 동적으로 생성되고 제거되어야 
  • 운영체제는 프로세스 생성 및 종료를 위한 기법을 제공함

 

프로세스 생성

  • 부모 프로세스
    • 새로운 프로세스를 생성하는 프로세스
  • 자식 프로세스
    • 새로운 프로세스
  • 새로운 프로세스들은 각각 다시 다른 프로세스들을 생성할 수 있으며, 그 결과 프로세스의 트리를 형성함
  • 프로세스는 프로세스 식별자pid를 사용하여 프로세스를 구분하며 pid는 고유한 값을 가짐
  • systemd 프로세스
    • 언제나 pid가 1인 프로세스
    • 모든 사용자 프로세스의 루트 부모 프로세스 역할 수행
    • 시스템이 부트될 때 생성되는 첫 번째 사용자 프로세스
    • 시스템이 부팅되면 systemd 프로세스는 다양한 사용자 프로세스를 생성함
  • logind 프로세스
    • 시스템에 직접 로그인하는 클라이언트를 관리하는 책임을 지는 프로세스
  • UNIX와 Linux 시스템에서는 ps 명령어를 이용하여 프로세스들의 목록을 얻을 수 있음 (ex. ps - el, 현재 시스템에 활성화 되어 있는 모든 프로세스의 정보를 나열해줌)
  • 프로세스가 새로운 프로세스를 생성할 때 두 프로세스를 실행하는 2가지 방법
    1. 부모는 자식과 병행하게 실행을 계속함
    2. 부모는 일부 또는 모든 자식이 실행을 종료할 때 까지 기다림
  • 프로세스가 새로운 프로세스를 생성할 때 주소 공간 측면의 2가지 가능성
    1. 자식 프로세스는 부모 프로세스의 복사본이 되는 경우 (자식 프로세스가 부모 프로세스와 똑같은 프로그램과 데이터르 가지며 자식 프로세스가 별도의 메모리 영역을 갖지 않고 PCB만 교체되는 경우)
    2. 자식 프로세스가 자신에게 적재될 새로운 프로그램을 가지고 있는 경우
  • 새로운 프로세스는 fork() 시스템 콜로 생성됨

  • 위 그림은 동일한 프로그램의 복사본을 실행하는 두 개의 프로세스를 갖는 C 프로그램 소스임
    • 자식 프로세스의 pid= 0, 부모 프로세스의 pid>0
    • 부모 프로세스는 wait() 시스템 콜로 자식 프로세스가 끝나기를 기다림
    • 자식 프로세스가 끝나면 부모 프로세스는 wait()호출을 재개하여 exit() 시스템 콜을 사용하여 끝냄

 

 

프로세스 종료

  • 프로세스가 exit() 시스템 콜을 사용하여 운영체제에 자신의 삭제를 요청하면 종료됨
  • 이 시점에서 프로세스는 자신을 기다리고 있는 부모 프로세스 wait 시스템 콜을 통해 상태값을 반환하고, 물리 메모리와 가상 메모리, 열린 파일, 입출력 버퍼를 포함한 프로세스의 모든 자원이 할당 해제되고 운영체제로 반납됨
  • 고아 프로세스orphan process
    • 자식 프로세스는 실행중이며, 부모 프로세스가 wait()을 호출하는 대신 종료한 상황의 자식 프로세스
  • 좀비 프로세스zombie process
    • 자식 프로세스는 종료되었으나 부모 프로세스가 아직 wait() 호출을 하지 않은 상황의 자식 프로세스

'📀 운영체제' 카테고리의 다른 글

05. 프로세스간 통신: Chapter 3. Processes  (0) 2022.05.22
04. 프로세스의 생성: Chapter 3. Processes (Part 2)  (0) 2022.05.16
02. 운영체제의 개념과 구조  (0) 2022.05.09
03. CPU Scheduling  (0) 2021.11.04
02. Processes  (0) 2021.11.04
Comments