전체 글
-
[Pintos] Project 1 : Thread(스레드) - Priority Inversion(donation)프로젝트/Pintos 2021. 5. 2. 00:29
드디어 Priority Scheduling 의 마지막 파트인 Priority Inversion 까지 왔다. 이전에 다루었던 문제들보다 꽤 많이 복잡해서 생각보다 시간이 오래 걸렸다ㅜㅜ 시작해보자! Priority Inversion 핀토스 Documents 에 나와있는 설명을 해석해보자. 우선 priority inversion 이란 다음과 같은 상황에서 발생한다. H (high), M (medium), L (low) 라는 세 개의 스레드가 있고 각각의 우선순위는 H > M > L 일 때, H 가 L 을 기다려야 하는 상황(예를 들어, H 가 lock 을 요청했는데 이 lock 을 L 이 점유하고 있는 경우)이 생긴다면 H 가 L 에게 CPU 점유를 넘겨주면 M 이 L 보다 우선순위가 높으므로 점유권을 선점..
-
[Pintos] Project 1 : Thread(스레드) - Priority Scheduling(2)프로젝트/Pintos 2021. 4. 30. 09:23
이번에는 동기화 도구들의 스케쥴링 방식을 살펴보자. 스케쥴링 도구들의 코드는 thread 폴더의 synch.h, synch.c 에 구현되어 있다. 우리가 다루어야 할 동기화 도구는 lock, semaphore, condition variable 3가지이다. 하나씩 살펴보자. /* thread/synch.h */ struct semaphore { unsigned value; /* Current value. */ struct list waiters; /* List of waiting threads. */ }; struct lock { struct thread *holder; /* Thread holding lock (for debugging). */ struct semaphore semaphore; /* B..
-
[Pintos] Project 1 : Thread(스레드) - Priority Scheduling(1)프로젝트/Pintos 2021. 4. 30. 03:02
스케쥴링은 ready 상태에 있는 스레드들의 순서를 관리하여 가장 높은 priority 를 가진 스레드가 running 상태가 될 수 있도록 만들어주는 것이다. 현재상태 우선 현재 pintos 가 스케쥴링을 어떻게 관리하고 있는지 살펴보자. ready_list 에 새로운 스레드가 push 되는 순간을 찾아보면 될 것 같다. /* thread/thread.c */ void thread_unblock (struct thread *t) { enum intr_level old_level; ASSERT (is_thread (t)); old_level = intr_disable (); ASSERT (t->status == THREAD_BLOCKED); list_push_back (&ready_list, &t->el..
-
[비트코인] 가상화폐 자동투자 프로그램 개발하기(5) - slack 알람 봇프로젝트/가상화폐 자동투자 2021. 4. 28. 00:31
이번 포스트에서는 자동투자 프로그램이 매매를 진행할 때마다 메신저에서 알람을 보내주도록 해본다. 메신저는 API 및 다른 프로그램 연결이 용이한 Slack 을 사용하여 진행한다. 우선 slack 사용을 위한 기본 세팅을 해주자. Slack 가입 및 워크스페이스 생성 우선 https://slack.com 아래 슬랙 홈페이지에 들어간다. 새 HQ에 오신 것을 환영합니다. Slack은 여러분의 팀과 소통할 새로운 방법입니다. 이메일보다 빠르고, 더 조직적이며, 훨씬 안전합니다. slack.com 오른쪽 상단의 '로그인' 을 눌러서 계정을 생성하고 로그인을 해준다. 보유중인 이메일을 가지고 간편하게 회원가입 및 로그인이 가능하다. 로그인이 되면 워크스페이스를 생성할 수 있는 창이 나오는데, '워크스페이스 생성'..
-
[비트코인] 가상화폐 자동투자 프로그램 개발하기(4) - 변동성 돌파 전략 보완(version 2)프로젝트/가상화폐 자동투자 2021. 4. 27. 18:59
지난 2장에서는 변동성 돌파 전략의 설명과 백테스팅을 진행하여 보았다. 아직 읽어보지 않았다면 아래 이전 2장 포스트를 먼저 읽고 오는 것을 추천한다. [비트코인] 가상화폐 자동투자 프로그램 개발하기(2) - 변동성 돌파 전략 및 백테스팅 이번 시간에는 가상화폐 자동투자를 실행할 '전략'에 대해 포스팅한다. 사람이 직접 하는 투자가 아니라 프로그램이 자동으로 진행하는 투자이기 때문에, 최대한 체계적이고 일률적인 투자전략 poalim.tistory.com 백테스팅 결과는 가상화폐를 처음부터 끝까지 그냥 들고있었을 때보다 수익률과 MDD 모두 우수했다. 오늘(2021/04/27 17:00) 기준 백테스팅 결과를 다시 한 번 확인해 보자. 무려 2배 가까운 수익률을 얻을 수 있었다. 하지만 변동성 돌파 전략의..
-
[비트코인] 가상화폐 자동투자 프로그램 개발하기(3) - version 1프로젝트/가상화폐 자동투자 2021. 4. 26. 23:11
오늘은 저번 포스트에서 다루었던 변동성 돌파 전략을 사용하여 실제로 가상화폐 자동투자를 진행하는 프로그램을 작성하여 보자. 우선 변동성 돌파 전략을 사용하기 위해서는 targetPrice 가 필요하기 때문에 이를 구하는 함수를 작성한다. def get_targetPrice(df, K) : range = df['high'][-2] - df['low'][-2] return df['open'][-1] + range * K df 는 pyupbit 의 get_ohlcv() 함수로 받아온 차트 데이터로, 가장 최신(오늘) 의 데이터가 마지막에 저장되어 있으므로 인덱스 -1 은 오늘, -2 는 어제의 데이터를 나타낸다. 전일 고가와 저가의 차이를 구하여 range 를 구하고, 당일 시가에 range * K 값을 더하..
-
[비트코인] 가상화폐 자동투자 프로그램 개발하기(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 명령을 받은 스레드의 진행 흐름은 아래와 같이 진행된다. 잠이듬 -> 깨어남 -> 시간확인 -> 다시잠 -> 깨어남 -> 시간확인 -> ... -> 깨어남 -> 시간확인(일어날시간) -> 깨어남 이러한 문제가 발생하는 내면을 살펴보면 스레드의 상태가..