본문 바로가기
728x90

개발자 도전기/[CS] CSAPP6

네트워크 프로그래밍(Network Programming) | 웹 서버, 소형 웹 서버 Tiny 만들기 1. 웹 서버 웹 클라이언트(브라우저)와 서버는 HTTP(Hypertext Transfer Protocol)라는 텍스트 기반의 프로토콜을 사용하여 상호 연동하고, 웹 콘텐츠는 HTML(Hypertext Markup Language) 언어로 작성된다. | 웹 콘텐츠 웹 콘텐츠는 MIME(Multipurpose Internet Mail Extensions) 타입을 갖는 바이트 배열이다. 웹 서버는 두 가지 서로 다른 방법으로 클라이언트에게 콘텐츠를 제공한다. 정적 콘텐츠 디스크 파일(정적 콘텐츠)을 가져와서 그 내용을 클라이언트에게 전달. 파일을 클라이언트에게 돌려주는 작업은 정적 콘텐츠를 처리한다고 말한다. 동적 콘텐츠 실행파일을 돌리고, 그 출력을 클라이언트에게 보낸다. 실행파일이 런타임에 만든 출력을 .. 2021. 9. 24.
네트워크 프로그래밍(Network Programming) | 소켓 인터페이스, getaddrinfo함수, addrinfo구조체 1. 소켓 인터페이스 | 소켓 인터페이스 네트워크 응용을 만들기 위한 Unix I/O 함수들과 함께 사용되는 함수들의 집합 | 소켓(socket) 통신을 위한 끝점(End point of a connection). 각 소켓은 인터넷 주소와 16비트 정수 포트로 이루어진 소켓 주소를 가지며, address : port 로 나타낸다. 소켓은 모든 운영체제에서 지원한다. (데이터를 주고 받기 위해서 소켓 디스크립터(socket descriptor)라는 파일시스템을 이용) 클라이언트의 소켓 주소 내의 포트는 클라이언트가 연결 요청을 할 때 커널이 자동으로 할당한다. 서버의 소켓 주소에 있는 포트는 대개 영구적으로 이 서비스에 연결되는 Well-known port다. (예시- 웹 서버 포트: 80, 이메일 서버 .. 2021. 9. 24.
네트워크 프로그래밍(Network Programming) | 클라이언트, 서버, 네트워크, 인터넷, TCP/IP, IP 개념 정리 1. 클라이언트-서버 프로그래밍 모델 모든 네트워크 응용 프로그램은 클라이언트-서버 모델에 기초하고 있다. 이 모델에서 근본적인 연산은 트랜잭션이다. 클라이언트-서버 트랜잭션은 네 단계로 구성된다. 클라이언트가 서비스를 필요로 할 때, 클라이언트는 한 개의 요청(request)을 서버에 보내는 것으로 트랜잭션을 개시한다. (예시- 웹 브라우저가 파일을 필요로 할 때, 웹 서버로 요청 보냄) 서버는 요청을 받고, 해석하고, 자신의 자원들을 적절한 방법으로 조작한다. (예시- 웹 서버가 클라이언트로부터 요청을 받을 때, 디스크 파일 읽음) 서버는 응답(response)을 클라이언트로 보내고, 그 후 다음 요청을 기다린다. 클라이언트는 응답을 받고 이것을 처리한다. (예시- 웹 브라우저가 서버로부터 페이지를 .. 2021. 9. 23.
Malloc Lab | 동적 메모리 할당(3) - Implicit - first fit, next fit 코드 구현 Malloc Lab | 동적 메모리 할당(1) - 개념 정리 Malloc Lab | 동적 메모리 할당(2) - 묵시적 가용 리스트(Implicit free list) 더보기 그 외 explicit 방법 구현 등 코드도 보고 싶다면? https://github.com/dapsu/week06-malloclab.git Implicit - First fit /* * mm-naive.c - The fastest, least memory-efficient malloc package. * * In this naive approach, a block is allocated by simply incrementing * the brk pointer. A block is pure payload. There are no he.. 2021. 9. 15.
Malloc Lab | 동적 메모리 할당(2) - 묵시적 가용 리스트(Implicit free list) Malloc Lab | 동적 메모리 할당(1) - 개념 정리 Malloc Lab | 동적 메모리 할당(1) - 개념 정리 동적 메모리 할당? C언어를 공부하면서 배열을 정할 때 배열의 크기도 명확하게 설정해야 하는 것이 파이썬과 달라 조금 낯설었다. 예를 들어 A대학교 B학과의 학년 별로 코로나 백신 접종을 얼 dapsu-startup.tistory.com 이전 포스팅에서 동적 메모리에 대한 간단한 개념 소개와 명시적 할당기 중 묵시적 가용 리스트, 명시적 가용 리스트 두 가지 방법에 대해서 짧게 설명했었다. 이번에는 묵시적 가용리스트(Implicit free list, 줄여서 Implicit라고 부르겠음)에 대해 정리해보려고 한다. 묵시적 가용 리스트(Implicit free list) 실용적인 할당기.. 2021. 9. 14.
Malloc Lab | 동적 메모리 할당(1) - 개념 정리 동적 메모리 할당? C언어를 공부하면서 배열을 정할 때 배열의 크기도 명확하게 설정해야 하는 것이 파이썬과 달라 조금 낯설었다. 예를 들어 A대학교 B학과의 학년 별로 코로나 백신 접종을 얼마나 했는지 결과를 출력하는 프로그램을 만든다고 생각해보자. 각 학년 별로 학생 수가 모두 다르기 때문에 배열을 일일히 정하는 것은 효율적이지 않다고 느껴진다(물론 학생 수 정도야 귀찮아도 가능하겠지만, 다뤄야 하는 데이터가 방대해진다면 어질어질해진다). 그렇다고 크기를 '충분히 크게' 잡게 된다면 메모리가 낭비되는 경우가 발생할 것이다. 이런 낭비를 막기 위해 '학년 별 학생 수'를 입력 받고 그 학생 수 만큼 배열의 크기를 정할 수 있다면 효율적일 것이고, 이를 가능하도록 하는 방법이 바로 동적 메모리 할당이다. .. 2021. 9. 14.
728x90
LIST