1월, 2023의 게시물 표시

프로그램 실행 과정(소스코드부터 CPU에서 코드 실행하기 까지)

이미지
소스코드에서 실행파일로 변환 과정 - 소스파일은 컴파일러를 통해 오브젝트 코드(기계어) 파일로 바뀐다. - 오브젝트 파일은 몇 개의 영역으로 나뉜다. .text 영역(section) 에는 오브젝트 코드가 들어있고, .rdata 영역은 read-only 데이터, .data 영역은 mutable 데이터 정보가 들어있다. - 링커는 실행하기 위해 필요한 모든 오브젝트 파일을 종합해 실행파일 (그림에서 a.out, 윈도우에선 exe) 로 만든다. - 링커는 각 unknown심볼들에 대한 정보(참조 주소 등)를 정리한다.  그림 출처 : Link-Time Binary Rewriting Techniques for Program Compaction by BJORN DE SUTTER, BRUNO DE BUS, and KOEN DE BOSSCHERE / Ghent University 실행파일 적재 후 명령어 실행 과정 실행파일은 보조기억장치(DISK) 에서 주기억장치 (RAM)로 적재해야 실행할 수 있다. - 적재는 로더(loader)가 수행한다. - 메모리 적재시 여유공간 확인 후 페이징 기법 등이 사용될 수 있다. - 메모리에 올라간 실행파일은 기계 명령어를 CPU로 보내고 한 줄씩 수행한다. 그림 출처 :  Generating Programs and Linking by Rick Han / University of Colorado

DLL 이해하기

이미지
배경지식   프로그램 실행 과정(소스코드부터 CPU에서 코드 실행하기 까지) (diary1215.blogspot.com) 글 읽을 때 헷갈리지 않게 빌드 과정 및 용어 정리 빌드 과정 =  소스코드(C++,JAVA 등) -> 실행가능한 코드(기계어, 바이트코드, 오브젝트파일) -> 실행파일(exe 등) 라이브러리(library) 라이브러리는 실행가능한 코드 모음 이다. 프로그래밍 모듈화를 도와준다. string의 글자수를 세주는 여러 프로그램에서 유용하게 쓸 수 있는 함수를 만들었다고하자. 글자수를 세는 기능이 필요한 프로그램을 만들때마다 이 함수를 직접 소스코드에 쓰는것은 낭비다. 라이브러리로 만들어 두면, 매번 소스코드에 쓰지 않고도 실행파일을 만들 수 있게 해준다. 1. 기능을 실행가능한 코드(기계어 또는 바이트코드)로 미리 만들어 놓는다.   = 라이브러리 2. 다른 프로그램에서 기능을 사용할 때 라이브러리랑 링크 해서 기능을 사용한다. 링크 시점에 따라서 정적(static) 라이브러리와 동적(dynamic) 라이브러리로 나뉜다. 정적 라이브러리 링크 시점이 실행 파일을 만들 때이다. 실행파일은 기존 프로그램의 실행가능한 코드(기계어/바이트코드)와 라이브러리의 실행가능한 코드를 합쳐서 만든다. 실행파일 = 내 프로그램 + 라이브러리 동적 라이브러리 링크 시점이 런타임이다. 실행파일은 기존 프로그램 의 실행가능한 코드만 가지고 만든다. 라이브러리 코드랑 실행 파일은 관련이 없기 때문에, 라이브러리 업데이트를 하더라도 실행파일을 새로 만들 필요가 없다. 실행파일 = 내 프로그램 *cf) 자바는 JVM 가상환경 특징이 있어서 .jar 이 실행가능한 파일이자 실행파일, 동시에 라이브러리이기도 하다. JVM 가상환경에 필요할 때 로드 되므로 굳이 구분하자면 동적이라고 볼 수 있다. 동적링크라이브러리(dll)이란? 기본 배경 윈도우 운영체제용 라이브러리. 라이브러리이기 때문에 여러 프로그램에서 동시에 사용할 수 있는 코드와 ...

파이썬 패키지 오프라인 설치

