[운영체제] 프로세스와 스레드

Judy·2022년 10월 13일
0

운영체제

목록 보기
2/14

프로세스와 스레드

1. 프로세스

실행중인 프로그램 (program in excution)

중요! context : 프로세스의 문맥

  • 프로세스의 수행 상태를 나타냄
  • 하드웨어 문맥 : CPU의 프로세스 카운터(PC)가 프로세스 메모리에 있는 특정 코드를 가리킴
  • 프로세스의 주소공간 : code | data | stack
  • 커널도 주소공간을 가짐
    - data에 PCB 존재
  • PCB(Process Control Block) -> 프로세스가 실행될 때마다 운영체제는 PCB를 보고 결정
  • 프로세스를 실행하다가 운영체제에게 요청할 때(System Call)는 PC가 커널의 주소공간을 가리킴

2. 프로세스의 상태

(CPU가 하나일 때로 가정)

Running

  • CPU를 잡고 수행중인 상태

Ready

  • CPU를 기다리는 상태
  • 실행을 위한 준비는 된 상태

Blocked

  • 또는 sleep, wait
  • CPU를 줘도 당장 실행할 수 없는 상태
  • 요청한 이벤트가 완료되면 ready가 될 수 있음
  • ex) 오래걸리는 I/O 작업, 디스크를 읽어오는 작업, 공유 자원을 가져올 때 등

Suspended(stopped)

  • 외부적인 이유로 프로세스 수행이 정지된 상태
  • 프로세스가 디스크로 swap out된 경우
  • 외부에서 resume해줘야 실행 가능
  • ex) 사용자가 일시정지 시킨 경우

+ 추가적으로 넣기도 하는 상태

  • new: 프로세스가 생성 중인 상태
  • Terminated: 수행이 끝나고 정리하는 상태

상태 변화

  • ready queue에서 기다리다가 실행 후 다시 맨 뒤로 들어가서 CPU를 기다림
  • 커널이 자료구조로 큐를 만들어놓고 CPU를 주고 안주고 관리함



3. PCB

  • 운영체제가 프로세스를 관리하기 위해 프로세스마다 유지하는 정보 정보

PCB의 구성

1) 운영체제가 관리상 사용하는 정보

  • 프로세스 상태, 프로세스 ID
  • 스케줄링 정보, 우선순위

2) CPU 수행 관련 하드웨어 값

  • Program Counter
  • Register

3) 메모리 관련

  • Code, Data, Stack 위치 정보

4) 파일 관련

  • 오픈하고 있는 파일들 정보

4. 문맥 교환(context Switch)

CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

(+ 스레드 사이에서도 문맥 교환은 발생함. 아래는 프로세스 문맥 교환에 관한 내용)

문맥 교환 작업

  • 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
  • 새롭게 얻는 프로세스 상태를 PCB에서 읽어옴

커널 모드 시 문맥 교환

  • System Call이나 Interrupt 시 반드시 Context Switch가 발생하는 것은 아님

    유저 모드 --(system call 또는 interrupt)--> 커널모드 ---> 유저 모드(=같은 프로세스)

  • timer interrupt 또는 I/O 요청하는 오래걸리는 작업을 system call 해서 다른 프로세스로 넘어갈 경우 문맥 교환이 발생
  • 다른 프로세스로 넘어가지 않아도 커널 모드로 가면 현재 상태를 저장하긴 하지만 문맥 교환만큼의 작업은 발생하지 않음

5. 프로세스 큐

Job Queue

  • 현재 시스템 내에 있는 모든 프로세스의 집합
  • Ready Queue와 Device Queue에 있는 프로세스가 포함됨

Ready Queue

  • 현재 메모리에 있으며 CPU를 기다리고 있는 프로세스의 집합

Device Queue

  • I/O Device의 처리를 기다리는 프로세스의 집합
  • 프로세스는 Ready <-> Device를 이동하면서 작업

6. 스케줄러

