프로세스와 스레드

Kyung yup Lee·2020년 12월 7일
0

운영체제

목록 보기
2/5

프로세스

정의 : 실행중인 프로그램

→ 디스크에 있던 프로그램을 메모리에 적재하여 운영체제의 제어를 받는 상태

→ 이는 자신만의 메모리 영역이 있다는 것

프로세스가 실행되려면 자원이 필요함

  • 프로세서 점유 시간

  • 메모리

  • 파일

  • 입출력 장치

프로세스는

  • 프로그램 카운터 (현재의 활동 상태)

  • 레지스터 내용 ( 프로세서의 현재 활동)

    를 포함함

메모리 영역

스택

데이터를 일시적으로 저장

지역변수 - 변수가 범위 밖으로 이동하면 공간 해제

호출한 함수의 반환 주소, 반환 값, 매개 변수 등에 사용

코드 영역과는 별도로 유지되는 자유 영역

동적 메모리 할당

데이터

프로그램의 가상 주소 공간- 전역변수 or 정적변수를 저장 할당

코드

읽기 전용 → 코드 영역은 곻ㅇ유할 수 있어, 자주 실행하는 프로그램의 사본은 메모리에 존재

프로세스의 상태 변화

프로세스의 상태변화

준비 → 실행 : dispatch = 준비 큐 맨 앞에 있던 프로세스가 프로세서를 점유하는 것

실행 → 준비 : timeout = 운영체제는 실행 상태 프로세스가 일정 시간 이후 자원을 내놓게 함.

실행 → 대기 : block = 입출력 연산 등이 필요하거나 새로운 자원 요청 등의 문제로 대기하게 될 경우

대기 → 준비 : wakeup

컨텍스트 스위칭

현재 실행중인 프로세스와 별도로 외부에서 이벤트가 일어나면 인터럽트가 발생하는데, 인터럽트 처리를 한 후 이 유형에 따라 각각 별도의 루틴으로 분기한다.

  1. I/O 인터럽트 : 입출력 동작이 발생하거나 끝난 경우
  2. clock 인터럽트 : 현재 실행중인 프로세스의 할당 시간이 다 되어 프로세스 교체

인터럽트가 발생하더라도 실행중인 프로세스를 재실행할 수 있으므로 인터럽트가 반드시 컨텍스트 스위칭으로 이어지지는 않음

컨텍스트 스위칭이 발생하면 현재 프로세스 P1 은 PCB1에 현재 상태를 저장하고 P2 와 교환, PCB2에서 P2의 정보를 받아와 프로세서에 적재

  • 컨텍스트 스위칭이 발생하는 동안은 프로세서는 아무 일도 하지 못함.
  • 때문에 너무 많은 컨텍스트 스위칭은 오히려 효율에 문제를 발생시킴

스레드

프로세스는 자원, 제어라는 두 가지 특성이 있다.

자원 : 프로세서 점유시간, 메모리, 파일, 입출력 등

이 중에 제어만 분리한 실행 단위를 스레드라고 정의한다.

스레드는 프로세스의 직접 실행 정보(코드)를 제외한 나머지 프로세스 관리 정보를 공유함 (스택, 힙, 전역 데이터)

스레드의 장점

사용자 응답성 증가 : 웹 브라우져가 다운로드를 하는 동안 사용자가 브라우져의 다른 기능을 사용한다.

프로세스의 자원과 메모리 공유 가능 : 프로세스의 자원을 스레드가 공유함.

경제성 : 프로세스를 생성하는 것보다 스레드를 생성하는 것이 오버헤드가 적음

다중 처리로 성능과 효율 향상 : 병렬 실행

결론 : 프로세스보다 스레드를 생성하는 것이 더 빠르고, 동일한 프로세스에 있는 스레드 간의 교환이나 스레드 종료도 훨씬 빠름. 경제적임

ex) 워드 편집기: 사용자 키 입력 응답 스레드, 이미지나 텍스트를 보여주는 스레드, 지정된 시간에 디스크에 저장하는 백업 스레드 등

스레드의 상태

프로세스와 상태 변화 과정은 거의 같음

but, 프로세스와 달리 자원을 초기화할 필요가 없음. 프로세스가 스택과 레지스터를 제공하기 때문에

profile
성장하는 개발자

0개의 댓글