프로세스와 스레드

심효은이다·2023년 4월 3일
0

1. 프로세스의 상태

프로세스란? 실행을 위해 메모리에 올라온 동적인 상태

-프로세스의 4가지 상태

프로세스의 5가지 상태

  • 생성상태 : 프로세스가 메모리에 올라와 실행 준비를 완료한 상태
  • 준비상태 : 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태, dispatch 명령으로 프로세스 제어 블록 선택, CPU 스케줄러가 디스패치 실행 시 준비상태에서 실행상태로 바뀜
  • 실행상태 : 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태, 타임 슬라이스 동안만 작업 가능
  • 대기상태 : 실행 상태의 프로세스가 입출력 요청 시 완료될 때까지 기다리는 상태, wakeup으로 해당 프로세스의 프로세스 제어 블록이 준비 상태로 이동
  • 완료상태 : 실행 상태의 프로세스가 주어진 시간 동안 작업을 마치면 진입하는 상태
    • 디스패치 : 준비 상태의 프로세스 중 하나를 골라 실행 상태로 바꾸는 CPU 스케줄러의 작업
    • 타임아웃 : 프로세스가 자신에게 주어진 하나의 타임 슬라이스 동안 작업을 끝내지 못하면 다시 준비 상태로 돌아가는 것

  • 휴식상태 : 프로세스가 일시적으로 작업을 쉬고 있는 상태
  • 보류상태 : 프로세스가 메모리에서 잠시 쫓겨난 상태

2. 프로세스 제어 블록

프로세스 제어 블록(PCB) : 프로세스를 실행하는 데 필요한 중요한 정보를 보관하는 자료 구조, 고유 프로세스 제어 블록 가짐, 프로세스 생성 시 만들어져 실행 완료 시 폐기

프로세스 제어 블록의 구성

  • 포인터 : 준비 상태나 대기 상태의 큐를 구현할 때 사용, 대기 상태에는 같은 입출력을 요구한 프로세스끼리 연결할 때 사용
  • 프로세스 상태 : 프로세스가 현재 어떤 상태에 있는지를 나타내는 정보
  • 프로세스 구분자 : 운영체제 내에 있는 여러 프로세스를 구현하기 위한 구분자
  • 프로그램 카운터 : 다음에 실행될 명령어의 위치를 가리키는 프로그램 카운터의 값
  • 프로세스 우선순위 : 프로세스의 실행 순서를 결정하는 우선순위
  • 각종 레지스터 정보 : 프로세스가 실행되는 중에 사용하던 레지스터의 값
  • 메모리 관리 정보 : 프로세스가 메모리의 어디에 있는지 나타내는 메모리 위치 정보, 메모리 보호를 위해 사용하는 경계 레지스터 값과 한계 레지스터 값 등
  • 할당된 자원 정보 : 프로세스를 실행하기 위해 사용하는 입출력 자원이나 오픈 파일 등에 대한 정보
  • 계정 정보 : 계정 번호, CPU 할당 시간, CPU 사용 시간 등
  • 부모 프로세스 구분자와 자식 프로세스 구분자 : 부모 프로세스를 가리키는 PPID와 자식 프로세스를 가리키는 CPID 정보

3. 문맥 교환

문맥교환 : 현재 CPU를 사용중인 프로세스의 CPU 제어권이 다른 프로세스로 이양되는 과정, 문맥교환에 필요한 시간, 메모리 등을 오버헤드

-문맥 교환 절차

4. 스레드

스레드 : 프로세스 내에서 실제로 작업을 수행하는 주체, 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스
-> 운영체제 입장에서의 작업 단위는 프로세스
-> CPU 입장에서의 작업 단위는 스레드

프로세스와 스레드 차이 : 프로세스끼리는 약하게 연결되어 있고 스레드끼리는 강하게 연결되어 있음
멀티태스크 : 여러 개의 프로세스로 구성
멀티스레드 : 하나의 프로세스에 여러 개의 스레드로 구성, 프로세스 내 작업을 여러 개의 스레드로 분할함으로써 작업의 부담을 줄임
멀티태스킹 : 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분
멀티프로세싱 : CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 작업 환경
CPU 멀티스레드 : 한 번에 하나씩 처리해야 하는 스레드를 파이프라인 기법을 이용하여 동시에 여러 스레드를 처리하도록 만든 병렬 처리 기법

  • 멀티스레드 : 운영체제가 소프트웨어적으로 프로세스를 작은 단위의 스레드로 분할하여 운영
  • CPU 멀티스레드 : 하드웨어적인 방법으로 하나의 CPU에서 여러 스레드를 동시에 처리하는 병렬 처리

0개의 댓글