Skip to content

Latest commit

 

History

History
83 lines (62 loc) · 4.14 KB

File metadata and controls

83 lines (62 loc) · 4.14 KB

프로세스

  • 컴퓨터에서 실행중인 프로그램

    • 프로그램 : 저장 장치에 파일 단위로 저장되어 있으며, 아직 실행되지 않은 코드
  • 각자 고유한 공간과 자원을 할당받는다.

    • 각각의 code, data, stack, heap 영역을 보유
    image
    • code : 프로세스가 실행할 코드가 기계어 형태로 저장된 공간
      • 컴파일 시점에 결정
    • data : 전역변수, static 변수 등이 저장된 공간
      • 컴파일 시점에 결정
    • heap : 프로그래머가 관리하는 메모리 공간
      • 동적 할당 → 런타임에 결정
    • stack : 함수 내 선언된 지역변수, 매개변수, 리턴값, 복귀 주소 등을 저장
      • 컴파일 타임에 결정
  • 각각의 영역을 갖기에 동기화 작업이 필요하지 않다.

  • 각각의 영역을 갖기에 컨텍스트 스위칭 비용이 크다.


프로세스 생성 과정

  1. PCB가 생성되며 OS가 실행한 프로그램의 코드를 읽어들여 프로세스에 할당된 메모리의 code 영역에 저장한다.
  2. 초기화된 전역 변수 및 static 변수를 data 영역에 할당.
  3. Heap과 Stack은 초기 메모리 주소 초기화
  4. PCB에 여러 정보가 기록되면 Ready Queue에서 CPU를 할당받기까지 대기한다.

PCB

  • 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳
  • 프로세스의 상태 정보를 저장하는 구조체, 컨텍스트 스위칭을 위해 필요하다.
  • PCB에 저장되어 있는 정보
    • PID (프로세스 고유 번호)

    • Process State (new, ready, running, waiting(blocked), terminated 등의 상태)

      image
    • Program Counter (다음 실행될 명령의 포인터)

    • CPU registers (CPU 레지스터)

    • CPU scheduling information (CPU 스케줄링 정보)

    • Memory-management information (할당된 자원 정보)

    • Accounting information (CPU 사용시간 등)

    • I/O status information (입출력 상태 정보)


쓰레드

image
  • 한 프로세스에서의 실행 단위
  • stack만 고유한 영역을 갖고 나머지 영역은 프로세스 자원을 공유
  • stack 이외의 영역을 공유하므로 동기화 작업이 필요
  • stack 이외의 영역을 공유하므로 컨텍스트 비용이 적다.
  • 쓰레드마다 스택을 독립적으로 할당하는 이유
    • 스택 메모리 공간이 독립적 → 독립적 함수 호출이 가능하다 → 독립적인 실행 흐름

멀티 프로세스 vs 멀티 쓰레드

멀티프로세스

  • 하나의 프로그램을 여러 프로세스로 구성하여 프로세스가 병렬적으로 작업을 수행하는 것
  • 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 끼치지 않는다.
  • 멀티 쓰레드보다 더 많은 메모리 공간을 차지하기 때문에 컨텍스트 스위칭이 느리다.

멀티쓰레드

  • 하나의 프로세스를 여러 개의 스레드로 구성하여 자원을 공유하면서 작업을 수행
  • 멀티 프로세스보다 적은 메모리 공간을 차지하여 컨텍스트 스위칭이 빠르다.
  • 자원을 공유하고 있기 때문에 하나의 스레드에 오류가 생겨 종료되면 모든 스레드가 종료될 수 있다.
  • 동기화 문제를 가지고 있다.

멀티프로세스 대신 멀티 프로세스를 사용하는 이유?

  • 프로그램을 여러 개 키는 것보다 하나의 프로그램 안에서 여러 작업을 해결하는 것이 더욱 효율적
  • 컨텍스트 스위칭 시 stack 영역만 초기화하면 되기 때문에 빠르다.
  • 프로세스를 생성하여 자원을 할당하는 콜이 줄어들어 자원을 효율적으로 관리