전체 글
-
[OS]데드락의 발생과 처리 방법CS/OS 2022. 7. 31. 22:27
1. Deadlock이란? 프로세스들이 서로가 가진 자원을 기다리며 block된 상태이다. 1.1 자원이란? 하드웨어, 소프트웨어를 포함하는 개념 I/O, CPU, Memory, Semaphore 등 2. Deadlock 발생 조건 4가지 조건 모두 만족할 때 deadlock 발생한다. 다시 말해 한 가지 조건을 해제하여 deadlock을 방지한다. 1. Mutual Exclusion, 상호 배제 하나의 프로세스가 자원을 독점적으로 사용 2. No Preemption, 선점 불가 자원을 강제로 빼앗을 수 없음 3. Hold and Wait 일을 수행하기 전까지 현재 가진 자원을 내어 놓지 않음 4. Circular Wait, 환형 대기 자원을 기다리는 프로세스간에 사이클이 형성됨 3. Deadlock 처..
-
[Network]네트워크 계층의 포워딩CS/Network 2022. 7. 30. 13:42
0. 들어가기 전에 네트워크 계층의 근본적 역할은 매우 단순하다. 송신 호스트에서 수신 호스트로 패킷을 전달한다. 네트워크 계층의 기능은 라우터에 패킷이 도착하면 적절한 출력 링크로 전달하는 포워딩과 적절한 경로를 찾는 라우팅이다. 전송 계층을 다루며 인터넷 네트워크 계층은 최선형 서비스를 제공한다고 말했다. 최선형 서비스는 패킷을 보내는 순서대로 수신됨을 보장할 수 없고, 목적지까의 전송 자체도 보장될 수 없다. 종단 시스템 간 지연 또한 보장되지 않는다. 이러한 이유로 TCP가 패킷의 유실과 손상에 대한 대처를 철저하게 하는 것이다. 1. 라우터의 구조 입력 포트 입력 링크의 물리 계층 기능을 수행한다. 입력 링크의 반대편에 있는 링크 계층과 상호 작용을 하는 링크 계층 기능을 수행한다. 포워딩 테이..
-
[Network]TCP 계층 혼잡제어 완벽 정리CS/Network 2022. 7. 29. 21:46
0. 들어가기 전에 TCP 계층의 혼잡제어 알고리즘은 크게 3가지 단계이지만 조건과 작동이 꽤나 복잡하다. 게다가 블로그마다 설명이 제각각인 경우를 많이 보았다. 이번 글에서는 Computer Networking A Top-Down Approach, 7th의 TCP 혼잡제어 FSM을 보고 정리한 내용을 다룰 것이다. 1. TCP 혼잡제어 네트워크의 혼잡을 어떻게 감지하고 해결할 수 있을까? 타임아웃 또는 3중의 중복 ACK 발생에 의한 세그먼트 손실을 네트워크 혼잡의 발생으로 생각할 수 있다. 그리고 이에 따라 송신측의 윈도우 크기를 줄이면 된다. 즉 종단간의 혼잡을 제어하는 접근이다. 만약 네트워크 계층에서 직접적인 피드백을 준다면 송신자가 전송률을 증가시키거나 감소시킬 수 있을 것이다. 하지만 TCP..
-
비트코인 트레이딩 봇 만들기 (1) - pyupbit로 잔고 불러오기 및 백테스트Dev/Python 2022. 7. 29. 20:11
지난 글에서는 Upbit API 공식 문서에서 잔고와 마켓에 대한 정보를 불러오는 법을 알아봤다. 이번 글에서 부터는 python 라이브러리인 pyupbit를 통해 더욱 쉽고 간편하게 다양한 정보와 자동 매매를 위한 코드를 작성해보자. 1. pyupbit 라이브러리 사용하기 1.1 pyupbit 라이브러리 설치 및 사용 pip install pyupbit 2.1 라이브러리 이용하여 잔고 및 티커 불러오기 https://github.com/sharebook-kr/pyupbit # main.py # market.py, account.py 등 필요없다. import os import pyupbit access_key = os.environ['ACCESS_KEY'] secret_key = os.environ['..
-
[Network]TCP 연결 관리 - 3/4way handshakeCS/Network 2022. 7. 29. 20:11
TCP 연결관리 클라이언트 호스트의 애플리케이션이 서버 호스트와 연결을 원한다는 것을 클라이언트 TCP에게 알린다. 클라이언트 TCP는 서버와 연결 설정을 시작한다. +) ACK 세그먼트는 확인응답 세그먼트라는 의미이며, ACK 플래그를 의미하는 것이 아니다. ACK 플래그는 1비트이기 때문에 순서번호 +1 을 저장할 수 없다. ACK 플래그는 “수신한 세그먼트가 성공했다는 것을 확인 응답”하는 비트이다. 3-way에서 1단계에는 0으로 설정 / 2,3단계에서는 1으로 설정되어 있다. 3-way handshake SYN 세그먼트 전송 : 클라이언트 측 TCP는 SYN 플래그 비트를 1로 표시하고, 순서번호 필드에 임의의 숫자로 자신의 최초 순서번호를(clinet_isn) 설정하고 전송한다. 이 때, **..
-
[OS]운영체제 기본 개념CS/OS 2022. 7. 28. 17:59
0. 운영체제란? 사용자와 여러 소프트웨어를 하드웨어와 연결하는 소프트웨어 계층 좁은 의미 : 커널; 메모리에 상주하는 부분 넓은 의미 : 각종 시스템 유틸리티를 포함한 개념 1. 운영체제의 목적 컴퓨터 시스템을 편리하게 사용할 수 있는 환경 제공 편리하게? : 각 사용자/프로그램들이 독자적인 컴퓨터에서 수행되는 것 같은 환경을 제공하기 위해 하드웨어 관련 일을 수행한다. 프로그래머는 하드웨어의 동작에 대하여 몰라도 된다. 자원을 효율적으로 관리 자원? : CPU, 메모리, I/O 효율적? : 형평성 있는 분배, 한정된 자원으로 최대 효율 how? : CPU 스케줄링, 메모리 관리, 디스크 스케줄링, 인터럽트&캐싱 2. 운영체제의 분류 동시 작업 가능 여부 - single-tasking/ multi-ta..
-
비트코인 트레이딩 봇 만들기(0) - Upbit APIDev/Python 2022. 7. 28. 17:59
Upbit API를 간단하게 알아보는 글이다. pyupbit를 활용한 매매는 다음 글에서 다룬다. Upbit Open API 사용하기 1. 업비트 회원가입 → 마이페이지 → Open API 관리 https://upbit.com/mypage/open_api_management 자산조회, 주문조회, 주문하기 체크, 특정IP에서만 실행 체크 후 Open API Key 발급받기 Access Key와 Secret Key 발급 완료, 따로 저장해두기. 2. 고객센터 → Open API 안내 → 업비트 개발자 센터 → API Reference 개발자 센터에서 샘플 코드를 얻을 수 있다. 업비트에서 거래 가능한 마켓 목록을 불러오자. python의 requests 라이브러리가 필요하다. 맥환경에서 개발 중이므로 pyt..
-
[Network]신뢰적인 데이터 전송과 TCP(1)CS/Network 2022. 7. 28. 17:59
UDP와 TCP의 가장 큰 차이는 TCP가 신뢰적인 데이터 전송을 기반으로 하는 프로토콜이라는 것이다. 이번 글에서는 신뢰적인 데이터 전송이란 무엇인 지 알아본 뒤 다음 글에서 본격적으로 TCP에 대하여 다뤄보자. 1. 신뢰적인 데이터 전송 신뢰적인 채널에서는 데이터가 손상되거나 손실되지 않는다. 신뢰적인 채널에서 발생하는 일들을 차례대로 살펴보자. 일종의 프로토타입을 살펴보는 것이다. 1.1 완벽하게 신뢰적인 채널에서 데이터 전송, rdt1.0 만약 하위 채널이 완전히 신뢰적인 상황이라면 수신 측에서는 송신측으로 어떠한 피드백도 보낼 필요가 없다. 1.2 손실은 없으나 손상이 있는 채널에서 데이터 전송, rdt2.0 우리가 전화 통화를 하는 경우를 생각해보자. 상대가 말할 때, 어. 응. 음. 등의 피..