Study/운영체제

프로세스와 스레드

voider 2022. 3. 18. 22:58

프로세스

  • 프로세스는 ‘실행 중’인 프로그램
    • 프로그램이 실행될 때 프로세스가 생성되고 PID를 부여받음.
    • 프로세스를 생성하는 주체는 사용자가 될 수도 있고, 시스템이 될 수 있다.
    • 프로그램과 프로세스는 동작을 하고 있는지, 하지 않고 있는지로 구분할 수 있다.
  • 운영체제로부터 자원을 할당 받아 동작한다.
    • 자원: CPU, Memory, IO, File
    • 동작: CPU가 프로세스의 명령을 실행
  • 사용자 및 시스템 프로세스가 존재

프로세스와 운영체제

  • 프로세스 관리자 역할
    • 프로세스를 생성 및 삭제
    • 프로세스 실행(CPU 할당)을 위한 스케줄 결정
    • 프로세스의 상태를 관리하며 상태 전이를 처리

프로세스의 상태

  • 5-상태 모델(다섯 가지로 상태를 구분한 모델)
    1. 생성
      • 처음 작업이 시스템에 주어진 상태. 즉, 프로그램을 이제 막 실행 시킨 단계
      • 요청을 인지하고, 이걸 실행하기 위해 필요한 자원을 파악.
    2. 준비
      • 실행 준비가 되어 CPU 할당을 기다리는 상태
      • 준비상태의 프로세스를 실행상태로 바꾸는 걸 디스패치라고 함.
    3. 실행
      • 프로세스가 처리되는 상태
      • 실행하다가 준비로 돌아갈 때가 있음. CPU를 내어놓는다는 것을 뜻함. 할당시간 만료임.
    4. 대기
      • 프로세스가 특정 자원을 할당받을 때까지 I/O 작업이 끝날 때까지 작업이 보류되는 상태
      • 준비-실행-대기 상태는 반복될 수 있음
    5. 종료
      • 모든 처리가 완료되어 사용자에게 반환되는 상태
    이것을 5 상태 모델이라고 함.

프로세스 제어 블록(Process Control Block, PCB)

  • 프로세스 관리를 위한 목적
  • 프로세스 정보를 보관
  • 각 프로세스마다 존재
  • 프로세스가 진행함에 따라 내용 변경

프로세스 상태, 프로세스 번호(PID), 프로그램 카운터(PC), 레지스터, 메모리 관리 정보, 프로세스 우선 순위 등등 여러 상태를 가지고 있음.

프로그램 카운터 프로세스 중에서 처리되고 있는 명령어가 무엇인지, 몇 번까지 실행되었고, 다음에 실행되어야 할 명령어가 무언지에 대한 데이터를 가지고 있는 것을 프로그램 카운터라고 함

프로세스 생성과 종료

  • 프로세스 생성 작업
    • 프로세스 이름(번호, PID) 결정
    • 준비 큐에 삽입
    • 초기 우선순위 부여
    • 프로세스 제어 블록(PCB) 생성 등
  • 프로세스 생성 방법: 시스템 호출(System call)
    • 하나의 프로세스가 프로세스 생성 시스템 호출을 통해 새로운 프로세스 생성
      • 예) for()
    • 호출하는 프로세스: 부모 프로세스
    • 생성되는 프로세스: 자식 프로세스
    • 시스템 프로세스와 사용자 프로세스 모두 부모 프로세스 가능
  • 생성되는 프로세스의 자원
    • 운영체제로부터 직접 얻는 경우
    • 부모 프로세스 자원의 일부를 얻는 경우
  • 자식 프로세스의 자원은 부모 프로세스의 자원으로 제한
    • 과도한 자식 프로세스 생성에 따른 시스템 과부하 방지
  • 프로세스의 종료
    • 프로세스 마지막 명령이 실행을 마치는 경우
    • 프로세스 종료 시스템 호출(예: exit())을 통하는 경우
    • 프로세스 종료 후 부모 프로세스에게 실행 결과를 되돌려 줌.
  • 프로세스 종료 시스템 호출
    • 부모에 의해서만 호출할 수 있음. 제 3자가 종료하는 것을 방지함.
    • 자식 프로세스가 할당된 자원의 사용을 초과할 때 혹은 더 이상 필요치 않을 때 종료시킬 수 있다.

