컴퓨터 시스템/CSAPP 6

[ CSAPP / ch11 ] tiny web server, web proxy

리눅스 환경에서 CSAPP교재 CH11 네트워크 프로그래밍 부분에 나와 있는 tiny web server와 web proxy server 코드.. 처음에는 책에 나와있는 대로 단순히 HTTP protocol 을 통해 데이터를 요청만 가능한 있는 tiny 서버를 만들어보았다. 그리고 ch12 장 동시성 프로그래밍에서 배운 내용을 토대로 pthread 함수를 사용하여 다중 쓰레딩도 가능한 서버를 만들어 보았다. 주석은 달았으나 다른거 공부하느라 시간이 없어서 포스팅내용은 추후에 디벨롭.... // Tiny web server #include "csapp.h" void doit(int fd); void read_requesthdrs(rio_t *rp); int parse_uri(char *uri, char *..

C 입력 버퍼와 출력 버퍼 stdin, stdout

표준 입출력과 버퍼 개념에 대해 제대로 몰라서 어제밤에 코드 실행 결과를 이해하는데 조금 삽질을 했다. 코드의 특정 라인에서 printf("00")로 실행 했을 때와 printf("00\n")이 화면에 표시되는 출력타이밍이 달랐다. 기존에 이해하고 있던 내용은 printf 함수를 단순히 화면에 문자를 출력해주는 함수로이고, '\n'는 단지 줄을 바꿔주는 역할만 한다고 생각을 하고 있었다. 하지만 실제로는 \n은 버퍼를 비워주는 역할을 한다. printf, scanf 에서 사용되는 버퍼는 \n를 만나거나 프로그램이 종료시에 비워진다. 읽은 자료. https://shoark7.github.io/programming/knowledge/what-is-standard-stream 표준 스트림, 표준 입출력에 대해..

웹 서버 기본 개념 정리(네트워크, TCP/IP , 소켓 프로그래밍) -작성중

이번주에는 웹 서버의 개념을 기초수준부터 정리하고 많이 사용되는 개념인 TCP/IP를 정리하고자 한다. 1. 클라이언트 - 서버 프로그래밍 모델 2. 네트워크 3. TCP/IP 프로토콜 1. 클라이언트 - 서버 프로그래밍 모델 거의 모든 네트워크들의 기본모델이다. 실제 세계에서 Client side에서 Server에 요청을하면 server에서 동적, 정적 컨텐츠를 보내줌. 서버는 리소스를 관리하고 리소스를 조작해서 클라이언트가 원하는 서비스를 제공함. 예를 들어, 1. 브라우저에서 특정 domain (서버 주소) 으로 접근하면 server에서 메인화면을 브라우저에 전송해준다. - 웹서버 2. 혹은, 다른 서버간의 파일 교환하는 소프트웨어 ex)파일질라 - FTP 클라이언트와 서버는 프로세스이며, 머신이나..

링킹 (linking) 소스파일과 헤더파일

먼저 C 코드 를 컴퓨터가 이해할 수 있는 언어로 바꿔주는 컴파일(compile) 이라는 과정이 진행됩니다. 이는 단일소스코드전체를어셈블리어(기계어와1: 1대응이되어있음)로변환해줍니다(이때, 목적코드라 불리는 확장자가 .o 인 파일이 생성됩니다). 이 과정이 끝나게 되면 링킹(linking) 이라는 과정이 진행되는데 말그대로 각기 다른 파일에 위치한 소스 코드들을 한데 엮어서 하나의 실행 파일로 만들어지는 과정이라 생각하시면 됩니다. 링킹 과정에서 특정한 소스 파일에 있는 함수들이 어디어디에 있는지 찾는 과정을 거치게 되는데 예를 들어서 test.c 의 경우 compare 함수가 어디있는지 찾게 됩니다. (눈치가 빠른 독자라면 printf 함수 역시 찾아야 함을 알 수 있는데 이에 대한 설명은 나중에 하..

동적 메모리 할당(Dynamic memory allocation), malloc 함수 구현 (malloc lab)

메모리는 한정된 자원이다. 기술이 많이 발전했지만, 아무리 메모리가 많아도 부족한 자원이라는 것도 사실인 듯 하다. 그래서 개발에 있어서 메모리 관리(Memory management)는 여러가지 핵심요소 중 하나다. 오늘은 동적메모리 할당에 대해 정리해보고, C를 통해 Malloc을 구현한 것을 정리하고자 한다. 대부분의 내용은 Computer system(Randal E. Bryant)에 있는 내용이다. (진짜 좋은 책인데 번역이 .... ) 정적 메모리 할당 (static memory allocation) 동적 메모리 할당에 앞서 대응되는 개념으로 정적 메모리 할당이라는 단어를 사용할 것 같았다. 찾아서 잠깐 간단히 설명... 프로그램이 실행되기 위해서는, 프로그램 구성 요소들 (코드와 다양한 변수등..

데이터 세그먼트 간단정리

데이터 세그먼트 프로그램이 실행시 램에 적재되는데, 메모리 위에 올라오는 프로그램의 내용을 코드 세그먼트 / 데이터 세그먼트로 분류 가능하다. 이 중 데이터 세그먼트의 구조는 아래와 같다. 일단 가장 먼저 주목할 부분은 읽기 전용(Read-Only) Data 부분 입니다. 이전에 상수와 리터럴에 대해서 이야기 할 때 등장하였는데 이 부분에 저장되는 데이터들은 값이 절대로 변경될 수 없습니다. 다시 말해 궁극적으로 보호 받는 부분 이죠. 텍스트 세그먼트라고도함 그다음으로그위에전역변수와정적변수가거처하는데이터영역이있습니다. 그위에바로 힙(Heap) 이라는 영역이 있는데 이 부분에 대해서는 나중에 설명하도록 합시다. 힙 맨 위를 보면 스택(Stack) 이 있습니다. 스택은 지역 변수가 거처하는 곳입니다. 스택의..