스레드

    [운영체제]스레드와 관련된 문제들

    [운영체제]스레드와 관련된 문제들

    다중 스레드 프로그램을 설계할 때 고려해야 할 몇 가지 문제들을 살펴보자 [Fork() 및 Exec 시스템 콜] 만일 한 프로그램의 스레드가 fork()를 호출하면 새로운 프로세스는 모든 스레드를 복제해야 하는가 아니면 한 개의 스레드만 가지는 프로세스여야 할까? UNIX기종은 이 두 가지 버전 fork()를 모두 제공한다. exec()의 경우 시스템 콜을 하면 exec()의 매개변수로 저장된 프로그램이 모든 스레드를 포함한 전체 프로세스를 대체시킨다. 응용 프로그램에 따라 어떤 fork()를 선택할 지 정해진다. fork()를 한 후 exec() 시스템 콜을 호출한다면 모든 스레드를 다 복제해서 만들어주는 것은 불필요하다. 이런 경우에는 fork() 시스템 콜을 호출한 스레드만 복사해주는 것이 적절한다..

    [운영체제] 암묵적 스레딩

    [운영체제] 암묵적 스레딩

    점점 많은 스레드를 가진 응용이 등장하게 되면서 이러한 응용을 설계하는 일이 어려워졌다. 이런 문제점을 해결하는 가장 좋은 방법은 스레딩의 생성과 관리 책임을 응용 개발자로부터 컴파일러와 실행시간 라이브러리에게 넘겨주는 것이다. 이것을 암묵적 스레딩이라고 한다. 이번에는 이런 암묵적 스레딩을 구현하는 방법에 대해 알아보자(총 4가지가 있지만 2가지만 소개한다) [스레드 풀] 다중 스레드로 구성된 웹브라우저를 생각해보자. 웹 서버는 요청을 받을 때마다 그 요청을 처리하기 위해 새로운 스레드를 만들어 준다. 이런 방법의 문제는 1 ) 서비스할 때마다 스레드를 생성하는 데 시간이 소요된다. 2 ) 최대 스레드 수가 몇 개까지 가능할 수 있는 것인지 한계를 정해야한다. 이러한 문제점들을 해결하기 위해 스레드 풀..

    [운영체제] 다중 스레드 모델다중 스레드 모델

    [운영체제] 다중 스레드 모델다중 스레드 모델

    [다중 스레드 모델] 스레드는 사용자 스레드와 커널 스레드로 나눌 수 있다. 1 ) 사용자 스레드 : 커널 위에서 지원되며 커널의 지원 없이 관리된다. 2 ) 커널 스레드 : 운영체제에 의해 직접 지원되고 관리된다. 궁극적으로 사용자 스레드와 커널 스레드를 연결해서 쓰게 된다. 예를 들면 입출력 인터럽트가 발생하면 사용자 모드에서 사용자 스레드의 응답을 기다린다. 이 후 스레드의 응답이 오면 다시 커널 모드로 변환되어 커널 스레드가 일을 처리하게 된다. 이런 연결을 확립하는 다대일, 일대일, 다대다 모델을 살펴보자 1 ) 다대일 모델 : 많은 사용자 수준 스레드를 하나의 커널 스레드로 사상한다. 이 모델의 경우 한 스레드가 봉쇄가 될 경우 전체 프로세스가 봉쇄된다. 또 한, 한 번에 하나의 스레드만이 커..

    [운영체제] 스레드

    [운영체제] 스레드

    스레드는 CPU이용의 기본 단위이다. 스레드는 스레드 ID, 프로그램 카운터(PC), 레지스터 집합, 스택으로 구성된다. 스레드에는 단일 스레드와 다중 스레드가 있는데 만일 프로세스가 다수의 제어 스레드를 가진다면 프로세스는 동시에 하나 이상의 작업을 수행할 수 있다. 하나의 응용 프로그램이 여러 개의 비슷한 작업을 수행할 필요가 있는 상황들이 꽤 많다. 예를 들어, 웹 서버는 클라이언트로부터 웹 페이지나 이미지 등에 대한 요청을 받는다. 만약 웹 서버가 단일 스레드 프로세스로 작동한다면, 한 번에 하나의 클라이언트만 서비스할 수 있게 되어 클라이언트는 자신의 요구가 서비스되기까지 매우 긴 시간을 기다려야 한다. 이에 대한 해결책으로 사용했던 방법이 서버에게 서비스 요청이 들어오면 프로세스는 그 요청을 ..