프로세스 간 관계

  • 독립적 프로세스
    • 다른 프로세스의 영향을 받지도 않고 주지도 않음
    • 다른 프로세스와 상태를 공유하지 않는다.
    • 결정적, 재생 가능
      • 결정적? 입력이 동일하면 동일한 결과를 얻어낸다는 의미
      • 똑같은 결과를 반환하기 때문에 재생이 가능함.
    • 다른 프로세스와 공유하지 않음
  • 유기적 프로세스
    • 다른 프로세스와 영향을 주고 받음
    • 다른 프로세스와 상태를 공유한다.
    • 비결정적, 재생 불가능
      • 같은 결과가 나오지 않을 수 있으므로 재생 불가능
    • 다른 프로세스와 공유함

스레드

전통적인 프로세스

  • 처리의 기본 단위
  • 자원 소유의 단위(하나의 주소공간) 및 디스패칭의 단위(하나의 제어 흐름)

디스패치 준비 → 실행으로 갈 때 CPU를 할당 받는 것

  • 단일 프로세스 내에서 동시처리 불가능
    • 이 문제를 해결하기 위해 등장한 것이 스레드

뜨레드

  • 프로세스 내에서 다중처리를 위해 제안된 개념
  • 하나의 프로세스 내에는 하나 이상의 스레드가 존재
  • 하나의 스레드 내에서는 하나의 실행점만 존재(디스패칭의 단위)
    • 스레드마다 서로 다른 별도의 실행점을 가지고 있음
  • 실행에 필요한 최소한의 정보만을 가지며, 자신이 속해있는 프로세스의 실행환경을 공유한다.

다중 스레드 장점

  • 멀티 CPU 혹은 멀티코어 시스템에서는 병렬처리 가능
  • 처리 속도 별로 스레드가 나눠진 경우 효율적인 처리 가능
    • 계산용 스레드, 입력용 스레드 등으로 나누면 효율적인 처리 가능

스케줄링

단계

상위단계, 중간단계, 하위단계로 나눌 수 있음.

  1. 시스템에 작업1, 2, 3이 들어옴
    1. 이러면 어떤 자원이 필요한지 각을 잼
  2. 상위 단계 스케줄링이 준비 큐로 넣어주면 프로세스가 생성됨.
  3. 준비 큐에 있던 프로세스는 CPU가 가용한 상태가 될 때까지 기다리다가 하위단계 스케줄링이 프로세스에 CPU를 할당한다.
  4. 자원이 부족한 상태라면 중간 단계 스케줄링이 개입함. 자원이 부족할 때 몇몇 프로세스를 빼서 일시 중지 시킴.
    • 다시 자원에 여유가 생기면 중지된 프로세스를 실행시킴

상위단계 스케줄링

  • 시스템에 들어오는 작업들을 선택하여 프로세스를 생성한 후 준비 큐에 전달
  • 선택 기준: 시스템 자원을 효율적으로 이용할 수 있도록 하는 것
  • 입출력(I/O) 중심 작업과 연산 중심 작업을 균형있게 선택

하위단계 스케줄링

  • 사용 가능한 CPU를 준비상태의 어느 프로세스에게 배당할지를 결정.
  • CPU를 배당받은 프로세스는 결국 실행상태가 되어 프로세스가 처리됨.
  • 수행 주체: 디스패처(dispatcher)

중간단계 스케줄링

  • 프롯세스를 일시적으로 메모리에서 제거하여 중지시키거나 다시 활성화시킴.
  • 시스템에 대한 단기적인 부하를 조절

