분류 전체보기
-
[비트코인] 가상화폐 자동투자 프로그램 개발하기(2) - 변동성 돌파 전략 및 백테스팅프로젝트/가상화폐 자동투자 2021. 4. 24. 03:15
이번 시간에는 가상화폐 자동투자를 실행할 '전략'에 대해 포스팅한다. 사람이 직접 하는 투자가 아니라 프로그램이 자동으로 진행하는 투자이기 때문에, 최대한 체계적이고 일률적인 투자전략을 세워야 한다. 또한, 잦은 거래는 많은 수수료를 발생시키므로 거래 횟수도 너무 많으면 안 된다. 이러한 점들을 고려하여 채택한 전략은 '변동성 돌파 전략'이다. 그럼 '변동성 돌파 전략'이 무엇인지 알아보자. 변동성 돌파 전략 투자에서 사용할 수 있는 분석 기법은 크게 투자 대상의 내재적 가치(기업가치, 재무재표 등)를 분석하는 '기본적 분석(Fundamental Analysis)'과, 투자 대상의 가격 변동(차트)를 분석하는 '기술적 분석(Technical Analysis)' 두 가지로 나누어진다. 이 중에서 우리는 자..
-
[Pintos] Project 1 : Thread(스레드) - Alarm Clock프로젝트/Pintos 2021. 4. 19. 15:12
이번 포스트에서는 핀토스의 첫 번째 과제인 Alarm Clock 을 구현해보도록 한다. Alarm Clock 운영체제에는 실행중인 스레드를 잠시 재웠다가 일정 시간이 지나면 다시 깨우도록 하는 기능이 있는데, 이 기능을 Alarm Clock 이라고 한다. 현재 핀토스에 구현되어 있는 Alarm Clock 기능은 busy-waiting 방식으로 구현되어 있는데 이는 매우 비효율적으로 많은 CPU 시간을 낭비하게 한다. busy-waiting 방식에서 sleep 명령을 받은 스레드의 진행 흐름은 아래와 같이 진행된다. 잠이듬 -> 깨어남 -> 시간확인 -> 다시잠 -> 깨어남 -> 시간확인 -> ... -> 깨어남 -> 시간확인(일어날시간) -> 깨어남 이러한 문제가 발생하는 내면을 살펴보면 스레드의 상태가..
-
[비트코인] 가상화폐 자동투자 프로그램 개발하기(1) - 업비트 API프로젝트/가상화폐 자동투자 2021. 4. 17. 18:35
작년 코로나19 가 세계를 덮친지 1년만에 KOSPI 지수가 3000 을 넘어서면서 일어난 재테크 열풍으로 요즘 남녀노소 누구나 주식 및 가상화폐 투자에 뛰어들고 있다. 이러한 상황 속에서 주변 사람들, 심지어 대학교 새내기들조차 투자에 빠져 밤을 새고 수업을 가지 못하는 상황을 주변에서 종종 보면서 이들이 직접 밤새 투자에 참여하지 않아도 자동으로 투자를 진행하여 주며 현재 상황을 메신저를 통해 알려주는 프로그램을 만들어 이들에게 일상 생활을 돌려주자는 생각을 하였다. 이런 이유로 이번에 진행할 사이드 프로젝트는 가상화폐 자동투자 프로그램이다. 주식 vs 가상화폐 주식이 아닌 가상화폐를 대상으로 정한 이유는 아래와 같다. 주식은 장의 운영 시간이 정해져 있는 반면 가상화폐는 365일 24시간 쉬지 않고..
-
[Pintos] Project 1 : Thread(스레드) Background- 진행흐름, Kernel thread, 코드분석, Registers, assembly, switch.S 분석프로젝트/Pintos 2021. 4. 9. 17:32
이 포스트에서는 본격적인 프로젝트에 들어가기 위해 꼭 필요한 개념들을 잡아두기 위해 여러 가지 배경 지식들을 설명한다. 이는 pintos kernel 에서 threads 의 기본적인 흐름도, 범용 레지스터 개념, struct thread 의 구조, 주어진 코드 분석(thread.h, thread.c, switch.h, switch.S) 등이 포함된다. 진행흐름 전 포스트에서 살펴봤다시피 pintos 의 loader 는 우리를 init.c 의 main 함수로 가져다놓는다. 이 main 함수를 살펴보면 여러 초기화 작업 후에 가장 먼저 나오는 작업은 thread 의 시작이다. 코드에서 한 번 살펴보자. /* thread/init.c */ /* Pintos main program. */ int main(voi..
-
[Pintos] 4.4BSD 스케줄러(4.4BSD Scheduler) - niceness, priority, recent_cpu, load_avg, fixed-point real arithmetic프로젝트/Pintos 2021. 4. 3. 13:57
멀티스레드 프로그램에서는 구조가 상이한 여러 스레드들이 함께 존재한다. 어떤 스레드는 다수의 I/O 요청을 처리하지만 복잡한 연산 작업은 없을 수 있으며, 어떤 스레드는 I/O 요청 없이 다수의 복잡한 연산 작업 만으로 이루어져 있을 수 있다. 위의 첫 번째 스레드는 I/O 장비와의 빠른 반응속도를 필요로 하지만 CPU time 은 거의 필요하지 않지만, 뒤의 스레드는 반대이다. 이렇게 다양한 스레드들이 존재하기 때문에, 효율적인 프로그램을 위해서 Scheduler(스케줄러) 는 이러한 요구들이 최대한 효율적으로 사용되도록 배치해야 한다. 이를 위해 스케줄러는 priority 라는 속성을 관리하는데, 이 속성에 기반하여 스레드들의 처리 순서를 결정한다. 이 포스트에서는 4.4BSD Scheduler 스케..
-
[Pintos] 동기화(Synchronization) - Semaphores, Locks, Monitors, Optimization Barriers프로젝트/Pintos 2021. 3. 31. 11:37
스레드(Thread) 쓰레드는 프로세스 내에서 실행되는 흐름의 단위를 말한다. 환경에 따라 하나의 프로세스 내에서 두 개 이상의 쓰레드가 실행될 수 있는데 이를 멀티스레드(multithread) 라고 한다. 멀티 쓰레드는 멀티 프로세스와 여러 작업이 동시에 이루어 진다는 공통점이 있지만, 멀티 프로세스에서 각 프로세스는 독립적으로 실행되며 각 프로세스는 별개의 메모리 공간을 차지하는 반면 멀티 스레드는 프로세스 내의 메모리를 공유하여 사용할 수 있다는 차이점이 존재하며 이러한 자원을 공유하는 특성 때문에 pintos 의 스레드 설계는 스레드간의 동기화(Synchronization) 에 신경을 써야한다. 이 포스트는 pintos 의 동기화에 사용될 수 있는 여러 방법들을 소개한다. Disabling Int..
-
[Pintos] 로딩 (Loading) - Loader, Real mode, Protected mode, A20 gate, Page Table프로젝트/Pintos 2021. 3. 19. 13:48
로딩 로딩은 Pintos 의 Loader 의 실행과 kernel initialization 작업을 포함한다. 1. Loader 여기서 로딩은 pintos 의 첫 실행시 진행되는 부팅의 과정을 나타낸다. 부팅이란 컴퓨터가 구동하여 기초적인 초기화 작업을 수행하고 운영 체제를 읽어오는 일련의 작업을 말한다. 로더(Loader) 는 이러한 부팅의 작업을 진행하는 프로그램으로 장치(Disk) 의 첫 번째 트랙의 첫 번째 섹터에 저장되어 있다. Pintos 에서 로딩의 대략적인 순서는 아래와 같다. (로더의 코드는 에 구현되어 있다.) 1. BIOS 가 로더(Loader) 를 메모리에 로드(Load) 한다. BIOS 는 컴퓨터가 구동된 후 저장 장치의 첫 번째 섹터(Sector) 를 탐색하여 이 장치가 부팅 가능..
-
[Pintos] 디버깅 도구 (Debugging Tools) - printf, assert, __attributes__, backtraces프로젝트/Pintos 2021. 3. 16. 10:56
디버깅이란 프로그램에서 발생할 수 있는 버그(에러) 를 찾아서 없애는 과정을 말한다. 이 장에서는 Pintos 프로젝트를 진행하면서 활용할 수 있는 여러가지 디버깅 도구들에 대해 설명한다. 여기서 설명된 방법들은 Pintos 프로젝트 뿐 아니라 다른 프로젝트들에서도 널리 사용될 수 있는 디버깅 방법들이므로 익혀두도록 하자. 1. printf() printf() 를 c 언어의 가장 처음에 배우기 때문에 printf() 를 사용한 디버깅은 없어보인다고 생각하기 쉽다. 하지만 printf() 만큼 간단하고 유용하게 사용할 수 있는 Debugging Tools 도 없다. 프로그램이 비정상적으로 작동할 때 printf() 를 코드의 중간중간 섞어 놓으면 문제가 발생한 코드의 범위를 특정할 수 있다. ex) cod..