목록분류 전체보기 (26)
eliwook 님의 블로그
socket을 이용해 echo client server을 구현해보자!이 내용은 CS:APP 에 나와있는 코드이며 이를 분석하는 방식으로 진행하겠다.아래는 클라이언트 echo 코드이다.#include "csapp.h"int main(int argc, char **argv){ int clientfd; char *host, *port, buf[MAXLINE]; rio_t rio; if (argc !=3){ fprintf(stderr,"usage: %s \\n", argv[0]); exit(0); } host = argv[1]; port = argv[2]; clientfd = Open_clientfd(host,port); Rio_read..
0. 기본 매크로 구성malloc을 구현하기 전 필요한 기본 구조와 메크로를 미리 선언했다.이제 구현하면서 해당 메크로가 어떻게 동작하는지 알고 있어야 하기 때문에 정리를 좀 하려고한다.#define WSIZE 4#define DSIZE 8#define CHUNKSIZE (1 (y) ? (x) : (y))#define PACK(size, alloc) ((size) | (alloc))#define GET(p) (*(unsigned int *)(p))#define PUT(p, val) (*(unsigned int *)(p) = (val))#define GET_SIZE(p) (GET(p) & ~0x7)#define GET_ALLOC(p) (GET(p) & 0x1)#define HDRP(bp) ((char *..
우리는 TCP/IP 구조에서 socket을 이용해서 통신을 한다고 배웠다.이제 실제로 우리가 커널에 socket을 이용해서 통신을 할때 사용하는 구조체에 대해서 이야기를 해보겠다.인터넷 소켓 주소는 socket_in 타입 16바이트 구조체에 저장이 된다.struct sockaddr_in{ uint16_t sin_family; uint16_t sin_port; struct in_addr sin_addr; unsigned char sin_zero[8];};위와 같이 ip 주소 타입, 포트, 아이피주소, 패딩을 이용한 구조를 만든다.위와 같은 구조는 IPv4를 위한 구조이다.하지만 우리의 소켓 인터페이스는 위와 같은 구조를 가지지 않는다. 실제로 더 단순하다.struct sockaddr { uint16_t s..
OSI 7 layer7. 응용 계층 (Application Layer)네트워크 자원에 사용자가 접근하는 방법을 제공하는 계층최종적으로 사용자가 볼 수 있는 유일한 계층, 직접적으로 사용자와 상호작용한다.ex) 크롬, 사파리 등 웹 브라우저, MS Office와 같은 응용 프로그램프로토콜: HTTP, Telnet, DHCP, DNS, FTP6. 표현 계층 (Presentation Layer)데이터의 변환 작업(인코딩, 디코딩, 암호화)을 하는 계층응용 계층의 데이터 표현에서 독립적인 부분을 나타낸다.프로토콜: ASCII, MPEG, JPEG, EBCDIC5. 세션 계층 (Session Layer)응용 프로그램 간의 연결을 지원하는 계층사용자와 서버 간에 대화가 필요하면 세션을 만드는 작업을 처리한다.운영체..
소켓을 처음 들었을때 무슨 생각이 먼저 들었는가??나는 무언가를 받을 수? 담을 수? 있는것이라고 생각을 했었다. basket과 같은 느낌을 주어서 그랬던 것 같다.처음 소켓의 시작을 생각해 본다면 작은 주머니, 작은 구멍 등으로 뜻하기 시작되었다. 그 이후 전기나 기계분야에서 무언가를 끼워넣는 장치들 즉 전구나 어떤거를 꽂는 연결부를 소켓이라고 부르기 시작되었다.네트워크에서 소켓을 사용하게 된건 (TCP/IP를 설명하면서 나왔던) ARPANET이 개발되면서 퍼지기 시작되었다. 네트워크 프로그래밍이 발전하게 되면서 socket은 네트워크 통신의 엔드포인트를 지칭하는데 사용되기 시작이 되었다.이후 버클릿 대학에서 소켓 api를 개발하게 되었고 이때부터 socket이라는 단어가 공식적으로 사용을 하게 되고 ..
동적메모리 할당은 프로그램 실행 중에 필요한 만큼의 메모리를 할당하고 해제하는 기법이다.우리는 프로그램을 실행시키게 되면그래서 사용이 필요할때 요구를 하고 사용이 끝나면 반납을 해야한다.처음 프로그램이 컴파일 되면 자동으로 메모리가 할당이 된다. 이를 정적할당이라고 한다. 이는 스택영역에 저장이 된다.동적할당은 프로그램 사용중 중간에 데이터를 생성하고 삭제할 수 있다. 힙 영역에 데이터를 생성 및 삭제가 된다.사용이 끝난 메모리는 쓰래기와 마찬가지이다. 사용은 안하는데 공간을 차지하고 있는 것이다. 우리가 가지고 있는 공간은 좁으니 쓰레기를 치워야 한다. 직접 치우던지 아니면 로봇청소기를 돌리던지..직접치우는것과 로봇청소기를 비유한 이유는 프로그래밍 언어에 따라서 이 쓰레기를 치워주는 녀석이 있고(Gra..
삭제 OverView삭제 전 RB트리 속성 만족한 상태삭제 방식은 일반적인 BST와 동일삭제 후 RB 트리속성 위반 여부 확인RB트리 속성을 위반했다면 재조정RB트리 속성을 다시 만족노드를 삭제할 때 어떤 색이 삭제되는지가 속성 위반 여부를 확인할 때 매우 중요하다.삭제 되는 색에 따라서 위반 여부를 확인할 수 있다는 말이다.위와같이 자식이 두개 미만인 노드라면 삭제되는 노드의 색을 삭제하면 된다.여기서 20을 삭제한다고 하면 20 바로 다음으로 큰 값인 25가 Successor로 되게 되고 20의 자리로 이동하게 된다. 이때 successor의 색이 Red임으로 Red가 삭제가 된다.여기서 햇갈릴 수 있는건 삭제되는 색이다.우리는 successor를 삭제된 노드에 넣게 되는데 이 노드의 색을 유지시키겠..
R-B Tree란?이진 탐색트리(BST)의 한 종류특징으로는 스스로 균형을 잡는 특징이 있으며 BST의 단점인 worstcase를 개선했다.위의 그림같은 경우 이진 탐색트리의 시간복잡도는 O(N)이 되지만 R-B Tree는 트리의 균형을 잡음으로써 이를 개선할 수 있다. R-B Tree 의 속성모든 노드는 red 혹은 black이다.루트 노드는 black이다.모든 nil노드는 블랙이다.red의 자녀들은 black → red는 연속적으로 존재할 수 없다.임의의 노드에서 자손 nil 노드들까지 가는 경로들의 black 수는 같다. (자기자신은 제외)nil 노드란존재하지 않음을 의미하는 노드자녀가 없을 때 자녀를 nil노드로 표기값이 있는 노드와 동등하게 취급RB Tree에서 leaf 노드는 nil 노드x의..
지금은 정글 4주차 C언어로 자료구조 문제를 풀고 있는 중이다.문제를 풀다가 어려웠던 내용을 블로그로 포스팅을 하려고 한다. 문제 DATA-STRUCTURES(Q7_C_SQ)(balanced) Write a C function balanced() that determines if an expression comprised ofthe characters ()[]{} is balanced. The prototype for the balanced() function is givenbelow:The function prototype is given as follows:int balanced(char *expression);For example, the following expressions are balanc..
우리는 처음에 16비트의 컴퓨터를 사용했다. 그후 기술의 발달로 32비트 컴퓨터가 등장하게 되었고 지금은 64비트를 사용하고 있다.이와 맞게 레지스터 또한 발달을 하게 되었고 하위 호환성을 위해서 확장성을 기반으로 발달하게 되었다. 역사적으로 큰 변화 기점중 하나인 인텔의 8086 CPU에서 레지스터들은 %ax %sp와 같은 16비트 레지스터를 가지고 있었다.이전까지는 IA16 아키텍처를 사용하고 있었으나 IA32로 확장을 하면서 레지스터 또한 %eax, %esp로 확장이 되었다.이후 x86-64로 확징이 되면서 레지스터들은 %rax, %rsp까지 64비트로 확징이 되었다. 추가적으로 %r8 ~ %r15의 이름을 가진 레지스터도 추가되었다.위와같이 레지스터는 구성하게 된다. 이 레지스터들은 “중첩된”구조..