스케줄링 기본 목표

  • 공정성: 모든 프로세스가 적정 수준에서 CPU 작업을 할 수 있게 함
  • 균형: 시스템의 자원들이 충분히 활용될 수 있게 한다

운영체제의 특징에 맞춰서 스케줄링 전략을 세워야 한다.

일괄처리 운영체제

  • 처리량 극대화
  • 반환시간 최소화
  • CPU 활용 극대화

대화형 운영체제

  • 빠른 응답시간
  • 과다 대기시간 방지

실시간 운영체제

  • 처리 기한을 맞춤

스케줄링 정책

  • 선점(Preemtive) 스케줄링 정책
    • 진행 중인 프로세스에 인터럽트를 걸고 다른 프로세스에 CPU를 할당하는 스케줄링 전략
    • 높은 우선순위 프로세스를 긴급하게 처리하는 경우에 유용
    • 대화식 시분할 시스템에서 빠른 응답시간을 유지하는데 유용하다.
    • 문맥 교환에 따른 오버헤드 발생한다.
      • 문맥? CPU의 모든 레지스터와 기타 운영체제에 따라 요구되는 프로세스의 상태.
      • 문맥교환: CPU의 현재 실행하고 있는 프로세스의 문맥을 PCB(Process control block)에 저장하고 다음 프로세스의 PCB로부터 문맥을 복원하는 작업

비선점(Nonpreemptive) 스케줄링 정책

  • 프로세스가 CPU를 할당받아 실행이 시작되면, 작업 자체가 I/O 인터럽트를 걸거나 작업을 종료할 때까지 실행상태에 있게 된다.
  • 모든 프로세스가 공정하게 순서에 따라 실행된다. → 응답시간 예측 가능
  • 짧은 프로세스가 긴 프로세스를 기다리게 될 수 있다.

프로세스

  • 프로세스는 ‘실행 중’인 프로그램
    • 프로그램이 실행될 때 프로세스가 생성되고 PID를 부여받음.
    • 프로세스를 생성하는 주체는 사용자가 될 수도 있고, 시스템이 될 수 있다.
    • 프로그램과 프로세스는 동작을 하고 있는지, 하지 않고 있는지로 구분할 수 있다.
  • 운영체제로부터 자원을 할당 받아 동작한다.
    • 자원: CPU, Memory, IO, File
    • 동작: CPU가 프로세스의 명령을 실행
  • 사용자 및 시스템 프로세스가 존재

프로세스와 운영체제

  • 프로세스 관리자 역할
    • 프로세스를 생성 및 삭제
    • 프로세스 실행(CPU 할당)을 위한 스케줄 결정
    • 프로세스의 상태를 관리하며 상태 전이를 처리

프로세스의 상태

  • 5-상태 모델(다섯 가지로 상태를 구분한 모델)
    1. 생성
      • 처음 작업이 시스템에 주어진 상태. 즉, 프로그램을 이제 막 실행 시킨 단계
      • 요청을 인지하고, 이걸 실행하기 위해 필요한 자원을 파악.
    2. 준비
      • 실행 준비가 되어 CPU 할당을 기다리는 상태
      • 준비상태의 프로세스를 실행상태로 바꾸는 걸 디스패치라고 함.
    3. 실행
      • 프로세스가 처리되는 상태
      • 실행하다가 준비로 돌아갈 때가 있음. CPU를 내어놓는다는 것을 뜻함. 할당시간 만료임.
    4. 대기
      • 프로세스가 특정 자원을 할당받을 때까지 I/O 작업이 끝날 때까지 작업이 보류되는 상태
      • 준비-실행-대기 상태는 반복될 수 있음
    5. 종료
      • 모든 처리가 완료되어 사용자에게 반환되는 상태
    이것을 5 상태 모델이라고 함.

