프로세스와 쓰레드

Computer/OS | 2005/12/14 03:14 | adioshun

프로세스와 쓰레드  



1. 프로세스란 무엇인가 ?


프로세스란 ?

  • 수행중인 한 프로그램

  • 한 프로세스의 수행은 순차적으로 진행됨

  • 즉 어떤 시점에도 프로세스의 한 인스트럭션만이 수행될 수 있음
  • 프로그램과 프로세스의 차이

  • 프로그램 : Passive Entry (Static)

  • 프로세스 : Active Ebtry (Dynamic) : 프로그램 + 레지스터 + 프로그램 카운터 + 자원(Resource)


    프로세스의 구성요소

  • Code(TEXT) : 우리가 생각하는 소스코드가 아니라 실행코드

  • 프로그램 카운터

  • 레지스터

  • 데이타

  • 스택

  • 데이타 섹션(전역변수) : 유닉스에서는 이미지(image)라고 부름

  • 프로세스는 프로그램의 이미지 수행을 위해 필요한 자원 (메모리, CPU, PCB)등이 할당되어 생김


    프로세스의 상태

  • New

  • Ready (다수)

  • Running (1개)

  • Waiting (다수)

  • Terminate


    ① Job Scheduler : 새로운 Process가 생기면(new) 이 스케쥴러가 적절하게 Ready Queue에 집어 넣어 준다

    ② Cpu Scheduler : Ready Queue에 들어 있는 Process중에 다음번에 수행될 Process를 골라 Running.(선택 방법은 여러가지가 있음)

    ③ Interrupt : Running중에 너무 많이 수행된다거나 하면 Interrupt를 걸어 Ready Queue로 상태를 바꾸게 한다.

    ④ I/O or Event Wait : 파일 입출력등로 인해 대기 시간이 길어지면 Waiting 상태로 넘겨버리고, CPU로 하여금 다른 일을 하게 한다.

    이렇게 프로세스를 관리하는 것은 CPU차원에서 놀고 있는 시간(④의 경우)을 최소화하고, 전체적으로 프로세스들간에 시간분배를 공평하게 할려고(③) 하기 때문이다. 뭐 다른 이유들도 많이 있긴 하지만... 그리고 멀티 프로세싱에서.




    프로세스 제어 블럭(Process Control Block, PCB)

    정의 : 한 프로세스에 관련된 정보를 포함하는 데이타 블록이나 레코드



    스케쥴링과 Context Switching
    운영 체제는 프로세스뿐만 아니라 I/O, Device등의 큐에서 프로세스들을 선택해서 Running 시켜줘야 함. 여기서 선택하는 것이 바로 스케줄링이고 선택된 프로세스와 런닝중인 프로세스간을 바꾸어 주는 것이 Context Switching이다. 실제 Context Switching이 일어날 때 사용하는 것이 PCB를 이용 그림으로 두개의 프로세스간에 스위칭을 살펴보면 다음과 같다.


    Context 스위칭이 발생할때

    Context Switching이 발생할 때 각 프로세스들의 현재 상태들을 기록한 PCB를 기록하고 로드해와야 한다.  프로세스가 낭비
    여기서 유심히 살펴 보아야 할 것은 프로세스가 수행되기 위해서 많은 자원들을 가지고 있어야 한다는 것이다.


    그래서 이제 Thread라는 개념이 등장하게 된다.




    2. 쓰레드란 무엇인가 ?


    쓰레드를 사용하는 이유.

  • 프로세스를 공동으로 쓸 수 있게 한다.

  • 프로세스 Context Switching을 할때 시간이 많이 걸린다.
  • 쓰레드


  • LightWeight Process(LWP)라고 함.

  • CPU 이용의 기본단위

  • 구성요소

      -프로그램 카운터

      -레지스터 셋

      -스택 공간(Stack Space)

  • 연관된 쓰레드들이 메모리와 화일을 공유함으로써 Reduced State를 갖는 LWP 프로세스

  • 쓰레드 - based 시스템에서는 쓰레드가 스케쥴링 단위

  • 각 쓰레드는 한 프로세스에만 속함

  • 프로세스 이외의 모든 자원을 enclosing 프로세스가 관리 관련된 thread간의 switching은 빠르고 효율적임.

  • 쓰레드도 자식 쓰레드를 가질 수 있음

  • 한 쓰레드가 블록(Block)되었을때, 동일 프로세스내의 다른 쓰레드 수행가능

  • 한 프로세스내의 Thread들은 상이한 프로세스들만큼 독립적이지 않음

  • 쓰레드들간의 보호가 없는 이유(Protection 할 수 없다) - 불가능(동일한 주소 공간을 가지므로 동일한 전역 변수를 공유) - 불필요. - (첨부) 동기화(Synchronized)를 이용하면 됨 : 자바에서

  • 한 응용내에서 Concurrency를 높이는데 효과적이다.

  • 비교적 최근에 개발된 운영체제 개념

      예) Sun's Unix, Mach, OS/2, Windosw95(?)
  • 쉽게 설명해 볼까요?

    프로세스란 하나의 시스템에서 여러개의 프로그램을 돌아가게 해주기 위한 방법입니다.

    쉬운 예로 도스에서는 하나의 프로그램밖에 수행 못하잖아요?

    그런데, 윈도우즈에서는 동시에, PC통신 프로그램도 띄우고, 아래한글 과 같이 동시에 여러개의 프로그램을 띄우지요?

    그렇게 여러개의 프로그램을 띄울 수 있는 시스템을 멀티 프로세스 시스템이라 합니다.

    특히 Unix쪽에서 발달했는데요. Unix의 경우, 동시에 여러User가 접속하여 사용하고, CPU등의 자원은 한정되어 있기 때문에, 각 사용자별로 띄우는 프로그램을 Process로 관리하는 것이지요.

    쓰레드란, 이 Process를 여러조각으로 나눈 개념입니다. 하나의 프로그램에서 여러개의 일을 동시에 할 수 있는것. 예를 들면, 통신 에뮬레이터에서, 채팅을 하면서, 자료를 다운로드 받는 것등이 멀티 쓰레드의 예가 될 수 있겠네요.

    프로그래밍적인 면에서도, 많은 차이가 있습니다만 구체적인 내용은 이만 접기로 하겠습니다.

    쓰레드와, 멀티프로세스 시스템을 이해하시려면 운영체제에대한 책이나, 또는 자바 쓰레드 관련서적쯤은 하나읽으셔야 문제없는 프로그래밍을 하실 수 있으리라 봅니다


    참조 : Operating System Concept - Silberschatz Galvin (4판) ,Addison Wesley
    작성 : 자바스터디 네트워크 운영자 , 잠탱이

    2005/12/14 03:14 2005/12/14 03:14
    Trackback address :: http://4ellene.net/tt/trackback/578

    Comments List

    1. photos of paige hopkins legs 2008/05/23 04:26

    Write a comment.

    [로그인][오픈아이디란?]