Week2(2/2) Thread
쓰레드
쓰레드에 대해 설명해주세요
쓰레드는 프로세스 내에서 실행되는 독립적인 실행 흐름의 단위
하나의 프로세스 내에서 여러 개의 스레드가 병렬로 실행
스레드는 같은 프로세스 내에서 코드(Code), 데이터(Data), 힙(Heap) 영역을 공유 스택(Stack)과 레지스터(Registers)는 각 스레드가 독립적으로 관리
메모리 공간을 공유하기 때문에 스레드 간의 통신은 효율적이지만, 이러한 공유로 인해 동시성 문제나 데드락(Deadlock)과 같은 문제가 발생.
스레드의 메모리 공간에 대해 설명해주세요.
프로세스가 할당받은 메모리 공간 중 코드(Code), 데이터(Data), 힙(Heap) 영역을 공유 코드 영역은 프로그램의 명령어가 저장된 부분 데이터 영역은 전역 변수와 정적 변수가 저장되는 공간 힙 영역은 동적으로 할당된 메모리가 위치합니다.
스택(Stack)과 레지스터(Registers)는 각 스레드가 독립적으로 관리하는 영역 스택은 함수 호출 시의 매개변수, 복귀 주소, 로컬 변수 등의 데이터를 저장 레지스터는 스레드가 현재 실행 중인 명령어와 그 상태를 저장하는 곳으로, 스레드 간 컨텍스트 스위칭 시 중요한 역할
쓰레드 제어 블록(Thread Control Block)에 대해 설명해주세요.
각 스레드의 실행 상태와 관련된 정보를 저장하는 데이터 구조
주로 컨텍스트 스위칭이 발생할 때, 현재 스레드의 상태(레지스터 값, 프로그램 카운터 등)를 저장
TCB에는 스레드ID, CPU스케줄링 정보, 프로그램 카운터, 레지스터 값 등이 저장
커널 내부에 저장되며, PCB와 유사하게 동작하지만 스레드에 특화된 정보를 저장
멀티스레딩 환경에서 효율적인 작업 처리가 가능.
사용자 수준 스레드와 커널 수준의 스레드의 차이를 설명해 보세요.
사용자 수준 스레드
운영체제 커널의 개입 없이 사용자 영역에서 스레드를 관리하는 방식
컨텍스트 스위칭이 빠르고 오버헤드가 적음
블로킹 작업( IO작업)이 발생할시, 커널은 프로세스 전체의 작업으로 인식하여 모든 스레드가 중단.
커널 수준의 스레드
커널이 직접 관리하는 스레드
컨텍스트 스위칭이 상대적으로 느리고 오버헤드가 더 큼
한 스레드가 블로킹 상태가 되어도 다른 스레드들은 계속 실행
멀티 스레딩 프로그래밍에 대해 설명해주세요.
하나의 프로세스 내에서 여러 개의 스레드를 생성하여 동시에 작업을 처리하는 프로그래밍 방식
목적은 CPU 자원의 효율적인 사용과 응답성 향상
스레드는 메모리 자원을 공유하여 프로세스 간의 통신보다 더 효율적
동기화 문제, 경쟁상태 또는 데드락 같은 문제 발생.
멀티 스레드 프로그래밍의 장단점을 설명해주세요.
하나의 프로세스 내에서 여러 개의 스레드를 병렬 또는 교대로 실행하여 작업을 처리하는 프로그래밍 방식
장점:
성능 향상
효율적인 자원 공유
응답성 향상
단점:
동기화 문제: 경쟁상태, 데드락 -> 락, 세마포어 같은 동기화 기법 사용
컨텍스트 스위칭 오버헤드
멀티 프로세스 대신 멀티 스레드를 사용하는 이유는 무엇인가요?
효율적인 자원 공유: 코드, 데이터, 힙 영역을 공유
컨텍스트 스위칭 비용
성능 및 자원 효율성: 스레드 생성이 더 빠르고 메모리 사용량이 적습니다.
단점: 동시성 문제, 경쟁상태, 데드락 -> 락, 뮤텍스, 세마포어
멀티 스레드 프로그래밍에서 주의해야 할 점이 뭔가요?
멀티 스레드 프로그래밍은 하나의 프로세스 내에서 여러 개의 스레드를 사용하여 작업을 병렬적 또는 동시적으로 처리할 수 있는 효율적인 방법
동시성 문제: 동기화 문제, 경쟁상태/데드락 문제 발생 (데이터 일관성)
동기화 필요성: 락 메커니즘을 사용하여
데드락 (비선점, 자원 대기, 순환 구조, 자원 점유)
컨텍스트 스위칭 오버헤드 (레지스터와 스택 정보를 저장하고 복원하는 과정이 빈번)
스레드 안전성
Last updated