[운영체제] 스레드

byeol·2023년 3월 22일

오늘은 스레드에 대해서 배웠다.

프로세스가 보조기억장치에 저장되어 있다가 메모리에 적재된 실행중인 프로그램을 의미한다면
스레드는 프로세스 안에 있는 실행 흐름의 단위이다.

따라서 하나의 프로세스에는 하나의 스레드가 혹은 여러 개의 스레드가 존재할 수 있다.

오늘도 🏃‍♂️🏃‍♂️🏃‍♀️🏃‍♀️🏃🏃🏃‍♂️🏃‍♀️

스레드

전통적인 프로세스 = 한 번에 하나의 부분만 실행되는 단일 스레드로 구성

스레드의 개념 도입
프로세스
= 하나의 프로세스는 한 번에 여러 일을 동시에 처리할 수 있다.
= 프로세스를 구성하는 여러 명령어를 동시에 실행할 수 있다.

스레드

  • 프로세스를 구성하는 실행 단위
  • 프로세스 내에서 각기 다른 스레드 ID, 프로그램 카운터 값을 비롯한 레지스터 값, 스택으로 구성
  • 실행에 필요한 최소한의 정보만 유치한 채 프로세스의 자원을 공유하며 실행
  • 최근 많은 운영체제에서는 CPU에 처리할 작업을 전달할 때 프로세스가 아닌 스레드 단위로 전달

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

  • 멀티프로세스
    여러 프로세스를 동시에 실행하는 것
  • 멀티스레드
    여러 스레드로 프로세를 동시에 실행하는 것

fork 시스템 호출을 통해서 "hello,os"를 출력하는 총 3개의 프로세를 만들기 vs. "hello,os"를 출력하는 3개의 스레드 만들기

  • fork 시스템 호출을 통해서 프로세스를 생성하는 것은 모든 자원이 그대로 복제되어 메모리에 적재되는 것이다.

    결국 중복된 데이터들이 메모리에 적재되기 때문에 메모리 낭비가 심하다.

    따라서 스레드를 통해서 호출하는 것이 메모리를 더 효율적으로 사용한다.

  • 스레드들은 서로 자원을 공유하기 때문에 서로 협력과 통신에 유리하다. 그러나 하나의 스레드가 문제가 생기면 다른 스레드에도 영향을 끼친다.

+ 프로세스 간 통신

하나의 프로세스 내 스레들은 서로 통신할 수 있다고 했다.

마찬가지로 프로세스들끼리 자원을 공유하여 데이터를 주고 받을 수 있다.

이를 IPC(Inter-Procexx Communication) 프로세스 간 통신이라고 한다.

예를 들어 하나의 프로세스는 hello.txt에 내용을 입력하고 다른 프로세스는 hello.txt 파일을 읽는다면 이 두 프로세스는 파일을 통한 프로세스 통신을 하고 있는 것이다.

또한 프로세스들은 공유하는 메모리 영역을 두오 데이터를 주고 받을 수 있다. 이 메모리 영역을 공유 메모리라고 한다.

profile
꾸준하게 Ready, Set, Go!

0개의 댓글