이미지
파이썬으로 cx_Oracle이나 seaborn 패키지 기능을 사용할 일이 있었는데, 내부망에는 인터넷은 따로 안되고, pypi 미러 서버도 없어서 패키지를 usb 등을 통해서 설치해야 했다. 인터넷이 되면 굳이 이럴 필요 없이 아래 명령어 한 줄이면 되는데, python -m pip install <패키지명> --upgrade 오프라인으로 하려니 dependencies (먼저 설치되어야하는 패키지) 문제로 너무 오래 걸렸다. 나중에 또 헷갈릴까봐 기록..! 1단계 -> 3단계로 dependencies 오류(대략 A패키지가 없음) 발생시 그 다음 단계 방법을 적용하면 된다. cx_Oracle은 다행히 dependencies 없이 1단계에서 끝났고, seaborn은 dependencis 오류가 발생해서 3단계까지 가서 해결했다. 다운 받을 패키지 확인 오프라인PC 환경 체크 1. OS 종류: windows / linux 2. OS 시스템 : 32비트 운영체제 / 64비트 운영체제 3. 파이썬 버전 확인 명령어  python --version 4. OS, 비트, 파이썬 버전 확인하여 알맞은 버전 찾기: 패키지 버전에 따라 파이썬 2.7까지만 지원한다거나 3 이후부터 지원하는 경우가 있기 때문에 무조건 최신으로 설치하면 안되고 내 파이썬 버전(3.9)을 지원하는지 봐야한다. 이건 패키지 공식 홈페이지나 구글링 통해 알아보면 된다. 1. 패키지 단독 설치 온라인PC pypi.org 접속 후 패키지+버전 검색 source distribution 을 다운받으면 내가 빌드(=내 PC 환경에 맞는 기계어로 번역)를 해줘야해서, 위에서 확인한 <오프라인PC> 환경에 맞는 built distribution 을 다운로드 받으면 된다. 오프라인PC ㅇ 패키지(.whl)설치 명령어 :  pip3 install -t C:/<타겟경로> C:/<파일경로>/cx_Oracle-8.3.0-cp39-cp39-win_amd64...

C++ volatile 설명 & 예시

이미지
설명 C++에서 volatile은 자료형 한정자다. 하드웨어에 의해서 프로그램 내 값이 변할 수 있다는 말로,  인터럽트 핸들링과 같은 다른 비동기 프로세스에서 자료의 메모리에 접근할 수 있다. 또한, 어디서 쓰일지 모르기 때문에 컴파일러가 해당 객체 최적화를 하지않는다. (일부러 피할 때 쓸 수 있다) 예시 const 는 상수니까 최적화를 해서 i == 100 인지 루프에서 비교하지 않게끔 최적화 됨. while(true) 처럼 최적화 const지만 volatile이 있으므로 최적화 하지 않고 루프마다 i == 100인지 비교함

Git 레파지토리 생성 및 C# 프로젝트 생성(데이터분석-2편)

이미지
소스 버전관리는 왜? 소스 버전 관리(SVM)는 기본적으로 팀으로서 작업하기 위한 이유도 있고, 안전하게 소스를 작성할 수 있게 도와준다. 혼자 만드는데 처음부터 버전관리를 시작하는 이유는, IDE를 쓰면 불편하거나 어려운 소스 관리를 알아서 해주기 때문에 편하지만 무슨 일이 내부에서 일어난건지 알기가 어렵다. 그래서 프로젝트 초반부터 빈 레파지토리를 만들고 작업때마다, 뒤에서 뭐가 바뀌는지 추적하기 위해 Git 을 쓰려고 한다. github가 대세기도 하고 편리해서 github desktop을 쓰려고 한다. 깃허브 데스크탑(GitHub Desktop) 설치 깃허브 회원가입이 되어있어야 한다. 회원가입 : https://github.com 다운로드 :  https://desktop.github.com/ 다운로드 후 설치   새 깃허브 레파지토리 만들기 로그인 파일-옵션 accounts-sign in 브라우저로 로그인 진행할 수 있다. 로컬 레파지토리 생성 웹에서 만들고 로컬PC에 클론해와도 되고, 로컬PC에 만들고 웹에다가 publish 해도 된다. 여기서는 로컬에 먼저 만들려고 한다. 파일-New repository 새 레파지토리 생성창 이름, 설명, 로컬 레파지토리 경로 설정 후 생성버튼 누른다. 로컬 레파지토리 원격 레파지토리에 동기화 github.com 서버에 있는 내 원격 레파지토리에 publish(동기화) Publish repository 내 github.com에 publish publish가 완료되면 내 깃허브 서버에도 연결된 레파지토리가 생긴다. private로 해도 되는데,  무료사용자는  private 용량, 변경수 등 제한이 있다. publish 후 웹 레파지토리 새 프로젝트 만들기 .NET Framework 를 사용한 windows form application 만들기 프레임워크는  최신인 4.8 선택 경로는 내 로컬 레파지토리 만든 경로 폼 어플리케이션 생성 후 초기 모습 여기를 시작점으로 ...

