[OS] 스레드(Thread)

Suyeon·2022년 2월 13일
0

Operating System

목록 보기
5/10

💡 스레드는 프로세스의 코드에 정의된 절차에 따라 CPU에 작업을 요청하는 실행단위이다.

1. 프로세스의 작업 과정

  1. 운영체제는 코드와 데이터를 메모리에 가져온다.
  2. 프로세스 제어블록을 생성한다.
  3. 작업에 필요한 메모리 영역을 확보한다.
  4. 준비된 프로세스를 준비큐에 삽입한다.
  5. 프로세스가 생성되면 CPU스케줄러는 프로세스가 해야할 일을 CPU에 전달하고 CPU가 작업을 수행한다.
    1. CPU 스케줄러가 CPU에 전달하는 일 하나가 스레드이다.
    2. CPU가 처리하는 작업의 단위는 프로세스로부터 전달받은 스레드이다.
    3. 운영체제 입장에서 작업단위는 프로세스이고 CPU 입장에서 작업단위는 스레드이다.

2. 스레드 관련 용어

멀티스레드

💡 프로세스 내 작업을 여러개의 스레드로 분할함으로써 작업의 부담을 줄이는 프로세스 운영기법

  • 워드프로세서 프로세스 내의 문서 편집, 문서 입출력, 맞춤법 검사등 스레드들이 동시에 작업을 한다.
  • 하나의 프로세스안의 스레드는 강하게 연결되어있으므로 워드프로세스가 종료되면 프로세스 내의 스레드도 강제종료된다.
  • 멀티스레드는 변수나 파일등을 공유하고 전역 변수나 함수 호출등의 방법으로 스레드간 통신을 한다.

멀티태스크

💡 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법(시분할 시스템)이다. 시분할 시스템에서 운영체제가 CPU에 전달하는 작업은 프로세스가 아니라 스레드이다.

  • 워드프로세서와 프린트 스풀러는 서로 독립적으로 작동하다가 필요할 때 출력할 데이터를 주고받는다.
  • 워드프로세스가 비정상적으로 종료되어도 프린터 스플러는 정상적으로 작동한다.
  • 서로 독립적인 프로세스는 데이터를 주고받을 때 프로세스간 통신(Inter Process Communication, IPC)을 주고 받는다.

멀티프로세싱

  • CPU를 여러개 사용하여 여러개의 스레드를 동시에 처리하는 작업환경
  • 슈퍼스칼라 기법
  • 하나의 컴퓨터에 여러개의 CPU 혹은 하나의 CPU내 여러개의 코어에 스레드를 배정하여 동시에 작동하는 것이다.

CPU 멀티스레드

  • 한번에 하나씩 처리해야하는 스레드를 파이프라인 기법을 이용하여 동시에 여러 스레드를 처리하도록 만든 병렬기법이다.

3. 멀티스레드의 구조

💡 멀티스레드는 비슷한 일을 하는 2개의 프로세스를 만드는 대신, 하나의 프로세스내에 여러개의 스레드를 생성하고 코드, 파일등의 자원을 공유함으로써 자원의 낭비를 막고 효율성을 향상한다.

멀티스레드가 필요한 이유

💡 워드프로세서에서 여러개의 작업을 동시에 진행하는 경우를 생각해보자

  • 멀티태스킹의 경우, fork()시스템 호출로 프로세스를 여러개 만들어서 동시에 여러 작업을 진행한다.
    • 비슷한 일을 하는 2개의 프로세스를 만든다.
    • 워드프로세서의 코드 일부, 프로세스 제어 블록, 공유변수가 메모리의 여러곳에 중복되어 메모리가 낭비된다.
  • 멀티스레드의 경우, 하나의 워드프로세서에 스레드를 여러개 생성하여 동시에 여러 작업을 진행한다.
    • 코드, 파일등의 자원을 공유함으로써 자원의 낭비를 막고 효율성을 향상한다.
    • 첫번째 워드프로세서는 천천히 실행되지만 두번째부터는 빠르게 실행된다.

멀티스레드의 장점

  1. 응답성 향상: 한스레드가 입출력으로 인해 작업이 진행되지 않더라도 다른 스레드가 작읍을 계속하여 사용자의 작업 요구에 빨리 응답할 수 있다.
  2. 자원공유: 한 프로세스 내에서 독립적인 스레드를 생성하면 프로세스가 가진 자원을 모든 스레드가 공유하게 되어 작업을 원활하게 진행할 수 있다.
  3. 효율성 향상: 여러개의 프로세스를 생성하는 것과 달리 멀티스레드는 불필요한 자원의 중복을 막는다.
  4. 다중 CPU 지원: 2개 이상의 CPU를 가진 컴퓨터에서 멀티스레드를 사용하면 다중 CPU가 멀티스레드를 동시에 처리하여 CPU 사용량이 증가하고 프로세스의 처리 시간이 단축된다.

멀티스레드의 단점

  1. 모든 스레드가 자원을 공유하기 때문에 한 스레드에 문제가 생기면 전체 프로세스에 영향을 미친다.
    1. 프로세스를 여러개 만들 경우, 프로세스는 독립적이여서 한 프로세스의 문제가 다른 프로세스로 전달되지 않는다.

멀티스레드 모델

사용자 스레드(User-level thread)

  • 운영체제가 멀티스레드를 지원하지 않을 때 사용하는 방식
  • 초기의 스레드 시스템에서 이용되었다.
  • 커널입장에서는 일반 프로세스이지만 커널이 하는 일을 라이브러리가 대신 처리하여 여러개의 스레드를 작동한다.
    • 라이브러리는 커널이 지원하는 스케줄링이나 동기화같은 기능을 대신 구현해준다.
  • 사용자의 프로세스내에 여러개의 스레드가 존재하지만 커널의 스레드 하나와 연결되기 때문에 1 to N 모델이라고 부른다.

장점

  • 라이브러리가 직접 스케줄링을 하고 작업에 필요한 정보를 처리하기 때문에 문맥교환이 필요없다.
    • 커널에서 문맥교환을 하는 이유는 시간을 나누어 서로 다른 프로세스를 처리하기 위해서이다.
  • 문맥교환같은 부가적인 작업이 줄어들어 속도가 빠르다.

단점

  • 한 프로세스의 타임슬라이스를 여러 스레드가 공유하기때문에 여러개의 CPU를 동시에 사용할 수 없다.
  • 공유 변수를 보호하는 장치를 라이브러리에서 구현해야해서 보안에 취약하다.

커널 스레드 (Kernel-level thread)

  • 커널이 멀티스레드를 지원하는 방식
  • 하나의 사용자 스레드가 하나의 커널 스레드와 연결되기 때문에 1 to 1 모델이라고 부른다.
  • 독립적으로 스케줄링 되므로 특정 스레드가 대기 상태에 들어가도 다른 스레드는 작업을 계속할 수 있다.

장점

  • 커널 레벨에서 모든 작업을 지원하기 때문에 멀티 CPU를 사용할 수 있다.
  • 하나의 스레드가 대기 상태에 있어도 다른 스레드는 작업을 계속할 수 있다.
  • 커널의 기능을 사용하므로 보안에 강하고 안정적이다.

단점

  • 문맥교환을 할 때 오버헤드 때문에 느리게 작동한다.

멀티레벨 스레드(Multi-level thread)/ 하이브리드 스레드(Hybrid thread)

  • 사용자 스레드와 커널 스레드를 혼합한 방식으로, M to N 모델이라고 불린다.
profile
Hello World.

0개의 댓글