프로세스 제어 블록(Process Control Block, PCB)

  • 프로세스 관리를 위한 목적
  • 프로세스 정보를 보관
  • 각 프로세스마다 존재
  • 프로세스가 진행함에 따라 내용 변경

프로세스 상태, 프로세스 번호(PID), 프로그램 카운터(PC), 레지스터, 메모리 관리 정보, 프로세스 우선 순위 등등 여러 상태를 가지고 있음.

프로그램 카운터 프로세스 중에서 처리되고 있는 명령어가 무엇인지, 몇 번까지 실행되었고, 다음에 실행되어야 할 명령어가 무언지에 대한 데이터를 가지고 있는 것을 프로그램 카운터라고 함

프로세스 생성과 종료

  • 프로세스 생성 작업
    • 프로세스 이름(번호, PID) 결정
    • 준비 큐에 삽입
    • 초기 우선순위 부여
    • 프로세스 제어 블록(PCB) 생성 등
  • 프로세스 생성 방법: 시스템 호출(System call)
    • 하나의 프로세스가 프로세스 생성 시스템 호출을 통해 새로운 프로세스 생성
      • 예) for()
    • 호출하는 프로세스: 부모 프로세스
    • 생성되는 프로세스: 자식 프로세스
    • 시스템 프로세스와 사용자 프로세스 모두 부모 프로세스 가능
  • 생성되는 프로세스의 자원
    • 운영체제로부터 직접 얻는 경우
    • 부모 프로세스 자원의 일부를 얻는 경우
  • 자식 프로세스의 자원은 부모 프로세스의 자원으로 제한
    • 과도한 자식 프로세스 생성에 따른 시스템 과부하 방지
  • 프로세스의 종료
    • 프로세스 마지막 명령이 실행을 마치는 경우
    • 프로세스 종료 시스템 호출(예: exit())을 통하는 경우
    • 프로세스 종료 후 부모 프로세스에게 실행 결과를 되돌려 줌.
  • 프로세스 종료 시스템 호출
    • 부모에 의해서만 호출할 수 있음. 제 3자가 종료하는 것을 방지함.
    • 자식 프로세스가 할당된 자원의 사용을 초과할 때 혹은 더 이상 필요치 않을 때 종료시킬 수 있다.

프로세스 간 관계

  • 독립적 프로세스
    • 다른 프로세스의 영향을 받지도 않고 주지도 않음
    • 다른 프로세스와 상태를 공유하지 않는다.
    • 결정적, 재생 가능
      • 결정적? 입력이 동일하면 동일한 결과를 얻어낸다는 의미
      • 똑같은 결과를 반환하기 때문에 재생이 가능함.
    • 다른 프로세스와 공유하지 않음
  • 유기적 프로세스
    • 다른 프로세스와 영향을 주고 받음
    • 다른 프로세스와 상태를 공유한다.
    • 비결정적, 재생 불가능
      • 같은 결과가 나오지 않을 수 있으므로 재생 불가능
    • 다른 프로세스와 공유함

스레드

전통적인 프로세스

  • 처리의 기본 단위
  • 자원 소유의 단위(하나의 주소공간) 및 디스패칭의 단위(하나의 제어 흐름)

디스패치 준비 → 실행으로 갈 때 CPU를 할당 받는 것

  • 단일 프로세스 내에서 동시처리 불가능
    • 이 문제를 해결하기 위해 등장한 것이 스레드

뜨레드

  • 프로세스 내에서 다중처리를 위해 제안된 개념
  • 하나의 프로세스 내에는 하나 이상의 스레드가 존재
  • 하나의 스레드 내에서는 하나의 실행점만 존재(디스패칭의 단위)
    • 스레드마다 서로 다른 별도의 실행점을 가지고 있음
  • 실행에 필요한 최소한의 정보만을 가지며, 자신이 속해있는 프로세스의 실행환경을 공유한다.

