728x90

종종 스레드 개념이 헛갈릴때가 있는데 그때 보기 위해 퍼다 나른 자료 ~_~


원작자는 잘 모르겠습니다.




스레드


-하나의 프로그램 내에서 둘 이상의 프로그램 흐름을 만들어 내기 위해 사용된다


-프로세스처럼 완벽히 독립적인 구조가 아니기 때문에 스레드들 사이에는 공유되는 요소가 있다.


-따라서 문맥교환에 걸리는 시간이 프로세스보다 짧다




프로세스의 메모리 구조




-자식 프로세스가 생성된 다음엔 모든 것이 부모 프로세스와 독립적이다.


-메모리 구조상에서는 아무런 관계가 없다.


-이런 메모리 구조를 가졌기 때문에 프로세스간 데이터를 주고 받기 위해 IPC가 필요.










스레드의 메모리 구조




-하나의 프로세스에서 두개의 스레드를 생성했을 때의 구조 


-스레드는 스택만 새로 생성될 뿐 그 이외의 영역은 부모프로세스의 영역을 공유한다









스레드의 특징


1.스택을 독립적으로 할당


 - 추가적인 실행 흐름을 만들 수 있다




2.코드 영역을 공유한다


 -그림처럼 프로세스간 공유는 되지 않는다

-스레드는 자신을 생성한 프로스세가 갖고있는 함수를 호출할 수 있다


3.데이터와 힙을 공유한다


-스레드간 힙과 데이터영역을 공유하기 때문에 IPC가 필요없다


-전역변수와 malloc함수를 통해서 동적할당한 메모리 공간은 공유가 가능하다



windows에서는


-프로세스는 단지 스레드를 담는 상자에 지나지 않는다. 


-따라서 실제 프로그램의 흐름을 형성하는것은 스레드이다.


-스케줄러가 실행의 단위로 선택하는 것도 프로세스가 아닌 스레드이다.


-windows에서는 스레드가 존재하지 않는 프로세스는 있을 수 없다 프로세스 생성과 동시에 


  main함수를 호출해줄 스레드를 생성한다 이를 main스레드라고 한다




커널 영역과 유저 영역


-커널 영역은 프로세스에 할당된 총 메모리 공간중 유저영역을 제외한 나머지 영역


-유저 영역은 프로그램이 동작하기위해 사용되는 메모리 공간 (코드. 데이터, 스택, 힙)


커널모드와 유저모드


-커널모드는 전 영역에 접근을 허용한다


-유저모드는 커널영역을 보호하기위해 제한된 영역의 메모리 접근만 허용한다


-커널이 실행되어야 하는 경우에는 커널모드로 전환이 일어난다



커널레벨 스레드


-프로그래머의 요청에 따라 스레드를 생성 및 스케줄링 하는 주체가 커널


-안정성과 다양한 기능성이 제공됨


-커널모드와 유저모드의 전환이 빈번하여 성능저하로 이어짐


유저레벨 스레드


-커널에서 스레드 기능을 지원하지 않을때 스레드 기능을 제공하는 라이브러리 활용하는 방식


-스케줄러가 스케줄링 하는 대상이 프로세스가 된다


-스레드를 스케줄링하는 스케줄러는 유저영역에서 실행됨


-커널모드와 유저모드의 전환이 없다


-프로그래밍이 어렵고 결과 예측이 어렵다

출처 : http://blog.naver.com/skyimt33/110134207584

728x90

'OS' 카테고리의 다른 글

스레드 간 통신  (0) 2014.11.28
IPC  (0) 2014.11.28
윈도우 메시지 처리 과정  (0) 2014.11.14
문맥교환  (0) 2014.11.13
스레드 동기화  (0) 2014.11.13

+ Recent posts