[OS] 프로세스와 스레드

nana·2023년 2월 20일
0

공부

목록 보기
1/7

프로세스 (Process)

프로세스란?

  • 프로세스는 프로그램을 실행하면 만들어지는 작업의 단위로, 디스크로부터 메모리에 적재되어 운영체제로부터 주소 공간, 파일, 메모리 등의 자원을 할당받는다.
  • 프로세스는 함수의 매개변수, 복귀 주소와 로컬 변수와 같은 임시 자료를 갖는 프로세스 스택과 전역 변수들을 수록하는 데이터 섹션, 프로세스 실행 중에 동적으로 할당되는 메모리인 힙을 포함한다.

참고) 프로그램 : 하드 디스크에 존재하는 실행 파일로, 프로그램을 실행시키면 운영체제가 프로그램을 실행시키는 인스턴스를 만드는데, 그 인스턴스가 프로세스이다.

프로세스의 상태

  • Running : CPU에서 수행되는 상태.
  • Ready : 수행될 준비를 마쳤지만 다른 프로세스가 수행되고 있어서 기다리는 상태 (CPU 할당 받기를 기다리는 상태)
  • Waiting : 수행되고 있다가 I/O 또는 이벤트를 기다리는 상태 (이벤트 발생 전에는 수행 불가), waiting 상태일 때 이벤트가 발생하여 수행 가능한 상태가 되면 ready 상태로 바뀜.

Ready 상태에 있는 프로세스 중 하나를 골라 Running 상태로 바꾸는데, 이때 프로세스를 고르는 과정을 스케줄링(Scheduling)이라고 한다.

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

PCB는 특정 프로세스에 대한 중요한 정보를 저장 하고 있는 운영체제의 자료 구조이다. 운영체제는 프로세스를 관리하기 위해 프로세스의 생성과 동시에 고유한 PCB 를 생성한다.

프로세스는 CPU를 할당 받아 작업을 처리하다가 Context switch가 발생하면, 진행하던 작업을 저장하고 CPU를 반환해야 하는데, 이때 작업의 진행 상황(프로세스의 상태)을 모두 PCB에 저장하게 된다. 그리고 다시 CPU를 할당받게 되면 PCB에 저장되어있던 내용을 불러와 이전에 종료됐던 시점부터 다시 작업을 수행한다.

Context switch

CPU의 context를 하나의 프로세스에서 다른 프로세스로 바꾸는 것으로, context switch를 통해 프로세스를 나누어 수행하면 응답시간이 짧아진다.
짧은 시간동안 여러 프로세스의 상태가 바뀌면서 프로세스들이 동시에 자연스럽게 수행되는 것처럼 보일 수 있다.

Scheduling Queue

PCB는 프로세스가 실행된 후에 프로세스의 상태에 따라 queue에 매달리게 된다. (Running 상태일때는 queue에 들어가지 않음)

  • Ready queue : Running 상태였다가 Ready 상태가 된 프로세스가 들어가는 queue로, ready 상태인 프로세스들로만 구성된다.
  • Device queue : Running 상태였다가 interrupt가 발생하길 기다리는 Waiting 상태가 된 프로세스가 들어가는 queue로, interrupt가 발생하기를 기다리는 I/O 장치의 queue에 들어간다(disk queue, network queue 등)

스레드 (Thread)

  • 스레드는 할당 받은 자원을 이용하는 실행의 최소 단위로, 한 프로세스 내에서 동작되는 여러 실행 흐름으로써 프로세스 내의 주소 공간이나 자원을 공유할 수 있다.
  • 스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 그리고 스택으로 구성된다.
  • 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 그리고 열린 파일(open file)과 같은 운영체제 자원들을 공유한다.
  • 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시키는 것을 멀티 스레딩이라고 한다.

Multi process vs Multi thread

멀티 프로세스 (Multi process)

  • 장점 : 하나의 프로세스에 문제가 발생하더라도 다른 프로세스에는 영향을 끼치지 않고 정상적으로 수행된다.
  • 단점 : 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지한다. Context switching으로 인한 비용이 발생한다.

멀티 스레드 (Multi thread)

  • 장점 : 멀티 프로세스보다 적은 메모리 공간을 차지하고, 스레드 간 자원을 공유할 수 있다.
  • 단점 : 하나의 스레드에 문제가 발생하면 전체 스레드가 종료될 수 있다. 동기화 문제가 존재한다.

동기화 문제

두 개 이상의 프로세스/스레드가 동시에 동일한 공유 자원(shared data)에 액세스할 때 발생하는 문제이다.

Race condition

두 개 이상의 프로세스가 shared data에 액세스하는 상태로, 상황에 따라 비정상적으로 동작할 수 있기 때문에 동기화 문제가 발생할 수 있다.

임계 영역(Critical section)

동일한 자원을 동시에 접근하는 작업을 실행하는 코드 영역

임계 영역 해결 조건

  • Mutual Exclusion(상호 배제)
    프로세스 P1 이 Critical Section 에서 실행중이라면, 다른 프로세스들은 그들이 가진 Critical Section 에서 실행될 수 없다.
    (한 번에 하나의 프로세스만 들어갈 수 있도록 하는 메커니즘)
  • Progress(진행)
    Critical Section 에서 실행중인 프로세스가 없고, 별도의 동작이 없는 프로세스들만 Critical Section 진입 후보로서 참여될 수 있다.
    (아무도 쓰고 있지 않을 때 기다리지 않고 사용하는 것)
  • Bounded Waiting(한정된 대기)
    P1 가 Critical Section 에 진입 신청 후 부터 받아들여질 때가지, 다른 프로세스들이 Critical Section 에 진입하는 횟수는 제한이 있어야 한다.
    (다른 프로세스가 이미 사용중일때 기다리되, 무한히 기다리는 것이 아니라 기다리면 나의 차례가 온다는 것을 보장하는 것)

참고)
https://brunch.co.kr/@babosamo/100
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS#%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

profile
언젠가 개발자

0개의 댓글