본문 바로가기
728x90
반응형

분류 전체보기132

운영체제(Operating System) | 운영체제 개요 어제를 기점으로 악명이 자자한 핀토스를 시작하게 되었다. 정글 1기 분들 핀토스 얘기 나올 때마다 모두 다 하나 같이 PTSD 오시는거 보고 겁나 쫄아 있는 상태임... pintOS, 이제 과제 시작되었는데 솔직히 뭔지 모르겠다. 운영진님들이 올려주신 GitBook을 보면, 핀토스는(pintos-kaist) 심플한 운영체제(x86-54) 프레임워크라고 한다. 커널 스레드, 사용자 프로그램 로드 및 실행, 파일 시스템을 지원하지만 이 모든 것을 매우 간단한 방식으로 구현할 것이라고 한다. (이 양반들의 심플, 간단이라는 단어하고 내가 아는 단어하고 다른 단어인 듯;;) 여하튼 핀토스 과제를 하기 위해서는 전 글에서도 계속 얘기했던 것처럼 기본적인 OS에 대한 지식이 탑재되어 있어야 한다. 전에 malloc.. 2021. 9. 28.
정글에서 살아남기 | WEEK07 | 웹서버 만들기 이번 주 차는 일이 많았다. 추석 연휴도 있었고, 백신 맞아서 두통으로 고생도 했었고(물론 심하지는 않아서 다행쓰) 특히 추석 때 고향에 잠깐 내려갔다가 다시 대전으로 복귀할 때 버스를 놓쳐서 다음 시간 버스를 탔었고(진짜 운좋게 한 자리 남았었음..) 차 거어어업나게 막혀서 버스에서만 다섯 시간 있었고, 캠퍼스까지 복귀하는데 6시간 30분이나 걸렸었다.. 이것만으로도 체력 고갈... 여하튼 이번 주는 웹서버 만들기가 목표였고, 역시 C언어로 Tiny 웹 서버를 구현했었다. flask 프레임워크를 이용하여 웹 서버를 만드는 것과는 다르게 더 low하게 코드 구현을 해야 되어서 꽤 어려웠던 부분들이 많았다. 1. 웹서버 만들기 1. 네트워크 프로그래밍(Network Programming) | 클라이언트, .. 2021. 9. 28.
네트워크 프로그래밍(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.
정글에서 살아남기 | WEEK06 | 시스템 콜, 데이터 세그먼트, sbrk, 메모리 단편화? 태초마을로 돌아가자(컴퓨터 시스템 기초 이해 필수) 정글 6주 차!! week06의 키워드 WEEK06: 시스템 콜, 데이터 세그먼트, sbrk, 메모리 단편화 week05주 때 RBTREE를 구현하면서 malloc을 사용했었다. 그리고 이번 주 차에는 내가 사용했던 malloc함수를 내가 만드는 것이 목표! 1. Malloc Lab 구현 저번 주에는 실사용에 사용되는 효율적인 자료구조를 통해 C언어 문법에 대해서 익혔다면, 이번 주는 C언어에서 메모리 할당에 사용되는 malloc함수를 직접 구현하면서 데이터가 메모리에 어떤 방법으로 할당되는지 등 메모리에 대한 개념을 이해하는 것이 과제의 목표였다. 말롭랩 과제에 대한 자세한 설명은 아래 링크로! 2021.09.14 - [개발자 도전기/[SW사관학교 정글] 개발일지] - Malloc Lab | 동적 메모.. 2021. 9. 19.
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
반응형