Thread란??

 

Thread는 프로세스 내에 존재하는 것으로 실제로 실행되는 독립적인 작업단위이다. Thread는 Process의 모든 자원을 공유할 수 있으며, CPU는 각각의 Thread를 수행하고 각각의 Thread는 해당 Thread만의 고유한 작업을 가지고 있다.

  가령 예를들어, 인터넷 웹브라우저를 킨 후에 네이버를 들어갔을 경우에, 네이버의 광고(검색바 밑에)가 다 나오기 전에 기사글이 먼저 나오고 그 후에 광고나 이미지가 나오는 경우를 많이 봐왔을 것이다.

웹브라우져에서도 Thread가 각각 존재하여, html,image,script를 받아오는 쓰레드가 따로 존재하여 효율적이면서, 빠른 속도로 인터넷 서핑이 가능한 것이다.

 

쓰레드는 프로세스처럼 메모리자원을 할당 받는 것이 아니고, 이미 할당받아져 있는 프로세스 안에서 생성되는 것이기 때문에 프로세스를 새로 할당 받는 것보다 생성속도가 무려 67배가 빠르다고 한다.

보통은 한 프로세스당 하나의 쓰레드를 가지나 여러 쓰레드를 가지고 있는 경우를 Multi-Thread라 한다.

또한 프로세스가 할당받은 자원에 있는 것을 공유하기 때문에 Context-switch보다 훨씬 저렴한 자원으로 이용할 수 있다.

 

Thread에도 종류가 있는데 User-Thread와 Kernel-Thread이다.

User-Thread는 user레벨 권한에서 Thread를 제어한다. 따라서 System Call을 사용할 필요는 없지만 kernel system call을 기반에 두고 사용하여야 한다.

반면에, Kernel-Thread는 System Call로 구현되어 진다.

 

Multi-Thread의 경우 User-Thread와 Kernel-Thread에 따라서 모델이 나뉘게 된다.

 

One to one Model

User-Thread와 Kernel-Thread가 일대일로 매칭되는 구조이다.

자원낭비가 심하고 오버헤드가 발생할 확률이 높다.

 

 

 

Many to one Model

Kernel-Thread가 하나만 존재하는 것을 말한다. 병렬성이 떨어지고 속도가 늦다.

 

 

Many to many Model

User-Thread와 Kernel-Thread가 복수개 인 것을 말한다.(요즘 대부분의 OS는 이 모델을 따르고 있다.)

하지만 이때 Kernel-Thread는 User-Thread보다 항상 적다.

또한, Many to many Model이지만 OS가 생각하기에 중요한 Thread는 Many to many모델안에서 One to one Model을 따르게 된다.

 

※Multi-Thread System은 PCB가 저장되고 복귀하는 것(Context-switch)가 일어나지 않기 때문에 오버헤드도 줄고 효율성이 올라간다.

'O.S' 카테고리의 다른 글

Process Scheduling - Priority  (0) 2012.04.19
Process Scheduling - SJF  (0) 2012.04.19
Process Scheduling - FCFS  (0) 2012.04.19
Critical Section - 공유메모리  (2) 2012.04.17
Interrupt  (0) 2012.04.17

네트워크를 전혀 모르다가 이제 갓 네트워크를 시작하고 싶어서

평소 관심있어하던 네트워크 패킷분석을 위해 책을 찾던 도중,

 

Wireshark Network Analysis라는 책을 발견하였다. 책에 보면 추적파일도 많이 제공하고 Wireshark 사용법에 대한 전반적인 지식을 설명하기에 이 책을 잡고 공부를 하고 있다.

헌데 각 장이 끝날때마다 어떤 추적파일을 들면서 문제를 내주는데 책에는 답도 없고, 인터넷에 뒤져도 나오지 않길래 공부도 할 겸 내가 틀렸는지 맞았는지 확실히 알기 위해 여기에 포스팅 해보도록 한다.

책에서 준 패킷파일은 무려 200MB가 넘는다 ㅠㅠ 하나씩 해보도록 하자.

아마도 하나씩 기초부터 밟아나가고 싶어서 하나하나 간단한 것도 포스팅 하겠다.

 

자 처음으로 http-download-good.pcap파일이다.

(책에서 제공하는 모든 추적파일은 왠지 파일제목만 봐도 느낌이온다)

 

일단 패킷을 살펴 보면 처음 1,2,3번째 패킷으로 3-way-handshaking하는 과정이 보인다.

 

3-way-handshaking이란?

 TCP Protocol은 패킷을 주고 받기 이전에 미리 가상의 경로를 설정하는 연결지향형 프로토콜이다. 따라서 TCP에는 먼저 연결을 설정해야 하는데 이 과정을 3-way-handshacking이라 한다.

 

 

 <3-way-handshaking 개념도>

1.   연결을 하기 이전에는 클라이언트는 포트가 닫힌 closed 상태이고 서버는 해당 서비스의 포트가 열려있는 listening상태이다.

 

2.   클라이언트 측에서 서버와 연결을 하고 싶을 때는 임의의 포트번호를 받고 SYN패킷을 서버측으로 보낸다.

 

3.   클라이언트로부터 SYN패킷을 받은 서버는 SYN패킷과 함께 잘 받았다는 응답과 패킷을 보내도 된다는 의미로  ACK패킷을 보낸다.

 

4.  클라이언트는 다시 응답을 받았으므로 이제 연결을 하고 패킷을 보내겠다는 뜻으로 ACK를 보내면 연결이 완료된것이다.

 

 

이때의 클라이언트의 ip는 10.0.52.164가 되고 서버의 ip는 204.152.184.134이다.

다시 본론으로 돌아와서, 추적파일을 봐도 별다른 이상이 있어보이지 않는다. 3-way-handshaking으로 연결을 하고, 서버로 부터 00o_2.0.0_win32Intel_install.exe파일을 요청하고 그에 대한 응답으로 서버에서 데이터를 보내주고 있다.

 

<HTTP Protocol을 이용 GET방식으로 exe파일을 요청하고 있다.>

 

이 추적파일에서는 더이상 볼만한 것은 남아있지 않은 것 같으므로, 다운로드 받았던 데이터를 조립해 보도록 하자.

 

데이터를 자세히 보니 파일헤더가 MZ로 시작한다. 위 패킷으로 알수 있듯이 보냈던 exe파일이 아마 이것일 것이다. 위에 다 떼버리고 MZ부터 밑으로 쭉 긁어서 Winhex로 붙여서 a.exe파일로 저장해본다.

 

원래 win32Intel~~~.exe 파일이었으니 윈도우 32bit용 파일이라 64bit인 내컴퓨터에서는 어자피 안돌아갈테니까 제대로 파일을 꺼냇는지 알기 위해 실행이나 한번. ㅋㅋㅋ

 

첫포스팅이고 잠도 오니까 정말 간단한 예제를 들어서 포스팅을 했다. 책을 공부하면서 점점 포스팅도 해가고 일단 기본적인 네트워크지식부터 다시 제대로 다지기 위해 포스팅을 할 생각이다.

처음이라 이거했다가 저거했다가 글이 너무 길어진 느낌이지만 하다보면 괜찮아지겟지 ㅠㅠ 다음엔 주제를 가지고 하나씩 .... 하고 싶지만 과제가 너무 많아 ㅠㅠ

 

'NetWork' 카테고리의 다른 글

VMware network  (0) 2012.07.10
tcphdr , tcphdr??  (0) 2012.07.09
ARP_Spoofing  (2) 2012.07.06
ICMP Protocol  (0) 2012.07.06
TCP / IP 프로토콜 스택  (0) 2012.04.25

+ Recent posts