본문 바로가기

반응형

SW정글사관학교

(22)
[SW 정글] 웹서버 구현 error - 403 Forbidden , Tiny couldn't read the file: ./ (feat, c) 이번 주차 과제는 웹서버를 직.접 구현하는 거다. 하는 도중 에러는 안나지만 페이지에 접속하면 아래와 같은 화면이 나온다. 찾아본 결과 // Analysis HTTP URI int parse_uri(char *uri, char *filename, char * cgiargs) { char *ptr; // 실행파일의 홈디렉토리는 /cgi-bin이라고 가정한다 if(!strstr(uri, "cgi-bin")){ // if for static content strcpy(cgiargs, ""); // delete cgi args strcpy(filename, "."); // uri를 ./index.html같은 상대 리눅스 경로이름으로 변환한다. strcat(filename, uri); // strcat(*str1..
[SW 정글] 5/7~11 TIL 가상메모리 - 주소번역, TLB, 메모리 계층구조, malloc 구현 말록 설명하기에는 내가 아직 말록에 대한 지식이 부족한것 같다. 정리를 잘한 동기의 주소를 첨부한다. https://wonyoung2257.tistory.com/87 그런 사람 없겠지만, 나의 코드가 궁금한 사람을 위해 링크를 남겨놓겠다. https://github.com/dbsgur/malloc-lab/blob/main/mm.c 주소 번역 주소번역은 N-원소 가상주소공간 (VAS : virtual address space)와 M-원소 물리 주소 공간(PAS : Pysical Address Space)의 원소들간의 매핑이다. PTBR(Page Table Base Register)은 현재 페이지 테이블을 가리킨다. n비트 가상 주소는 두개의 컴포넌트를 가진다. : p비트 가상 페이지 오프셋(VPO:Virt..
[SW 정글] 5/6 TIL 가상메모리 가상 메모리 : 가상 메모리 또는 가상 기억 장치(가상기억기, virtual memory, virtual storage)는 메모리 관리 기법의 하나로, 기계에 실제로 이용 가능한 기억 자원을 이상적으로 추상화하여 사용자들에게 매우 큰 (주) 메모리로 보이게 만드는 것 주기억 장치 용량이 작기 때문에 보조기억장치를 마치 주기억 장치 처럼 사용하여 주기억 장치의 공간을 확대하는 효과를 내기 위한 기억 장치 관리 방법 물리 및 가상 주소 방식 CPU가 메모리에 접근하는 가장 자연스러운 방식은 물리주소를 사용하는 것이다. 위와 같은 접근 방법을 물리 주소 방식이라한다. 실행과정은 CPU가 로드 인스트럭션을 실행할때 유효 물리 주소를 생성 -> 이것을 메모리 버스를 거쳐서 메인 메모리에 전달 -> 메인 메모리는 ..
[SW 정글] 5/5 TIL - malloc 구현 왜 하냐? (feat, c) 이번주차 과제는 c로 malloc, free 구현이다. 즉, 동적할당을 직접 구현해보는 것이다. 하라는데 하기가 싫다. 적어도 내가 왜 이걸 구현 해야하는지, 무슨 도움이 될지 알아야겠다. 그래서 가상메모리의 정의와 기능, 중요한 이유. 그리고 동적할당을 구현했을 때 앞으로의 나에게 무슨 도움이 될지 알아보았따. 한 시스템의 프로세스들은 CPU와 메인 메모리를 다른 프로세스들과 공유한다. 그러나, 말이 쉽지 메인 메모리를 공유하는 것은 어려움을 많이 만난다. 예를 들어, CPU에 대한 요구가 증가함에 따라 프로세스들은 점점 느려진다. 또한, 너무 많은 프로세스들이 너무 많은 메모리를 요구하면 일부는 실행할 수 도 없게 된다. 또 다른 예로, 메모리는 손실에 취약하다. 만일 일부 프로세스가 무심코 다른 프..
[SW 정글] 5/1 ~ 5/4 TIL RB Tree (feat, C) 이번주차는 RED - BLACK TREE를 직접 구현해보는 것이 과제이다. rb tree의 조건은 다음과 같다 1. 모든 노드는 색을 가진다. Red or Black 2. root 노드는 black 3. leaf node는 black 4. red node의 child node는 black(black node의 child node는 상관없다.) 5. 각 노드에서 leaf node로 가는 경로 중 black node의 수는 항상 같아야 한다. (-> 이 조건 때문에 균형이 유지된다.) fact 1, v의 서브트리의 내부노드 개수 >= 2^(bh(v)-1) fact 2, black의 노드 개수 >= h/2 => black(root) >= h/2 fact 3, h = O(log2N) h(v) : v의 높이 bh..
[SW정글] 4/30 TIL - pointer -> Linked List, Queue(feat, C) 주소값 데이터의 주소값이란 해당 데이터가 저장된 메모리의 시작 주소를 의미한다. 예를 들어 int data는 4바이트 크기를 가지지만 int형 데이터의 주소값은 시작 주소 1바이트만 가리킨다. 포인터 메모리의 주소값을 저장하는 변수이다. 연산자 주소 연산자 & 변수의 이름 앞에 사용하며, 해당 변수의 주소값을 반환한다. ampersand라고 읽는다. 참조 연산자 * 포인터의 이름이나 주소 앞에 사용하며, 포인터에 가리키는 주소에 저장된 값을 반환한다. stack 구현 전역변수 Ver #include #include #include #define MAX_STACK_SIZE 100 #define MAX_STRING 100 // 학생 구조체 선언 typedef struct { int student_number..
[SW정글] 4/29 TIL - 메모리 누수, 균형이진트리, RB TREE(feat, C) 메모리누수 메모리 누수란 ? 컴퓨터가 필요하지 않은 메모리를 계속 점유하고 있는 현상이다. c는 파이썬이나 자바스크립트처럼 가비지 컬렉터가 없다. 사용자가 메모리를 할당해주고 해제?(free)를 해주지 않으면 메모리 누수 현상이 발생한다. malloc 등과 같은 메모리를 동적할당 했다면, 꼭! 꼮! free를 해주는 습관을 들이도록 하쟈! 균형 이진 트리 균형 이진 트리란? 말 그대로 균형이 잡힌 이진 트리이다. (높이는 O(logN)을 만족) 균형이 잡히지 않았다면 search까지 최대 O(N)이 걸릴 수 있기 때문에 나온 개념이다. 균형 이진트리의 종류로 AVL Tree, Red-Black Tree가 있는데 Red-Black 트리가 많이 쓰인다. 이유는 밑에서 설명하겠다. AVL Tree Avarag..
[SW정글] week04 후기 (feat, dp, 그리디) Dynamic Programming - DP 정의 - 큰 문제를 작은 문제로 나눌 수 있고, 그 겹치는 작은 문제들의 경우 메모제이션 기법을 사용하여 큰 문제를 푸는 기법 분할 정복을 하는데 그걸 메모제이션해서 나아간다. DP의 장점 - 모든 가능한 경우를 확인하기 때문에 근사치가 아닌 정확한 값을 얻을 수 있따. DP의 단점 - 모든 가능한 경우를 확인하기 때문에 시간복잡도가 크다. 알고리즘 주차를 진행하며 DP가 제일 어려웠다. 점화식을 떠올리는게 정말 어려웠고, 정답 코드는 너무 짧아서 보면 허무했을 정도다. 또한, 알고리즘이 너무 많았다. 예를 들어 Knapsack problem, LIS(Longest Increasing Sequence), LCS(Longest Common Sequence), ..

반응형