리눅스 스터디 1회차 in KOSMOS
VM에 설치하므로 이미지 부분은 건너뛰세요.
on Onedrive:
https://onedrive.live.com/redir?resid=c4dd3c6db99e8d1a!11192&authkey=!ALtcH-dt9PGfl58&ithint=file%2cpptx
리눅스 스터디 1회차 in KOSMOS
VM에 설치하므로 이미지 부분은 건너뛰세요.
on Onedrive:
https://onedrive.live.com/redir?resid=c4dd3c6db99e8d1a!11192&authkey=!ALtcH-dt9PGfl58&ithint=file%2cpptx
2. Thread?
CPU 이용의 기본 단위
Thread ID, Program Counter, Register들, Stack으로 구성
같은 Process에 속한 다른 쓰레드와 자원 공유
코드, 데이터 섹션, 열린 파일, 신호 등
3. Multi Thread?
많은 소프트웨어 패키지들은 다중 쓰레드 이용
하나의 Application은 몇 개의 제어 Thread를 가진 독립적인 Process로 구현
OS 커널에서도 다수의 쓰레드가 동작
장치 또는 인터럽트 처리 등의 특정 작업을 수행하게 함
4. Multi Thread Programing의 장점
응답성(Responsiveness)
대화형 응용을 Multi Thrad화하면 긴 작업을 수행하더라도 프로그램의 수행이 계속되는 것을 허용
할 수 있음.
사용자에 대한 응답성 증가
자원 공유(Resource sharing)
Thread는 속한 Process의 자원과 메모리를 공유
한 응용프로그램이 같은 주소 공간 내에 여러개의 다른 작업을 하는 Thread를 가짐
경제성(Economy)
Process 생성을 위한 메모리와 자원 할당의 비용을 줄임
Thread는 Process의 자원을 공유하기 때문에 추가적인 오버헤드가 적다
다중 처리기 구조의 활용(Utilization of multiprocessor architecture)
각각의 Thread가 다른 CPU에서 병렬 수행 가능
Multiprocessor에서 multithreading을 하면 병렬성 증대
5. Multithreading Model
다대일 모델
많은 사용자 수준 Thread를 하나의 커널 Thread로 mapping
Thread 관리는 사용자 공간의 Thread Library에 의해 행해짐
단점
한 쓰레드가 봉쇄형 시스템을 호출할 경우 전체 프로세스가 봉쇄
한번에 하나의 Thread만이 커널에 접근
Multi Thread가 multiprocessor에서 돌아도 병렬로 작동 불능
6. Multithreading Model
일대일 모델
각 사용자 Thread를 각각 하나의 커널 Thread로 mapping
하나의 Thread가 봉쇄적 시스템을 호출하더라도 다른 Thread 실행 가능
다대일에 비해 더 많은 병렬성을 제공
Multiprocessor에서 multi Thread가 병렬로 수행되는 것을 허용
단점
사용자 Thread를 생성할 때 항상 커널 Thread를 생성해야함
이로인한 오버헤드로 성능 저하
지원되는 Thread의 개수를 제한
7. Multithreading Model
다대다 모델
여러 개의 사용자 수준 Thread를 작거나 같은 커널 Thread로 다중화
커널 쓰레드의 수는 응용프로그램이나 하드웨어에 따라 다름
Multiprocessor인 경우 더 많이 준다거나.
개발자가 원하는대로 Thread생성 허용
스케줄을 통해 커널 Thread와 연결
봉쇄형 시스템 호출을 발생시켰을 때 커널이 다른 쓰레드의 수행을 스케줄
8. Multithreading Model
다대다 모델
여러 개의 사용자 수준 Thread를 작거나 같은 커널 Thread로 다중화
커널 쓰레드의 수는 응용프로그램이나 하드웨어에 따라 다름
Multiprocessor인 경우 더 많이 준다거나.
개발자가 원하는대로 Thread생성 허용
스케줄을 통해 커널 Thread와 연결
봉쇄형 시스템 호출을 발생시켰을 때 커널이 다른 쓰레드의 수행을 스케줄
9. Thread Library
Thread Library는 Thread를 생성/관리하기 위한 API 제공
커널 지원 없이 사용자 공간에서만 Library 제공
Library를 위한 모든 코드와 자료구조는 사용자 공간에만 존재
Library 함수를 호출하는 것은 system call이 아닌 지역 함수를 호출한다
운영체제에 의해 지원되는 커널 수준 Library
Library를 위한 코드와 자료구조가 커널공간에 존재
Library를 호출하는 것은 커널 system call을 하는 것
Win32 Thread
Window.h를 포함애햐함
10. Threading issue
Fork()/ Exec() system call
Thread가 fork()를 호출하면 새로운 Process는 모든 Thread를 복제해야 하는가?
응용프로그램에 따라 고를 수 있다
Cancelellation (취소)
Thread 취소는 Thread가 종료되기 전에 강제 종료 시키는 작업
자료구조 갱신 도중 취소 요청이 올경우
시스템 자원을 회수하지 못하는 문제
비동기식 취소
한 Thread를 강제 종료
시스템 자원을 회수하지 못할 수 있다
지연 취소
종료 시점을 점검하여 강제 종료할 수 있는 시점에 종료
11. Threading issue
신호 처리 ( Signal Handling)
신호란 프로그램이 불법적인 메모리 접근이나 0으로 나누는 등의 행동 시 발생
신호의 처리 순서
신호는 특정 사건이 일어나면 생성
신호는 생성되면 프로세스에 전달된다
전달된 신호는 반드시 처리되야 한다
신호를 전달하기 위해서는 4가지 중 하나의 방법 사용
신호가 적용될 Thread에게 전달
모든 Thread에 전달
몇몇 Thread에 선택적으로 전달
특정 Thread가 모든 신호를 전달받도록 지정
12. Thread pool
Multi Thread Server는 Service할 때마다 Thread를 생성
Thread 생성에 소요되는 시간이 길다
무한정 Thread를 만들다 보면 자원이 고갈
때문에 Thread pool 사용
일정한 수의 Thread를 미리 pool로 만들어 둔다
평소엔 기다리고 있다가 요청이 들어오면 pool에서 하나의 Thread에 할당
Pool에 남는 Thread가 바닥나면 요청의 대기하고 있는다
장점
새로운 Thread를 만들어 주는 것보다 기존의 Thread를 사용하는 것이 빠름
Thread개수에 제한을 둠으로써 많은 수의 Thread를 병렬 처리할 수 없는 상황에서 유용
13. Threading issue
Thread별 데이터
한 Process에 속한 Thread들은 그 Process의 자료를 모두 공유
자신만 접근 가능한 자료가 필요한 경우가 있다