크래프톤 정글 8주 차 CSAPP 11장의 웹서버 구현을 진행했다. 그리고 소형 웹서버를 기반으로 프록시 서버를 구현해야 한다. CSAPP 11 장의 내용은 이전 포스트 들을 확인할 수 있다.2025.05.03 - [크래프톤 정글 (컴퓨터 시스템: CSAPP)/11장 네트워크 프로그래밍] - 컴퓨터 시스템 : CSAPP 11장 정리 - 11.6 종합설계 :소형 웹 서버 Part.1 컴퓨터 시스템 : CSAPP 11장 정리 - 11.6 종합설계 :소형 웹 서버 Part.111.6절 Putting It Together: The Tiny Web Server이 절에서는 지금까지 배운 내용을 종합하여 작동 가능한 소형 웹 서버 Tiny를 구현한다. 이 서버는 다음을 처리할 수 있다:정적 콘텐츠 (HTML, 이미지..
Malloc Lab을 진행하면서 나는 92점이라는 점수를 받았다. 이 점수는 분리 가용 리스트(Segregated Free List)를 최초로 적용했을 때는 86점 수준이었으며, 이후 realloc 개선과 자잘한 최적화를 통해 92점까지 올릴 수 있었다. 하지만 이 점수가 내 코드의 한계인지, 더 높은 점수를 받을 수 있는 여지가 있는지 확인하고 싶었다. 그래서 다양한 개선 방안을 탐색하고, 실제로 적용하기 위해 시도했던 모든 과정을 공유하고자 이 주제를 선정하게 되었다.🔍 분리 가용 리스트 적용 직후아래는 분리 가용 리스트를 적용한 직후 얻은 점수이다.🔧 최적화 이후 결과realloc의 로직을 개선하고, 최적화를 반복적으로 적용하였다. 그 결과 아래와 같이 성능은 상당히 개선되었다📈 요청 크기 히..
이더넷(Ethernet)이란?이더넷은컴퓨터와 컴퓨터(또는 네트워크 장치들)를 유선으로 연결하는가장 기본적이고 널리 사용되는 네트워크 기술이다.쉽게 말하면, 케이블로 컴퓨터끼리 통신하게 해주는 규칙과 방법이다.이더넷은 데이터를 어떻게 전기 신호로 보내고 받을지 규정한 표준이다.회사/학교/집에서 쓰는 대부분의 유선 네트워크가 바로 이 이더넷 기반이다.데이터는 패킷(packet)이라는 작은 조각으로 쪼개져서 보내진다.이더넷은 속도, 케이블 종류, 통신 방법 등을 정해놓은 규칙을 따른다.이더넷은 도로 같디.자동차(데이터)가 달릴 때, 도로 규칙(이더넷 표준)을 따라야 하고,도로(케이블)를 통해 목적지(다른 컴퓨터)까지 간다.1. 전기적/물리적 규칙 (Physical Layer)어떤 케이블을 쓸지예: UTP 케이..
DMA란?DMA(Direct Memory Access)는 CPU를 거치지 않고 장치(디스크, 네트워크 카드, 사운드 카드 등)가 직접 메모리(RAM)와 데이터를 주고받는 방식을 말한다.기존: 사장님이 직접 배달 → 시간이 오래 걸리고 가게 일에 집중 못함DMA: 라이더에게 맡기고 → 사장님은 요리에 집중, 배달 완료되면 알림을 받는다.동작 과정① CPU가 설정한다CPU는 DMA 컨트롤러에게 세 가지를 알려준다:어디서부터 복사할지 (source 주소)어디로 복사할지 (destination 주소)얼마나 복사할지 (전송할 데이터 크기)② DMA가 전송한다CPU는 이제 손을 뗀다.DMA 컨트롤러가 메모리와 장치 간에 직접 데이터를 주고받는다.③ 전송 완료 후 알림데이터 복사가 끝나면, DMA 컨트롤러가 Inte..
Demand-Zero Memory란?Demand-Zero Memory란 "처음 접근할 때 0으로 초기화된 메모리"를 말한다.정의Demand-zero memory는 프로그램이 요청하지만 아직 실제로 물리 메모리가 할당되지 않은 페이지이다.이 메모리 페이지에 처음 접근하는 순간 운영체제가 실제 물리 메모리를 할당해 주며, 그 메모리의 모든 내용은 0으로 초기화된다.즉, 프로그램이 메모리를 요청할 때 미리 0을 써놓지 않고, 실제로 쓸 때 0으로 된 메모리를 제공하는 것이다.왜 'Demand' + 'Zero'인가?Demand: "필요할 때" (접근할 때) 물리 메모리를 할당함Zero: "초기값은 모두 0" 으로 채워진 메모리를 줌예시 1.int *arr = calloc(100, sizeof(int)); ca..
실패하면 디버그 성공하면 리눅스 아닙니까!안녕하세요 6주 차 RB-Tree 트리 생성 발표를 맡은 고웅입니다.어쩌다 보니 2주 연속 오프닝을 맡게 되었습니다??우선 저는 RB-Tree를 구현하며 가장 처음 만나게 되는 생성함수에 대한 발표를 맡았습니다.너무 쉬운거 맡아서 날먹 하려고 하네?? 맞습! 아!👊(퍽!) 아닙니다. 😅제가 트리 생성을 발표하려던 이유는 제가 겪었던 디버깅의 추억?을 소개 시켜드리기 위해서 이런 쉬운 주제를 냉큼 주웠습니다.먼저 오늘 준비된 코드부터 보시죠🔬구현 코드rbtree *new_rbtree(void) { rbtree *p = (rbtree *) calloc(1, sizeof(rbtree)); // TODO: initialize struct if needed..