프로그래밍/Desktop App9 [WinForm] BLE 통신 예제 데스크탑 환경 테스트앱(C#)과 TOOKTOOk 기기(회사 IOT기기 이름) 연동 테스트 작업을 진행했습니다. PC에 블루투스 동글을 연결하여 IOT기기와 통신합니다. 프로젝트 참조 패키지 1. C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.22621.0\Windows.winmd 2. Nuget 패키지 System.Runtime.WindowsRuntime 설치 유의사항) 기기와 PC간 거리를 가까이 하지 않으면 스캔/통신 처리가 정상적이지 않았습니다. BLE 통신 요약 1. BluetoothLEAdvertisementWatcher를 선언하고 BLE 통신 콜백을 등록합니다. watcher.Received += OnAdvertisementReceive.. 2023. 12. 11. [시스템 프로그래밍] 가상 메모리와 힙 가상 메모리 프로그램에게 할당된 데이터는 메인 메모리의 크기를 넘을 수 있는데, 어떻게 이것이 가능할까? 프로그램은 할당된 메모리를 전부 사용하지 않을 확률이 높다. 이런 컨셉으로 나오는 것이 가상 메모리 시스템이다. MMU(Memory Management Unit) CPU가 마치 프로세스에 할당된 메모리가 실제로 존재하는 것처럼 관리해준다. CPU는 메모리를 요청할 때 직접 메모리에 접근하지 않고 MMU를 통해서 요청한다. 페이지 프레임은 실제 메모리 블록을 의미하고 페이지는 가상 메모리 블록을 의미한다. 가상 메모리는 물리 메모리와 매핑이 되어 있다. MMU는 CPU의 요청에 따라 매핑되는 페이지를 계산한다. 근데 만약에 물리 메모리에 해당 페이지 정보가 로드된 상태가 아니라면? 하드디스크를 메인 메.. 2023. 12. 4. [시스템 프로그래밍] 쓰레드 동기화와 캐시 알고리즘 쓰레드의 동시접근 이슈 일반적으로 실행중인 쓰레드의 변경이 라인 단위로 이뤄진다고 생각하지만, 연산을 처리하는 도중에 컨텍스트 스위칭이 일어날 수 있다. 따라서 쓰레드가 같은 메모리 영역을 동시에 접근하는 것은 문제를 일으킬 가능성이 높다. 메모리 접근의 동기화 - 유저 모드 동기화 동기화가 진행될 때, 커널 코드가 실행되지 않는 방식이다. 커널 모드의 전환이 일어나지 않으므로 성능상의 이점이 있다. 다만 그 만큼 기능상의 제한도 존재한다. - 커널 모드 동기화 동기화와 관련된 처리에서 커널 모드로의 전환이 이루어져서 성능 저하로 이어진다. 그러나 유저 모드 동기화에서 제공하지 못하는 기능을 제공 받는다. - 크리티컬 섹션 한 순간에 하나의 쓰레드만 접근이 요구되는 코드 블럭을 의미한다. - 유저모드 동.. 2023. 12. 3. [시스템 프로그래밍] 스케줄링과 쓰레드 비선점형 OS 현재 실행중인 프로세스보다 높은 우선순위의 프로세스가 등장한다고 해서 실행의 대상을 바로 변경하지 않는다. 실행중인 프로세스가 명시적으로 CPU를 양보할 때까지, 혹은 I/O작업 등으로 블로킹 상태에 놓일 때까지 기다려야 한다. 선점형 OS 현재 실행 중인 프로세스보다 우선순위가 높은 프로세스가 등장하면 스케쥴러에 의해 실행 순서가 조정된다. 비선점형 OS에 비해 스케쥴러가 하는 일이 더 많은 것도 특징이다. 라운드 로빈 스케쥴링 알고리즘 같은 우선순위 프로세스들간 형평성 유지를 위해, 정해진 시간 간격 만큼 실행하고 다른 프로세스에게 CPU할당을 넘기는 방식으로 동작한다. 스케줄링 알고리즘에 의해 스케줄링이 진행되는 시점 1. 매 타일 슬라이스마다 스케줄러 동작 정해진 시간이 지나면 다른.. 2023. 12. 3. [시스템 프로그래밍] 프로세스와 컨텍스트 스위칭 64비트와 32비트 CPU가 입출력 버스를 통해 한번에 전송 및 수신할 수 있는 데이터의 크기가 32비트라면 32비트 컴퓨터, 64비트라면 64비트 컴퓨터가 된다. 표현할 수 있는 주소의 범위가 많다는 것은 그 만큼 많은 메모리를 관리할 수 있다는 의미가 된다. 32비트 컴퓨터는 4GB의 메모리를 다룰 수 있다. 32비트 컴퓨터에서 주소값을 64비트로 사용한다는 것은, 주소값에 대한 연산을 두 번으로 나눠서 처리하게 되므로 성능 저하가 일어난다. 따라서 64비트 컴퓨터에서는 주소값이 64비트(8바이트)를 의미하고 32비트 컴퓨터에서는 주소값이 4바이트이다. direct 모드와 indirect 모드 레지스터에 저장할 데이터가 존재하는 주소에 직접 접근하는 방식을 direct 모드이다. indirect모드는.. 2023. 12. 3. [시스템 프로그래밍] 컴퓨터 구조 윈도우즈 시스템 프로그래밍이란? 윈도우즈 운영체제 기반의 컴퓨터에게 일을 시키는 프로그램을 개발하는 것 CPU(Central Processing Unit) 중앙처리장치, 프로그램의 연산을 담당한다. 메인 메모리(Main memory) 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역이다. 입출력 버스(Input/Output Bus) 컴퓨터를 구성하는 요소 사이에서 데이터를 주고 받는 통로 역할을 한다. CPU에 대한 이해 ALU(Arithmetic Logic Unit) CPU 내에 존재하는 블록으로 덧셈이나 뺄셈과 같은 산술 연산 및 논리 연산을 처리한다. 컨트롤 유닛(Control Unit) 명령어에 대한 정보를 해석한다. 레지스터 세트(Register Set) 데이터를 저장하거나 데이터의 주소를.. 2023. 12. 3. 응용 프로그램 코드 사인 방법(간단한 조사) 응용 프로그램 코드사인 방법에 대해 조사했다. 인증서를 구매하여 pfx 파일을 받은 이후에 SignTool을 이용하여 응용 프로그램 서명을 진행할 수 있다. 다음 예시처럼 파일을 디지털 서명과 타임스탬프를 지정하는 명령어를 제공한다. signtool sign /f MyCert.pfx /t http://timestamp.digicert.com /fd SHA256 MyFile.exe https://learn.microsoft.com/ko-kr/windows/win32/seccrypto/signtool?redirectedfrom=MSDN 다음은 코드 인증서 업체에서 조사한 가격 정보(MSDN 오피셜 4곳) 1. DigiCert 코드 서명 인증서 기관 연 2000개 - 1년 699 USD - 2년 574 USD.. 2023. 11. 19. [C#] ClickOnce, Windows Installer, InstallShield 최근에 WPF 앱을 배포하는 방법을 알아보면서 ClickOnce와 InstallShield에 대해 검토하게 되었다. 데스크탑앱 배포 방식(엄청 많다;;) https://learn.microsoft.com/ko-kr/visualstudio/deployment/deploying-applications-services-and-components?view=vs-2022 ClickOnce ClickOnce를 쓰면 특정 웹 페이지에 파일을 배포하는 방식이나, 디스크에 설치 파일을 배포할 수 있다. 파일 서버를 연동하여 웹에 설치할 수 있다고 한다. 배포하면 application 파일과 setup.exe 파일이 나오는데 하나의 파일로 만드는 것은 어렵다는 의견이 많다. 스크립트를 작성하여 하나로 묶고, 압축을 푸는 .. 2023. 11. 14. [C#] WinForm VS WPF 데스트탑 앱 개발을 해야 하는 상황에서 winform과 wpf 사이에서 하나를 골라야 했다. Flutter나 Electron도 고려하긴 했지만 회사에서 C# 사용을 장려하는 분위기가 있어 제외했다. 윈폼은 컨트롤을 배치하면 컨트롤 생성 코드가 자동으로 생성된다. WPF 는 XML 형태의 XAML 문서에 생성된다. WPF 도 XAML 없이 코드만으로 생성 가능. 윈폼은 응용프로그램으로만 실행되지만 WPF 는 응용프로그램 뿐만 아니라 웹브라우저에서도 실행 가능. 윈폼은 윈도우 api 를 이용하여 draw 하는것이고 WPF 는 윈도우 api 사용을 최소화하고 직접 draw 한다. 윈폼은 애니메이션 구현이 어렵고 기본적으로 동기 방식으로 동작한다. WPF는 DirectX 렌더링 방식이기 때문에 연산량이 많고(백.. 2023. 11. 13. 이전 1 다음