키움증권 api 준비하기 (데이터분석-1편)

이미지
 VIsual Studio 설치 지금은 2022 버전이 최신인데, 키움증권 api 질문에 보면 2019까지 지원한다고 나와있다. 키움증권 제공 api는 32비트 액티브x(COM 어플리케이션) 이기 때문에 32비트 빌드 를 지원하는 visual studio 2019 를 설치해야한다. 구버전 다운로드 : https://visualstudio.microsoft.com/ko/vs/older-downloads/ 2019 확장해서 다운로드를 누른다. 마이크로소프트 계정으로 로그인해야지 다운받을 수 있다. 컴퓨터 운영체제에 맞는 프로그램을 설치. 요즘은 대부분 64비트 컴퓨터니까 x64 선택해서 다운 받는다. 윈도우 설정 -> 시스템 -> 정보 에서 몇 비트 운영체제가 설치되었는지 확인할 수 있다. 다운 받은 visual studio installer 를 실행하면 뭐 설치할지 물어보는데,  나는 [.net 데스크톱 개발도구]만 있으면 된다. 필요한 게 더 있으면 알아서 설치. 키움증권 api 사용신청 및 설치 계좌개설과 회원가입이 되어있으면 키움증권 api 사용신청할 수 있다. 키움증권 홈페이지에서 전체메뉴-> 고객서비스->다운로드->open api+ 메뉴로 이동 키움증권 홈페이지 :  https://www.kiwoom.com/   키움증권에서 화면에 사용절차 설명을 잘 해놨다. 설명을 따라 버튼을 누르면 신청/다운로드할 수 있다. 1단계 api 사용신청 2단계 api 모듈(Open API) 다운로드 다운로드 받은걸 설치하면 기본 설치 경로 C:\OpenAPI (아마 윈도우 설치한 드라이브) 에 설치된다. koa스튜디오 다운로드 koa 스튜디오에 api 사용법이 나와있다. 또 트랜잭션(transaction)* 테스트용으로도 쓸 수 있다.  *주가요청, 주문신청 등을 트랜잭션이라 부른다 KOA Studio 다운로드 파일 압축 풀고 나서 OpenAPI 설치 경로(기본 C:\OpenAPI)에 파일을 옮겨야 ...

2023년1월5일 경제뉴스 정리

