728x90

Operating System/Windows 시스템 프로그래밍 - 기본 7

DLL

DLL 기본 이론 정적 / 동적 라이브러리 소개 라이브러리는 쉽게 생각해 함수만 따로 모은 실행 파일 함수라는 표현보다 API 라고 부르는 경우가 많고 특정 환경에 맞춘 종합적인 API 묶음을 SDK라 함 정적 라이브러리는 실행파일과 link시 결합되어 한 실행파일로 합성 동적 라이브러리는 실행 파일과 Link시 합쳐지지 않고 독립적인 실행파일 형태로 생성되며 실행파일이 실행 될 때 "동적으로" 결합 동적lib (dll) = 런타임에 바인딩(링크) 된다. Window API LoadLibrary로 로딩하게된다. 묵시적 로딩 DLL 라이브러리 개발 #include "pch.h" #include __declspec(dllexport) void WINAPI DllTestFunction(int); BOOL AP..

프로세스 관리

프로세스 생성 및 제어 CreateProcess(), OpenProcess() ExitProcess() = 내가 작성한 내프로세스를 종료시킬때 TerminateProcess() = 남의 프로세스를 종료시킬때, 해당 process handle이 있어야함 Get/SetProcessAffinityMask() = process 내부의 모든 스레드가 affinity 영향을 받게됨 EnumProcess GetModuleFileNameEx CreateToolhelp32Snapshot = enumProcess도 현재 돌고있는 process를 열거하지만 이 방법을 주로 사용해야한다. Process32First, Process32Next 실행 중인 프로세스 열거 int main() { _wsetlocale(LC_ALL, ..

메모리 시스템

Windows 시스템 메모리 운용 방법 가상 메모리 시스템 직접 활용 메모리 맵 File -> char * 로 맵핑해서 쓰는것 (비동기 쓰기) 힙 크기가 작은 데이터 (4kb 이하) 할당 시 매우 우용 할당 단위나 페이지 경계를 고려하지 않음 heap data structure 로 관리되고 있는 메모리를 의미 ram 이 16기가 라 하더라도 32 bit cpu processor 에서 process 는 4gb 정도로 최대로 할당 받기 때문에 4개의 program(process) 만 띄우더라도 꽉차게 된다. process가 할당 받은 VMS(virutal memeroy space) 에서 받은 user , 나머지 반은 kernel 이 가지게 되고 이 작업을 OS 나 compiler가 하게 된다. user sp..

Win32 파일 입/출력

디스크, 디렉토리, 파일열거 #include #include #include void LoadDiskInfo(const TCHAR* pszPath) { TCHAR szVolName[MAX_PATH] = { 0 }; TCHAR szFileSys[MAX_PATH] = { 0 }; TCHAR szRoot[MAX_PATH] = { 0 }; DWORD dwSerialNum = 0, dwMaxCompLen = 0, dwSysFlag = 0; memcpy(szRoot, pszPath, sizeof(TCHAR) * 3); ::GetVolumeInformation(szRoot, szVolName, MAX_PATH, &dwSerialNum, &dwMaxCompLen, &dwSysFlag, szFileSys, MAX_PAT..

스레드 동기화

기본 이론 임계구간 코드가 여러 스레드에서 동시에 실행되는 일을 막는것 연산 시점(혹은 종료) 감지 동기화 객체를 이용해 구현 Critical Section , Mutext, Semaphore, Event(Set/Reset 상태) Kernel Object라고 부른다. 스레드 실행 시점 동기화 T2 스레드에서 어떤 특정 시점 A,B에서 Set Event를 해주면 T1 스레드에서 해당 Event 객체를 WaitForSingleObject 에 넣어주면 Set 되는 순간을 알 수 있게 된다. UINT WINAPI ThreadFunction(LPVOID pParam) { HANDLE hEvent = pParam; std::cout

스레드 생성 및 제어

스레드에 대한 기본 이론 Win32 스레드 생성 한 Process는 최소 1개 이상의 Thread를 갖는다. 젤 처음 생성되는 메인스레드 Thread는 개별화된 흐름(문맥) 과 전용스택을 갖는 실행의 단위이다. 모든 Thread는 자신이 속한 Process의 가상 메모리공간을 공유한다. 개별 ID(부호가 없는 정수)와 핸들 -> 제어 용도 Win32 스레드 속성 ID, Handle 우선순위(highest, above normal) 상태 (run, suspended , terminated) 친화력 (Cpu core) 주로 gui 앱 같은곳에서 event loop 방식으로 해결함 -> gui event thread는 오래걸리는 작업들은 새로운 스레드에서 작업을 진행해서 반응성을 높게 해줌 스레드 생성 및 종..

기본 이론

대전제 (feat. 핸들) 결국 내가 작성하는 코드는 실행 주체이며 Process 이다. 주체가 아닌 나머지는 모두 객체 (대상체) 이다. 모든 객체는 주체가 생성/개방 할 수 있으며 사용 후 삭제하거나 닫는다. 자료형을 재정의 한게 굉장히 많다. F12 를 눌러서 windows.h, winnt.h 로 가서 어떤 자료형을 warpping 한것인지 확인하자 모든 객체 (프로세스 포함) 를 식별하는 것은 핸들(Handle) 이며 핸들의 실체는 결국 포인터이다. 핸들에 대한 토큰은 핸들이 식별하는 대상에 관한 정보를 담은 구조체로 이해한다. 보안 객체와 (보안) 기술자 보안 객체에 대한 정보 (객체의 소유자, 그룹, 보호 속성, 감사 정보) 를 의미 객체 소유자 및 그룹 보호속성 (Protection attr..

728x90