728x90
[OS운영체제] Tiny Web Server 정리 및 Thread와 fork()
Tiny웹서버 정리
Tiny Web Server
- socket() 함수를 통해 socket 생성 후 bind()를 통해 주소 연결하고 listen()함수로 수동적인 상태로 만듦.
- 이 식별자를 가지고 accept()로 client의 connection을 기다림
- 연결 되면 connfd가 생성되고 이로서 읽고 쓰기 통신이 가능해짐
- doit(connfd)를 통해 HTTP transaction 처리
doit
- HTTP reqeust 요청 라인 읽어서 정보 파악 (GET / HTTP/1.1)
- 파싱 후 static contents인지 dynamic contents인지 파악
- static인 경우 디스크 내용 Mmap()을 통해 가상메모리 매핑 후 connfd에 write하여 전달
- dynamic인 경우 부모 프로세스는 listen을 계속 해야하므로 자식 프로세스를 fork하여 execve를 통해 자식 컨텍스트에서 실행. Dup2를 통해 표준 출력을 클라이언트와 연계된 connfd로 재지정
- dynamic contents로 인자 전달 방법은 URI에서 (파일이름?인자1&인자2) 파싱하여 사용
Thread와 fork
Thread와 fork 는 모두 2개 이상의 클라이언트 요청을 처리하기 위해 사용된다. 즉 서버가 하나밖에 없어 하나의 요청밖에 처리할 수 없다면 한 요청 처리가 끝날 때까지 다른 요청들은 처리할 수 없어 다운되는 상황이 되기 때문이다. 차이점은 Thread는 fork 의 비효율성을 극복하기 위해 사용된다는 점이다.
Thread
특징
- Web server에서 listen() 함수 실행시 생성된다.
- Thread에서 다른 Thread를 만들어 진행한다
- Process의 대부분을 공유하며 Thread를 위한 자료구조, 지역변수, register 저장을 위한 공간, stack, PC 등만 필요할 뿐이다 - 비용이 적다(Light-weight model)
- Kernel의 리소스를 사용하지 않는다
- 하나의 Process는 여러개의 Thread를 가질 수 있다
- fork()와 마찬가지로 스케쥴링의 단위(context switching)이다
- User level Thread와 Kernel level Thread가 있다
장점
- 한 process에 속한 Thread들은 같은 주소공간을 공유하여 정보 공유가 용이
- 생성과 context switching, 종료 관점에서 Thread 비용이 훨씬 적게 든다.
단점
- User level Thread의 경우 멀티 프로세서를 지원 못한다.
- User level Thread의 경우 하나의 Thread가 block되면 process 전체가 block 된다.
- Kernel level Thread의 경우 kernal 리소스를 사용하여(ststem call) User level Thread에 비해 무겁다.
fork()
특징
- Web server에서 dynamic context 처리시 fork() 함수 사용한다.
- 부모 서버가 자식 서버를 만든다 - 새로운 Process 생성
- 이 자식 서버가 한 클라이언트의 요청을 처리하도록 만든다 - 요청 수 만큼 fork가 일어난다
- 모든 자료구조를 다시 생성하고 복사한다 - 비용이 크다 (heavy weight model)
- Thread와 마찬가지로 스케쥴링의 단위(context switch)이다.
장점
- 하나의 Process가 Block되어도 다른 Process가 작동한다
단점
- fork는 system call이기 때문에 지속적인 요청이 들어오면 시스템이 process 복사하느라 다른 일을 처리하지 못한다 (하나의 process는 하나의 CPU에서 처리)
- 생성과 context switching, 종료 관점에서 thread보다 비용이 훨씬 많이 든다
출처 : xenostudy.tistory.com/230
728x90
'정글 2기 > OS 운영체제' 카테고리의 다른 글
[OS운영체제] 권영진 교수님 OS 강의 (카이스트 전산학부) (2) | 2021.10.01 |
---|---|
[OS운영체제] Network Programming_TCP/IP echo server, echo client (0) | 2021.09.26 |
[OS운영체제] 명시적 가용 리스트(Explicit Free List) (0) | 2021.09.16 |
[OS운영체제] 묵시적 가용 리스트(Implicit Free List) (0) | 2021.09.15 |
[Operating System 운영체제] Memory Management (0) | 2021.09.12 |
댓글