5장 스레드 ( Threads). 프로세스 = 자원 + PC 스레드 : 새 PC (a thread of control) 로 같은 address space 를 실행하는 fork 와 유사. 경량 프로세스( LWP; lightweight process) = 스레드 CPU 를 이용하는 기본 단위 thread ID, PC, 레지스터 세트, 스택 영역을 가짐 - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.1
• 경량 프로세스 (LWP; lightweight process) = 스레드» CPU 를 이용하는 기본 단위» thread ID, PC, 레지스터 세트 , 스택 영역을 가짐» 스레드들은 서로 같은 프로세스의 code section, data section, OS resources-open
files, signals 를 공유 ( 그림 5.1)» ( 예 1) web browser
• image 와 text 를 display 하는 thread• network 에서 데이터를 가져오는 thread
» ( 예 2) word processor• graphics 를 display 하는 thread• keystrokes 를 읽어오는 thread• spelling 과 grammar 를 검사하는 thread
• 중량 프로세스 (heavyweight process) = 1 thread 를 가진 task• 비교
» 중량 프로세스의 문맥교환 : process switching, context switching• 레지스터 세트교환과 메모리 관련 작업도 (virtual memory page table 변경 등
)
5 장 스레드 (Threads)
스레드 (Threads) 개요 ~스레드 (Threads) 개요 ~
• 프로세스 = 자원 + PC• 스레드 : 새 PC (a thread of control) 로 같은 address space 를 실행하는 fork 와
유사
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.2
Single and Multithreaded Processes
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.3
스레드 (Threads) 개요 ~
• 제어» 다중 스레드 제어 (multiple-thread control)
• 자신의 PC, stack, 비독립적 (no protection)» 다중 프로세스 제어 (multiple-process control)
• 자신의 PC, stack, address space, 독립적 (protection)
• 스레드의 특성» CPU 공유» 준비 , 수행 , 대기상태» 자식 thread 생성» block
• ( 예 1) 웹 서버 구현» a single process : client 의 대기시간이 매우 기어짐» multiple process : client 의 요청이 올 때마다 새 process 생성 , overhead» multithreaded single process : 서버는 thread 생성하여 client 의 요청
기다리다 요청이 오면 새 thread 생성하여 서비스 , 효율적
• ( 예 2) 생산자 소비자 문제» 2 threads 로 구현하면 좋음 (better if on 2 processors)
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.4
스레드 (Threads) 개요
• Java 의 thread 이용» Java 에는 비동기적 동작 (asynchronous behavior) 없음» ( 예 ) Java 로 telnet 구현
• telnet 하는 클라이언트는 서버와 연결되거나 timeout 될 때까지 block 되어야 함
• timeout 은 asynchronous event• Java 로 구현하려면 2 개 thread 생성
» telnet thread: 계속 서버에 연결 시도» timer thread: timeout 시간동안 wait 하다 깨어나 telnet thread
가 아직도 연결 시도 중이면 interrupt 발생하여 중지시킴
• Thread 의 장점» 빠른 응답 (responsiveness)» 자원 공유 (resource sharing)» 경제적 (economy)» 다중 프로세서 구조 이용 (utilization of multiprocessor architecture)
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.5
• 사용자 스레드 (user threads) : Posix Pthreads, Mach C-threads, Solaris Threads» user level 의 thread library 로 구현 : 라이브러리가 thread 생성 , 스케줄링 ,
관리 담당» 불공평한 스케줄링 (unfair scheduling)» 스위칭이 빠름 (switching is fast)» single thread 인 kernel 에서 사용자 수준 스레드가 blocking system call 을
수행할 경우 system call 완료까지 다른 모든 스레드들은 대기해야 함• 커널 스레드 (kernel threads) : Windows NT, Solaris, Digital Unix
» 커널이 thread 생성 , 스케줄링 , 관리 담당» 공평한 스케줄링 (fair scheduling)» 스위칭 시간이 김 (switching is time consuming) : interrupt 처리 때문» blocking system call 수행시 커널이 다른 thread 실행 시킬 수 있음
• 혼합 접근 (hybrid approach) : Solaris 2
kernel 자체 (system call 수행 방법 )» single tasking : 초기 Unix kernel : 공유 자료 접근 동기화 불필요» multi tasking
다른 스레드가 제어를 넘겨준 다음에만 수행 가능 ( 공유 데이타 변경 중에는 제어를 넘겨주지 않음 )
• 비동기적인 시스템 : 잠금 기법 (locking mechanism) 필요
사용자 스레드와 커널 스레드 (User and kernel Threads)
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.6
다중 스레드 모델 (Multithreading Models)
• Many-to-One Model : 초기 Solaris
» 다수의 user-level thread 가 하나의 kernel thread 로 매핑» 한 thread 가 blocking system call 하면 전체 프로세스 block
• One-to-One Model : Windows NT, OS/2
» 각 user-level thread 가 하나의 a kernel thread 로 매핑» 한 thread 가 blocking system call 해도 다른 thread 실행 가능» User thread 생성마다 kernel thread 생성해야 함» 동시성이 좋음 (more concurrency): multiprocessors 에서 병렬 처리
(parallel processing) 가능
• Many-to-Many Model : Solaris 2.6, IRIX, Digital Unix
» 다수의 user-level thread 들이 더 적거나 같은 수의 kernel threads들로 매핑 (multiplexed)
» 동시성이 덜 좋음 (less concurrency): 커널은 한 순간에 하나의 kernel thread 만 스케줄
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.7
Many-to-one Model
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.8
One-to-one Model
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.9
Many-to-many Model
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.10
Solaris 2 Threads ~
• 솔라리스 (Solaris) 2.x• SunOS Release 4.x - Solaris 1.x• SunOS Release 5.x - Solaris 2.x
• Solaris 2 의 지원 기능» kernel 수준과 user 수준에서 스레드 지원» symmetric multiprocessing( 대칭적 다중 프로세싱 )
• 각 process 가 OS 가짐 Master-slave 의 반대» real-time scheduling( 실시간 스케줄링 )
• 스레드들 : LWP(Light Weight Processes) = a virtual CPU» user-level (thread API 들의 library)
• thread ID, register set(PC, stack pointer), stack, 우선순위• switching(linking with thread) 이 빠르다 . 문맥 교환 없음• 종류
» bound: LWP 에 영원히 연결됨 , quick response 가능» unbound: LWP 풀에 multiplexed
» intermediate-level = LWP• kernel 자료구조 , user level thread 의 register set, 메모리와 계정정보• 비교적 느리다 .
» kernel-level(CPU 스케줄링 대상 )• 약간의 자료구조 : stack, kernel registers, LWP pointer, 우선순위 , 스케줄링 정보• switching 이 비교적 빠르다 .
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.11
Solaris 2 Threads
» 그림 5.5 Solaris 2 의 스레드• Many LWP, many CPU• N user-level thread <-> l LWP• 1 LWP <-> 1 Kernel-level thread = 1 system call• N Kernel-level thread <-> 1 CPU
» ( 예 ) 동시에 5 개 화일 읽기 -> 5 LWP 필요 • 각 화일 읽기는 Kernel 안에서 I/O 완료를 기다려야 함
» Solaris 2 에서• 한 task 는 한 I/O 완료를 기다리는 동안 block 될 필요가 없음 : 어떤
작업의 한 LWP(kernel thread) 가 I/O 완료를 기다리게 되더라도 CPU는 그 작업의 다른 LWP(kernel thread) 로 이동하여 작업 수행을 계속
• thread library 가 최적의 성능을 지원하도록 동적으로 LWP 의 수 조절» 실행 가능 LWP 한 개 남으면 새 LWP 생성» 일정 기간 ( 예 , 5 분 ) 사용되지 않은 LWP 삭제
» 참조 • Solaris 2.x : System Administrator’s Guide, • Threads Primer: A Guide to Multithreaded Programming, Bil Lewis,
Daniel J.Berg, Prentice Hall, 1996.
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.12
Solaris 2 Threads
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.13
Solaris Process (PCB)
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.14
Java Threads ~
• Thread 지원 방법» Kernel(OS) 지원» Library 지원 thread
• Win32 library multithreading APIs: Windows 시스템• pthread: POSIX 호환 시스템
» Language 지원 : Java 뿐• main(): a single thread• 다른 thread 들 생성 , 관리하는 명령 지원
• Thread 생성① Thread class 로부터 새 class 유도하고 run() 재정의 : 그림 5.7 참조
• start() 가 (1) 메모리 할당하고 새 thread 초기화 , (2) run() 실행• 절대로 직접 run() 호출하지 말고 start() 를 호출할 것 ! ( 초기화 때문 )
② Runnable interface 를 구현하는 class 를 정의하고 새 Thread 객체 생성 (그림 5.8 참조 )
• 주로 class 가 이미 유도된 경우 이용 ( 예 ) public class ThreadedApplet extends Applet implements
Runnable { … }• Java 는 multiple inheritance 불가
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.15
Thread class 확장으로 thread 생성
class Worker1 extends Thread
{
public void run() {
System.out.println(“I am a Worker Thread”);
}
}
public class First
{
public static void main(String args[]) {
Worker runner = new Worker1();
runner.start();
System.out.println(“I am the main thread”);
}
}
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.16
Runnable interface 를 구현하여 thread 생성public interface Runnable{
public abstract void run();}
class Worker2 implements Runnable{
public void run() {System.out.println(“I am a Worker Thread”);
}}
public class Second{
public static void main(String args[]) {Runnable runner = new Worker2();Thread thrd = new Thread(runner);thrd.start();
System.out.println(“I am the main thread”);}
}
2000 운영체제 인천대학교 컴퓨터공학과 성미영 5.17
Java Threads ~
• Thread 관리» Java 의 thread 관리 APIs
• suspend()• sleep()• resume()• stop()
» multithreading 예 : applet• 일반적으로 graphics, animation, audio 등 처리 • 처음 applet 실행될 때 start(), display 않는 동안 stop()• 그림 5.9 ClockApplet 참조
• Thread 상태» New: new 문으로 thread 객체 생성» Runnable: start() 호출로 메모리 할당하고 run() 호출한 상태» Blocked: I/O, sleep(), suspend() 로 block 된 상태» Dead: stop() 호출된 상태