-
스레드의 종류(하드웨어 스레드, 커널 스레드, 유저 스레드)IT/IT 기초(IT기사, 알고리즘, Linux 등) 2024. 11. 12. 20:07
스레드 개념이 헷깔려서 유튜버 쉬운코드님 영상을 참고하여 정리하는데,
관련 기초용어 설명도 덧붙였다.
하드웨어 스레드
CPU(중앙처리장치)의 코어는 명령을 실행하는 CPU 내의 단일 처리 장치다.
CPU에 코어가 많을수록 동시에 처리할 수 있는 작업이 많다.
일반적으로 하나의 코어는 하나의 스레드를 실행한다.
코어가 연산을 쉬는 경우(메모리의 RW 작업을 대기할 때)가 발생할 때
코어를 효율적으로 사용하기 위해
SMT(Simultaneous Multi Threading, AMD) 또는 HT(Hyper Threading,인텔) 기술을 이용한다.
가상의 스레드라는 개념으로 1 Core에 2 Thread로 구성이 된다.
OS 관점에서 본다면 가상의 코어(논리적 코어)라고 할 수 있다.
물리적으로 듀얼코어라도 OS가 인식할 때 논리적으로 쿼드코어라고 인식한다.
듀얼코어 중 첫번째 코어 하드웨어 스레드 1 하드웨어 스레드 2 듀얼코어 중 두번째 코어 하드웨어 스레드 3 하드웨어 스레드 4 OS 스레드 (= 네이티브 native 스레드, 커널 스레드)
OS 스레드는 커널 레벨에서 생성되는 스레드이다.
운영체제 시스템 내에서 생성되어 동작하는 스레드로 커널이 직접 관리한다.
CPU에서 실제로 실행되는 단위(CPU 스케줄링의 단위)이다.
(개발자가 작성한) 사용자 코드와 (System call로 실행된) 커널 코드 모두 OS 스레드에서 실행된다.
커널 영역에서 스레드의 컨텍스트스위칭이 일어난다.
컨텍스트스위칭이 일어날 때마다 유저모드에서 커널모드로 전환이 된다
CPU리소스 사용하는 비용(과 시간적 비용)이 발생한 뒤에 커널모드에서 유저모드로 전환이 된다.
물리적 코어 1 하드웨어 스레드
(가상의 코어) 1스레드 1 스레드 2 하드웨어 스레드
(가상의 코어) 2스레드 3 스레드 4 위의 예시는 물리적으로 단일코어지만, OS는 듀얼코어라 인식한다.
가상의 코어마다 2개의 스레드를 할당해서 4개의 OS 스레드를 만들 수 있다.
OS 기초 내용 참고 ! ! !
커널(Kernal)
운영체제의 90%를 차지하는 핵심부분
운영체제 내부에서 컴퓨터의 하드웨어를 제어
쉘(Shell)
명령어 해석기
명령어(스크립트)를 커널에게 전달하고, 커널이 이해하도록 번역
윈도우의 cmd, linux/unix의 bash 가 대표적인 예
터미널(Terminal)
터미널은 쉘을 실행하고 명령을 입력할 수 있게 해주는 프로그램
콘솔(Console)
터미널과 혼용해서 사용하기도 하지만 터미널이 보다 큰 개념으로 '터미널 = 콘솔 + 원격제어 환경'
프롬프트(Prompt)
터미널에서 텍스트를 입력할 수 있는 한 줄의 공간
정리하자면 이렇다,
사용자가 터미널(콘솔) (도구) 을 켠다.
프롬프트에 명령어(스크립트)를 입력한다.
쉘이 사용자의 명령어를 해석하고 실행한다.유저 스레드
스레드 개념을 프로그래밍 레벨에서 추상화 한 것이다.
사용자 레벨에서 생성 및 관리되는 스레드이다.
(그래서 커널이 따로 관리하지 않고, 커널이 이 스레드에 대해서 알지도 못한다.)
유저 스레드가 CPU에서 실행되려면 OS 스레드와 반드시 연결돼야 한다.Thread t = new Thread(); //자바를 이용한 유저 레벨 스레드 t.start(); /* start() 구현을 보면 내부적으로 start0() 호출 start0()는 JNI(JAVA Native Interface)의 native 메서드고, OS system call 호출 만약 OS가 리눅스라면 clone system call 호출하여 OS 레벨 스레드 생성 결국 유저 레벨 스레드와 OS 레벨 스레드가 연결됨 자바는 유저 스레드와 OS 스레드가 1대1로 연결된 모델 스레드 관리(스케줄링 등을 포함)를 OS(커널)에 위임 CPU의 멀티코어 활용 한 프로세스가 여러개의 스레드를 가질 수 있다 한 스레드가 block I/O 수행하면 blocking이 되어서 기다리지만 나머지 스레드는 잘 동작한다. */
'IT > IT 기초(IT기사, 알고리즘, Linux 등)' 카테고리의 다른 글
네트워크의 기본 구성요소 (0) 2024.11.13 비트와 바이트, 문자 인코딩 개념 정리 (0) 2024.11.11 [Linux] 데몬이란? systemd 프로세스란? (0) 2020.06.15 [Linux] df, du 명령어 사용법 (디스크 여유 공간, 사용량 확인) (0) 2020.06.03 [Linux] 내가 보려고 정리하는 Ubuntu 단축키 & 명령어 (맥 기준) (0) 2020.06.03