1. 달러 인덱스 하락 미국내에서도 기준금리 인상으로 인한 경제 침체 징후가 보이니 금리 인상에 속도 조절을 할거라고 예상하고 있다. 이에 따라 달러 가치가 떨어졌다. 기본 금리가 높으면 투자(자본) 수익이 좋으니 다들 달러를 가지려고 한다. 급격하게 올리다보니 공포감이 강해져서도 있고 경제 또는 전쟁 등 위기에 대한 불안을 느낄때도 달러 가치가 올라간다. <추가> 2022년 12월 FOMC 점도표상 2023년 타겟(mipoint of target range, dot plot) 5.0~5.25 10명 5.25~5.5 5명 2022년 9월 FOMC 점도표상 2023년 타겟(midpoint of target range of fund rate 4.25~4.5 5명 4.5~4.75 5명 4.75~5.0 5명 속도 조절이란게, 2022년 한해만에 0~0.25 -> 4.25~4.5 4%만큼 올랐지만 2023년은 1년간 1%내로 오를거라는 뜻인거같고 9월보다는 12월에 더 상향 조정하긴했다. 2. 물가 잡기 위한 노력과 연쇄 가격 상승, 그리고 정부의 민생 안정을 위한 지원 금리 인상으로 돈이 풀리지는 않으니 소비는 줄어들겠지만 2020년말 640 소맥(곡물)이 2021년말부터 2022년을 지나 현재까지 7백 후반을 넘나들고 있고 유가 지표중 하나인 WTI도 48이었던게 지금은 80을 넘나들고 있다. 넘치는 수요로 인한 연쇄가 이제 임금을 거쳐 각종 생활용품까지 넘어오는 상황인 것 같다. 정부의 재정 지원은 GDP랑 비교하면 아주 미미하다고 하니 재정정책을 펼치는건 좋은데, 어차피 대형마트에서 구매할테니 중소기업은 여전히 힘들지 않을까.. 3. 대출이자 부담으로 월세거래 증가 4. 강남, 용산, 서초 빼고 규제 지역 해제 하지만 투자수요만으로 집값 하락을 막기는 어려워 실수요가 필요. 실수요에는 금리가 중요 LTV 70% 로 늘어나고, 2주택자도 담보대출 가능, 분양가 상한제, 전매 제한, 실거주 의무 규제도 풀린다. 5. 장단기 금리 역전 완화 장기 금리...

2023년1월4일 경제뉴스정리

달러 약세로 인한 외환보유액 증가했다. 외화 예수금 글로벌 성장둔화, 높은 물가, 4분기 실적 부족으로 장중 코스피 2200 붕괴됐다. 우리나라에서 상반기에 예산 절반 이상 투입하여 경기 방어에 사용할 예정. 공공 직접일자리 90% 를 상반기 채용. 부동산 프로젝트 파이낸싱(PF) 부실 위험으로 건설 업종 신용등급 하향 조정 부동산 프로젝트 파이낸싱은 부동산 사업 자금을 금융기관으로부터 조달하는 것인데, 그 동안 낮은 이자율로 프로젝트 파이낸싱 대출이 많았다. 고금리, 원자재 가격, 인기하락 등으로 대출 상환이 어려워지면 대출 이자 부담이 커짐 -> 신용이 낮아지면 대출이자가 또 늘고, 체질개선이 되지 않으면 힘든 상황이 올듯 에너지 가격 급등으로 무역 적자 증가 경기 침체의 초기 증상으로 제조업 경기 지표 (PMI) 가 낮아진 것을 볼 수 있다. 베트남, 대만 같은 제조업 위주의 국가들에서 PMI 가 4개월 연속으로 하락했다

스피커 지지직 소리 전기 잡음 해결(JBL 305P, 그라운드 루프, USB 접지 절연)

이미지
멀쩡하다가 마우스/스크롤 지지직 잡음 프리소너스 eris 3.5 bt 를 원룸에서 사용중인데, 가끔 인터넷 브라우징 하면서 스크롤 내리면, 딱 내릴 때만 지지지직 소리가 나는 증상이 있었다. 검색을 해보니 드라이버간 충돌 또는 오류(아마도 그래픽 드라이버)가 날 때 이런 소리가 난다고 한다. 껐다 켜면 되고, 최신 드라이버로 자주 업데이트 또는 정상이었던 드라이버로 롤백하면 된다. 지속적인 지지직 잡음 시골집에서 노래 크게 틀어 놓으려고 JBL 305P MK2 모니터 스피커를 샀다. 사이즈가 큰 만큼 몸이 울릴 정도의 출력을 내주고, 소리도 여태 구입해 본 저렴한 스피커랑은 차원이 달랐다. 근데, 컴퓨터랑 연결만 하면 가만히 있어도 지지직 전기 간섭 같은 소리가 난다. 너무 소리가 커서 도저히 컴퓨터 책상 위에 올려둘 수준이 아니었다. 후기를 보니 약간의 히싱 사운드가 있는데 전혀 거슬릴 정도가 아니라고 별점이 거의 만점인 스피커였다. 이게 히싱 사운드인가 싶어 유튜브에 스피커 히싱 사운드를 검색해봤다. 히싱 사운드는 "쉬이이잉" 바람 새는 소리에 가깝고, 액티브 스피커는 아무리 비싸도 있을수밖에 없다고 한다. 스피커 문제인가? 전원만 연결한 상태에선 정상적인 히싱 사운드만 나며 전혀 거슬릴 정도가 아니었다. 다른 테스트로 외부전원과 완전 차단된 노트북이랑 연결하니 전원만 연결한 것처럼 너무 조용했다. 드라이버 문제? 드라이버 문제였다면 스피기존에 쓰던 스피커는 전혀 지지직 소리가 나지 않는다. 얘도 액티브다 보니 히싱 사운드는 있는데 전기 잡음 소리랑은 차원이 다르다. 컴퓨터 내부에서 전기 부품 간섭 스피커를 노트북에 연결하니 멀쩡해서 이 경우를 엄청 의심했다. 하지만 DAC로 사운드 관련 장치는 외부로 빼둔 상태였고 마찬가지로 기존에 쓰던 스피커는 멀쩡하다. 요즘 컴퓨터는 메인보드도 좋아서 이런 증상이 있을 확률이 낮기도 하다. 접지(그라운드 루프)? 얘가 맞았다. 국내외 오디오 문의글을 좀 검색하다 보면 그라운드 루프 해결 방법들이 있었...