Short-term scheduler

  • CPU 스케줄러
  • 다음에 어떤 프로세스를 실행할지 결정
  • 프로세스에 CPU를 주는 문제

Long-term scheduler

  • job 스케줄러
  • new인 프로세스 중 어떤 프로세스를 ready queue로 보낼지
  • 프로세스에 메모리를 주는 문제
  • 메모리에 너무 많거나 적은 프로세스가 올라가면 성능이 떨어지기 때문에 적절히 조절
  • 현재 보통 시스템에서는 장기 스케줄러 없이 곧바로 메모리에 올림 -> 그럼 어떻게 조절? = Medium-term

Medium-term scheduler

  • Swapper
  • 메모리의 여유 공간을 마련하기 위해 프로세스를 메모리에서 디스크로 쫒아냄
  • 프로세스에게서 메모리는 뺏는 문제
  • Suspended 상태로 변하게 하는 이유

(막간 질문)

➕ 동기식 vs 비동기식 입출력

동기식

  • 입출력을 요청한 프로세스가 결과를 기다림
  • CPU를 다른 프로세스에게 넘겨주거나 or 낭비하면서 기다리게 할 수도 있음

비동기식

  • 입출력을 요구해놓고 다른 작업을 처리

7. Thread

CPU의 프로세스 수행 단위

  • 하나의 프로세스에서 여러 스레드를 사용하면 프로그램 카운터가 여러 곳을 가리킴
  • task : 동료 스레드와 공유하는 부분

장점

Responsiveness

  • 스레드 하나가 blocked일 때 같은 task 내의 다른 스레드가 실행되어 빠른 처리가 가능

Resource Sharing

  • 같은 일을 하는 프로세스를 여러 개 가지면 메모리를 낭비하게 되는데 하나의 프로세스 안에 여러 스레드를 사용하여 자원을 절약할 수 있음

Economy

  • 프로세스를 변경하는 문맥 교환이 발생하지 않음

Utilization of MP Architectures

  • CPU가 여러 개일 경우 병렬성을 높일 수 있음


➡️ 생각해볼 개념

스레드 vs 프로세스 vs 프로그램

스레드

  • 프로세스 내에서 세분화한 실행 단위
  • 할당받은 자원을 실행하는 단위

프로세스

  • 실행되는 프로그램
  • 운영체제로부터 자원을 할당받는 단위

프로그램

  • 특정 작업을 수행할 수 있는 파일
  • 디스크에 있지만 메모리에 올라와 있지 않은 상태

프로세서

  • 명령어를 실행하는 부분으로 보통 CPU를 일컫는다

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

멀티 프로세스

하나의 프로그램을 여러 프로세스로 구성하여 한 프로세스가 하나의 작업을 처리

장점

  • 프로세스 중 하나에 문제가 발생해도 해당 프로세스만 죽을 뿐 프로그램은 정상 작동 가능

단점

  • 문맥 교환시 오버헤드 발생
    - 프로세스 문맥 교환 시 캐시 메모리 초기화같은 작업이 필요
  • 공유 변수를 사용할 수 없어 프로세스 간 통신이 필요(IPC)

멀티 스레드

하나의 프로세스를 여러 스레드로 구성하고 각 스레드가 하나의 작업을 처리

장점

  • 프로세스 컨텍트 스위칭이 발생하지 않음
  • 프로세스 간 보다 스레드 간 통신이 더 간편
  • 자원을 절약할 수 있음

단점

  • 자원을 공유하기 때문에 동기화 문제에 신경써야 함

현대는 멀티 코어이기 때문에 멀티 스레드 + 멀티 프로세스 방식을 사용
(만약 단일 코어라면 멀티 스레드 방식이 유리)




참고 링크
운영체제 스터디 - 2. 프로세스 vs 스레드
반효경님 강의 - 프로세스
[운영체제(OS)] 3. 프로세스(Process)
프로세스와 스레드의 개념과 차이

profile
iOS Developer

0개의 댓글