본문 바로가기
Computer Science

OS 프로세스와 스레드

by softserve 2021. 11. 30.
반응형
  • 프로세스 Process : 실행 중인 프로그램 또는 스케줄링의 대상이 되는 작업을 말합니다.

프로그램이 실행되려면 우선 메모리에 적재되어야 하고, 스케줄러가 자원을 할당해줄 때까지 기다려야 합니다.

이때 메모리에서 자기 차례를 기다리거나 실행되고 있는 프로그램의 인스턴스를 프로세스라고 합니다.

프로세스는 ① 코드, 데이터, 힙, 그리고 스택으로 나뉘는 메모리 영역 ② CPU 시간 ③ 주소공간 등을 할당받게 됩니다.

각각의 프로세스는 독립적이며 서로 데이터를 주고받기 위해서는 특별한 통신방법을 통해야 합니다.

- Inter Process Communication (IPC, 프로세스간 통신) : socket, message queue, pipe, named pipe, semaphore, shared memory, memory map 등

  • 스레드 Thread : 프로세스 내 실행의 단위, 실행되는 흐름의 단위

프로세스가 할당받은 자원 중 일부 (코드, 데이터, 힙 등) 를 공유하면서 진짜 일을 하는 단위를 말합니다.

스레드는 고유한 스레드 id와 레지스터, 스택을 갖고 있습니다.

별도의 스택을 가지는 이유는 스택에 저장되는 파라미터, 복귀주소, 지역변수 등을 이용해 스레드가 독립적인 실행 흐름을 만들 수 있도록 하기 위해서입니다.

  • 멀티스레딩을 하는 이유

하나의 프로세스에서 다른 프로세스로 전환하는 Context switching 에는 막대한 비용이 들어갑니다.

반면 스레드는 메모리를 공유하므로 자원 효율성 및 비용 측면에서 이익입니다.

또 같은 이유에서 통신 비용도 더 적다는 장점이 있습니다. (Heap을 이용)

- Context Switching : 문맥 교환 즉, 현재 작업 상태를 저장하고 다음 작업의 상태를 읽어 들이는 것을 말합니다.

context switching은 위와 같은 multitasking 상황뿐 아니라 interrupt handling, user/kernel mode switching에 의해서도 발생하게 됩니다.

우선 PCB(process control block)의 program counter, register 등에 저장된 현재 프로세스에 대한 정보를 ready queue에 저장합니다. 그리고 새로운 작업에 대한 정보를 PCB에 적재함으로써 context switching이 이루어집니다.

- PCB : 프로세스에 대한 정보를 담고 있는 자료구조입니다. pid, state, program counter, register와 스케줄링, IO, 메모리 에 관한 정보를 가지고 있습니다.

  • 멀티스레딩의 문제점

여러 스레드가 전역 변수를 함께 사용하므로 충돌이 발생할 수 있습니다. 프로세스에 문제가 생기더라도 다른 프로세스는 영향을 받지 않는 것과 달리, 하나의 스레드에 문제가 발생하면 프로세스 전체에 영향을 미치게 됩니다.

  • 문제의 해결

여러 개의 스레드가 공유자원에 접근할 때 동기화 기법을 사용해서 안전성을 높일 수 있습니다. 이것을 Thread-safety (스레드 안전성) 라고 합니다.

다시 말해 Thread-safe 함수는 여러 스레드에 의해 동시에 호출되어, 공유자원을 사용하게 되는 경우에도 문제를 일으키지 않습니다.

유사한 개념으로, Re-entrant 함수도 여러 스레드에 의해 동시에 호출되지만 공유자원을 사용하지 않으므로 동일한 결과를 보장합니다.

모든 Reentrant 함수는 Thread-safe 하지만 Thread-safe 하다고해서 Reentrant 한 것은 아닙니다.

  • 로 인한 또 다른 문제점

동기화로 인해 병목현상이 발생하여 성능이 저하되는 문제가 있습니다.

반응형

댓글