일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Agile
- 벡터
- 836
- 자연어처리
- OS
- 파싱테이블
- 컴파일러
- 데이터베이스
- 컴파일
- NLP
- 스케줄러
- DB
- 가상메모리
- 운영체제
- React
- 프로세스
- 파싱
- 정보검색
- 소프트웨어공학
- 오픈소스웹소프트웨어
- css
- 객체지향설계
- 애자일
- 클래스
- 웹소프트웨어
- 언어모델
- Linear Algebra
- C언어
- 데이터분석
- 랩실일기
Archives
- Today
- Total
observe_db
[OS] 4. Thread 본문
4/3
Part 1.
thread: 본뜻은 실.
- : 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 1개인 단일 쓰레드.
- OS 스케줄러에 의해 관리될 수 있는 가장 작은 단위의 프로그램 조각
- main 프로그램과 독립적으로 실행되는 함수
- 프로세스 내의 다른 쓰레드와 주소와 전역변수 등의 데이터는 공유.
- 레지스터, 스택, 시그널 등은 쓰레드 별로 별도
물리적(실제로 multicore를 이용한 동시)/개념적(시분할 등을 이용한 사실상 동시)
쓰레드당 개별로 PCB(프로그램 컨트롤 블럭)을 가진다.
등장 배경
- 소프트웨어 설계 요구: 병렬처리 작업이 자연스러운 시스템 개발 필요(90's)
- 하드웨어 병렬처리 지원: 멀티코어, 멀티프로세서 컴퓨터 보편화
- 효율적 협업 필요: IPC보다 공유 공간을 이용한 데이터 교환 효율성
사용자 수준 스레드(user-level thread)
- 사용자 공간 쓰레드 라이브러리로 관리
- 사용자 수준에서 쓰레드 구현
- 실행시간 시스템(run-time system)에 의해 관리
- 생성(create)/전환(switch)/동기화(synchronize)가 사용자 수준에서 수행
- 쓰레드 스케줄러 라이브러리 제공
- 커널은 이 쓰레드의 존재를 알지 못함.
- 커널 수준 쓰레드는 가상의 프로세서로 간주
- 사용자 수준 쓰레드가 번갈아가며 커널 수준 쓰레드 사용
- N:1의 다대일 관계
- libc_r(FreeBSD의 쓰레드 라이브러리)
- 커널 스택: 외부 인터럽트/예외상황/시스템 콜로 커널로 진입할 때 진행중인 프로세스의 문맥정보를 저장하고 해당 핸들러가 동작하며 사용하는 프로세스별 커널영역에 할당된 공간
커널 수준 스레드(kernal-level thread)
- 커널에 의해 지원
- 각 사용자 수준 쓰레드별로 별도 커널 실행문맥 생성
- 각 쓰레드는 커널 자원 사용(생성가능한 갯수 제한 발생)
- 멀티프로세서 성능활용 가능(동시 실행 가능 쓰레드 지원)
- 같은 구조에 담아서, 같은 주소를 공유한다.
- 1:1의 관계
- 쓰레드간 문맥교환 시간 부담
- 시스템콜을 통한 쓰레드 연산 부담.
- 쓰레드 단위
- Linux의 Thread
- 사용자 수준 쓰레드를 프로세스와 동일하게 간주
- 쓰레드와 프로세스를 task로 관리
하이브리드 방식
- 다대다 대응방식
- ex) Solaris의 LWP(Light-weight process)
- 사용자 수준 쓰레드가 커널 수준 쓰레드에 매핑되면서 프로세서에서 실행
Part2.
쓰레드 생명 주기(life cycle)
쓰레드 관련 작업(operation)
- 생성(create)
- 종료(exit, terminate)
- 일시중지(suspend)
- 재시작(resume)
- 수면(sleep)
- 깨우기(wake up)
- 취소(cancel): 특정쓰레드가 완료되기 전에 종료
- 조인(join): 특정 쓰레드가 종료될 때까지 대기
시그널 처리(signal handling)
- 프로세스에 전달된 시그널은 해당 프로세스의 모든 쓰레드에 전달
- 각 쓰레드는 받고싶은 시그널만 수신하도록 masking 가능(특정/전체/일부에 전달 가능)
- 동일 프로세스에 등록된 시그널의 처리기는 쓰레드들이 공유
- 실행 상태가 아닌 쓰레드에 전달되는 시그널은 대기 시그널 대기열(pending signal queue)에 저장
- 실행상태이면 대기열 시그널 처리
- 시그널에 의해 쓰레드가 종료되면 해당 쓰레드는 포함하는 프로세스의 전체 쓰레드 종료.
Part 3.
Pthreads
- 쓰레드 생성 및 동기화를 위한 POSIX(Portable Operating System Interface) 표준 API
- API는 쓰레드 라이브러리의 동작에 대해서만 명세
- UNIX 계열 OS에서 대부분 지원
- Pthreads 함수의 예
- Pthread_create
- Pthread_exit
- Pthread_join
- Pthread_yield: 양보
- Pthread_attr_init
- Pthread_attr_destroy
Linux 쓰레드
- 프로세스와 쓰레드를 모두 task로 칭함.
- 자식 태스크 생성을 위해 fork() 사용
- 쓰레드 생성을 위해 clone() 사용
CLONE_FS: 파일시스템 정보 공유
CLONE_VM: 메모리 공간 공유
CLONE-SIGHAND: 시그널 처리기 공유
CLONE_FILES: 열린 파일 공유
CLONE_PID: 부모 프로세스와 같은 프로세스 식별번호 사용
CLONE_NEWUTS: 새로운 UTS 네임스페이스 생성
SIGCHLD: 종료시 부모 프로세스에 SIGCHILD 시그널 전달
Java 쓰레드
- Thread 클래스를 상속한 클래스의 run() 정의
- Runnable 인터페이스를 구현한 클래스의 run() 정의
'학교 공부 > 운영체제(OS)(3-1)' 카테고리의 다른 글
[OS] 6. 교착상태와 무기한 연기 (0) | 2023.04.10 |
---|---|
[OS] 5. 비동기 병행 실행(Asynchronous Concurrent Execution) (0) | 2023.04.06 |
[OS] 3. 프로세스(Process)(2) (0) | 2023.04.05 |
[OS] 3. 프로세스(Process)(1) (0) | 2023.03.29 |
[OS] 2. 하드웨어와 소프트웨어(3) (0) | 2023.03.21 |
Comments