분류 전체보기
-
[비트코인] 가상화폐 자동투자 프로그램 개발하기(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..
-
MKS 하프마라톤(21.1 km) - 2021.03.02일상/러닝(마라톤 기록) 2021. 3. 6. 16:58
어느덧 매일 아침 5km 를 뛰면서 시작하는 하루가 4개월 차에 접어들었습니다! 매일 뛰는 것도 좋지만 뭐니뭐니 해도 러닝의 꽃은 마라톤이겠죠. 이제 어엿한 한 사람의 러닝인으로써 2021년 저의 가장 큰 목표 중 하나는 '하프마라톤 완주' 였습니다. 러닝을 시작한 지 오래 되지도 않았고 21.1km 라는 어마어마한 거리에 겁을 먹었기에 1년간 꾸준히 단련해서 연말쯤 도전을 해 볼 생각이었습니다. 그러다 어느 날 MKS 마라톤이 언택트로 진행된다는 소식에 10km 부문을 신청하려고 들어가서 저도 모르게 하프마라톤을 신청해버렸습니다 .. ㅎㅎ 과연 결과는? 짜잔~~~! 2시간 48분 25초의 기록으로 완주를 성공했습니다~~~ 전체 58명 중 55위... 이지만 완주했다는 사실이 중요한 것 아니겠어요?? 꾸..
-
[sftp] vscode 에서 서버 연결하기Programming/기타 2021. 3. 1. 12:05
vscode 의 "sftp" 확장 프로그램을 쓰면 서버의 소스를 로컬에서 vscode로 편집할 수 있습니다. 저는 가상머신의 리눅스 환경에서 프로젝트를 진행하다가 vim 보다는 아무래도 vscode 가 익숙하여 로컬 vscode 에서 서버를 연결하여 사용하였고 그 방법을 공유하려고 합니다. *서버에 ssh 가 설치되어 있지 않아서 sftp 이용이 불가할 수 있으니 sudo dpkg -l | grep ssh 로 확인해보시고 없다면 sudo apt-get install ssh 로 ssh 를 먼저 설치해주셔야 합니다.* 1. SFTP 확장 프로그램 설치 vscode 에서 sftp 를 사용하기 위해 확장 프로그램을 설치하여야 합니다. - vscode 에서 왼쪽 메뉴의 저 테트리스 같은 모양을 누르면 확장 프로그..