CS/OS

프로세스

우봉수 2023. 3. 20. 13:47

프로세스의 개념

  • 배치 시스템 - 잡(jobs)
    • 도착한 순서대로 작업을 처리하는 것
  • 시분할 시스템 - 사용자 프로그램 또는 테스크
    • cpu 라는 자원을 여러명의 사용자가 나누어 쓰는 것
  • 프로세스: 실행 중인 프로그램, 프로세스의 실행은 순차적 형태로 진행 되어야만 한다.
  • 다양한 부분으로 이루어짐
    • 프로그램 코드, 텍스트 섹션 이라고 불림
    • 프로그램 카운터와 프로세스 레지스터를 포함한 현재 진행 중인 활동
    • 임시 데이터를 저장하는 스택
      • 함수 매개변수, 복귀 주소, 지역 변수
    • 전역 변수를 저장하는 데이터 섹션
    • 실행 중 동적으로 할당되는 메모리 영역인
  • 하나의 프로그램에서 여러 개의 프로세스를 만들 수 있다.

메모리에서의 프로세스

프로세스 상태

  • 프로세스가 실행되면서 상태가 계속 변한다.
    • new: 프로세스가 생성되는 중인 상태
    • running: 명령어가 실행 중인 상태
    • wailting(sleep): 프로세스가 어떤 사건이 일어나기를 기다리고 있는 상태
      • ready와 비슷
    • ready: 프로세스가 처리기가 할당되기를 기다리고 있는 상태
    • terminated: 프로세스가 실행을 완료한 상태

프로세스 제어 블록 (PCB)

  • 태스크 제어 블록(task control block)이라고도 불림)
  • 프로세스의 상태, 프로그램 카운터, CPU레지스터, CPU스케줄링 정보, 메모리 관리 정보, 회계정보, I/O 상태 정보가 저장되어 있음.

스레드

  • 하나의 프로세스가 여러개의 스레드로 구성될 수 있다
  • 프로세스 마다 여러 개의 프로그램 카운터를 가지는 경우
    • 여러 위치에서 동시에 실행시키기 위해서 복수의 스레드를 사용한다.

프로세스 스케줄링

  • CPU 사용을 최대로 하는 것이 목표, 시간을 나누어 쓰기 위해 CPU에 프로세스를 빠르게 전환시킨다.
  • 프로세스의 스케줄링에는 여러 종류의 큐가 존재한다.
    • 잡 큐: 시스템의 모든 프로세스의 집합
    • 준비 큐: 메인 메모리에 존재하고 실행을 기다리며 준비된 모든 프로세스의 집합
    • 장치 큐: I/O 장치를 기다리고 있는 프로세스의 집합
  • 큐잉 다이어 그램: 큐, 자원, 프로세스의 이동 흐름을 나타낸다.

스케줄러

  • 단기 스케줄러(cpu 스케줄러): 어떤 프로세스에게 어떤 cpu를 사용할지 배정시키는 스케줄러
    • 주로 cpu 할당
    • 자주 발생
  • 장기 스케줄러(잡 스케줄러): 어떤 프로세스를 시스템 안으로 가져올 것인가를 결정하는 스케줄러
    • 다중프로그래밍의 정도를 결정한다.
    • 상대적으로 덜 자주 발생
  • 중기 스케줄러: 메모리에 적재된 프로세스를 제거하고(swap out) 추가하는 것(swap in)을 즉 swapping을 결정하는 스케줄러
    • 다중프로그래밍 정도를 낮출 필요가 있을 때 사용

이동 시스템(스마트폰)에서의 다중태스킹

  • ios 초기에는 하나의 프로세스만 실행이 가능했지만 요즘날에는 복수의 프로세스가 실행되는 것이 가능
  • foreground 프로세스: 사용자 인터페이스에 의해 제어됨
  • background 프로세스: 메모리에 적재되어 실행 중이지만 화면에는 보이지 않는다.

문맥 교환

  • CPU가 다른 프로세스로 전환할 때, 시스템은 문맥 교환을 통하여 예전 프로세스의 상태를 저장하고 새 프로세스의 저장된 문맥을 적재해야 한다.
    • 이때 걸리는 시간을 컨텍스트 스위칭 오버헤드(문맥교환)라고 한다.
  • 이때 예전 프로세스의 상태는 PCB에 표현된다.
  • 운영체제와 PCB가 복잡할수록 문맥 교환 시간은 더 길어진다.

프로세스에 대한 연산

  • 프로세스 생성
    • 부모 프로세스는 운영체제가 허용하는 범위 안에서 자식 프로세스를 필요한 만큼 생성이 가능하다.
    • 프로세스는 탄생시 프로세스 식별자를 부여 받는다
    • 주소 공간
      • 자식은 부모 프로세스의 주소 공간을 복제한다.
      • 자식은 그 공간에 프로그램을 적재한다.
    • 부모와 자식의 자원 공유 옵션
      • 부모와 자식은 모든 자원을 공유한다.
        • 자식이 새롭게 자원을 확보하면 운영체제의 허락하에 부모가 자식의 자원을 공유하는 것이 가능하다.
      • 자식과 부모는 운영체제가 허용하는 범위 안에서만 자원을 공유한다.
      • 부모와 자식은 아무 자원도 공유하지 않는다.
    • 실행 옵션
      • 부모는 자식이 종료될 때까지 기다린다.
      • 부모와 자식은 병행하게 실행된다.

프로세스 종료

  • wait(): 부모가 자식의 종료를 기다릴 필요가 있을 때 사용하는 시스템 콜
  • 기다리고 있는 부모가 없는 프로세스를 좀비(zombie)라고 한다.
  • wait를 호출하지 않고 부모가 종료된 프로세스를 고아(orphan)라고 한다.

프로세스 간 통신

  • 시스템 내의 프로세스는 독립적이거나 협력적 일 수 있다.
  • 협력적 프로세스가 필요한 이유:
    • 정보 공유
    • 계산 속도 향상
    • 모듈성
    • 편리함
  • 협력적인 프로세스는 IPC(프로세스 간 통신)이 필요하다.
  • IPC의 두 가지 모델
    • 공유 메모리
      • 두 프로세스 사이의 공유하는 메모리를 만들어 서로의 작업을 공유
      • 상대적으로 속도가 빠름(단 멀티 코어나 멀티 프로세스 환경에서는 속도가 느려질 수 있음 Why? 메모리 일관성 때문에)
    • 메시지 전달
      • 메시지 큐에 저장된 정보를 쓰고 읽는 식으로 메시지 전달
      • 상대적으로 속도가 느림