다중 스레드 장점

  • 멀티 CPU 혹은 멀티코어 시스템에서는 병렬처리 가능
  • 처리 속도 별로 스레드가 나눠진 경우 효율적인 처리 가능
    • 계산용 스레드, 입력용 스레드 등으로 나누면 효율적인 처리 가능

스케줄링

단계

상위단계, 중간단계, 하위단계로 나눌 수 있음.

  1. 시스템에 작업1, 2, 3이 들어옴
    1. 이러면 어떤 자원이 필요한지 각을 잼
  2. 상위 단계 스케줄링이 준비 큐로 넣어주면 프로세스가 생성됨.
  3. 준비 큐에 있던 프로세스는 CPU가 가용한 상태가 될 때까지 기다리다가 하위단계 스케줄링이 프로세스에 CPU를 할당한다.
  4. 자원이 부족한 상태라면 중간 단계 스케줄링이 개입함. 자원이 부족할 때 몇몇 프로세스를 빼서 일시 중지 시킴.
    • 다시 자원에 여유가 생기면 중지된 프로세스를 실행시킴

상위단계 스케줄링

  • 시스템에 들어오는 작업들을 선택하여 프로세스를 생성한 후 준비 큐에 전달
  • 선택 기준: 시스템 자원을 효율적으로 이용할 수 있도록 하는 것
  • 입출력(I/O) 중심 작업과 연산 중심 작업을 균형있게 선택

하위단계 스케줄링

  • 사용 가능한 CPU를 준비상태의 어느 프로세스에게 배당할지를 결정.
  • CPU를 배당받은 프로세스는 결국 실행상태가 되어 프로세스가 처리됨.
  • 수행 주체: 디스패처(dispatcher)

중간단계 스케줄링

  • 프롯세스를 일시적으로 메모리에서 제거하여 중지시키거나 다시 활성화시킴.
  • 시스템에 대한 단기적인 부하를 조절

스케줄링 기본 목표

  • 공정성: 모든 프로세스가 적정 수준에서 CPU 작업을 할 수 있게 함
  • 균형: 시스템의 자원들이 충분히 활용될 수 있게 한다

운영체제의 특징에 맞춰서 스케줄링 전략을 세워야 한다.

일괄처리 운영체제

  • 처리량 극대화
  • 반환시간 최소화
  • CPU 활용 극대화

대화형 운영체제

  • 빠른 응답시간
  • 과다 대기시간 방지

실시간 운영체제

  • 처리 기한을 맞춤

스케줄링 정책

  • 선점(Preemtive) 스케줄링 정책
    • 진행 중인 프로세스에 인터럽트를 걸고 다른 프로세스에 CPU를 할당하는 스케줄링 전략
    • 높은 우선순위 프로세스를 긴급하게 처리하는 경우에 유용
    • 대화식 시분할 시스템에서 빠른 응답시간을 유지하는데 유용하다.
    • 문맥 교환에 따른 오버헤드 발생한다.
      • 문맥? CPU의 모든 레지스터와 기타 운영체제에 따라 요구되는 프로세스의 상태.
      • 문맥교환: CPU의 현재 실행하고 있는 프로세스의 문맥을 PCB(Process control block)에 저장하고 다음 프로세스의 PCB로부터 문맥을 복원하는 작업

비선점(Nonpreemptive) 스케줄링 정책

  • 프로세스가 CPU를 할당받아 실행이 시작되면, 작업 자체가 I/O 인터럽트를 걸거나 작업을 종료할 때까지 실행상태에 있게 된다.
  • 모든 프로세스가 공정하게 순서에 따라 실행된다. → 응답시간 예측 가능
  • 짧은 프로세스가 긴 프로세스를 기다리게 될 수 있다.

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

스케줄링 알고리즘  (0) 2022.03.22
프로세스 스케쥴링 #2 멀티 프로그래밍  (0) 2021.03.10
프로세스 스케쥴링  (0) 2021.02.09
유저 모드와 커널 모드  (0) 2021.02.08
운영체제2 - 시스템 콜  (0) 2021.02.07