반응형

Windows_ 50

Windows :: 윈도우즈 스레드(thread) 프로그래밍

/* * http://sosal.kr/ * made by so_Sal */ 동시에 원하는 일을 하기 위해서, 다중 프로세스를 이용하였습니다. (다중프로세스와 스케쥴러에 대한 내용은 링크를 참조하세요 :: LINK_) 다중프로세스는 프로세스간의 자원을 공유하지 않고, IPC라는 방법을 사용하여 통신을 해야 하기 때문에, 다중 프로세스 프로그래밍에서는 메모리 낭비, 컨텍스트 스위칭에 의한 속도 저하 등 단점이 많습니다. 위 문제점을 극복하기 위해서 스레드 기법을 사용하였습니다. 한 프로세스 내에 스택을 여러개 두어, IPC처럼 메모리 공유가 필요한 부분은 공유하는 구조를 만드는 것입니다. 한 프로세스 안에서 스택을 여러개 생성하여, 메모리 흐름을 여러개 만들어서 다중프로세스처럼 한 프로세스가 한번에 다양한 ..

Windows :: 프로세스들을 실행하는 함수들

/* * http://sosal.kr/ * made by so_Sal */ 이번장에서 살펴볼 함수들 1.WinExec() CreateProcess() 2.ShellExecute() ShellExecuteEx() ================= 1. WinExec(), CreateProcess() ================= 아래는 WinExec() 와 CreateProcess()를 살펴보겠습니다. WinExec() 함수는 Windows 3.x 버전에서 새로운 프로세스 (프로그램)을 실행시키는 유일한 함수였습니다. 상당히 간결하게 사용할 수 있는 함수입니다. WinExec의 문제점은? :: 프로그램이 실행되고 나면 이전의 프로세스가 새로이 생성된 프로세스에게 간섭할 수 없다. (접근 불가) (프로그램이..

Windows :: Named Pipe를 이용한 프로세스간 통신

/* * http://sosal.kr/ * made by so_Sal */ 앞서 Windows 09. Pipe를 이용한 프로세스간 통신 / 포스트에서 파이프에 대한 내용을 알아보았습니다. 일반 Pipe는 양방향 통신을 사용하며, 핸들을 기반으로 통신합니다. 따라서 핸들을 주고받을 수 있는 프로세스들 (흔히 부모-자식)처럼 특별한 관계가 있는 프로세스들끼리만이 통신할 수 있는 기법이었습니다. 하지만 Named Pipe는 파이프의 이름만 알고있다면 어떠한 관계에 있는 프로세스라도 통신이 가능하게 됩니다. 그럼 Named Pipe의 생성과정에 사용되는 함수들은? // 서버가 하는일 // CreateNamedPipe() -> ConnectNamedPipe(). CreateNamedPipe를 이용해서 파이프를 생..

Windows :: 환경변수와 환경변수 상속

/* * http://sosal.kr/ * made by so_Sal */ 환경변수 :: 시스템의 속성을 기록하고 있는 변수. 변수의 이름과 의미가 대부분 미리 정해져 있고, 사용자가 의도적으로 변경, 생성 가능하다. 유닉스, 리눅스 운영체제에서는 환경변수를 설정하면 모든 프로세스가 동시에 접근 가능합니다. 따라서 '상속' 과정에 상관 없이, 환경변수라는 공유 메모리 영역을 통해 서로 정보를 주고 받을 수 있습니다. (사실 환경변수로 정보를 주고받게 끔 프로그래밍 하는건 흔하지 않음) 윈도우에서는 시스템 환경변수를 제외한 (Path, OS,TMP 등 컴퓨터 환경설정 고급탭에서 설정가능한 환경변수) 환경변수는 각 프로세스마다 테이블이 따로 주어져 공유하지 않게끔 되어있습니다. 환경변수로 정보를 주고받는 과..

Windows :: 윈도우 핸들찾기, pid를 이용하여 핸들 가져오기

/* * http://sosal.kr/ * made by so_Sal */ 음.. 이번 포스트에서는 음.. 사실 06 커널오브젝트, 핸들내용에서 넣지못한 글을 간단히 정리해서 올리려고 합니다. :: struct PROCESS_INFORMATION :: FindWindow() :: FindWindowEx() :: OpenProcess() :: CloseHandle() 이것들을.. 살펴보고자 합니다 ^-^ PROCESS_INFORMATION 구조체를 선언하여 CreateProcess 함수의 인자로 쓰기는 해보았는데, 가져와서 이용을 한적이 없어요. 한번 살펴보죠. 흠. typedef struct _PROCESS_INFORMATION { HANDLE hprocess; //프로세스의 핸들 HANDLE hproc..

Windows :: 커널 오브젝트, 핸들 object Handle

/* * http://sosal.kr/ * made by so_Sal */ 커널 오브젝트 :: 커널에 의해 관리되는 리소스 정보를 담고 있는 Data block. 커널? :: 모든 운영체제들이 가지고 있는 핵심이 되는 부분. 우리가 프로세스 실행을 명령하면, 그 일을 수행하는것은 커널이다. //사실 운영체제와 커널은 초기에 같은의미로 쓰였지만, 운영체제라는 단어의 의미가 //점점더 확장되면서 (상업적이라던지, 사용자의 편의를 위한 부분 등..) 하는일이 //더 많아지면서 다른 의미로 쓰이지만, 사실 운영체제를 공부한다고 한다면 //커널을 공부한다고 생각하시면 되겠습니다. 다양한 링크리스트나 트리같은 자료구조의 경우에는 프로그래머가 정보들을 직접 다루고 있다고 할 수 있습니다. 하지만 프로그래머가 프로세스..

Windows :: 프로세스와 스케쥴러 동작

/* * http://sosal.kr/ * made by so_Sal */ 프로그래밍을 직접 해보기에 앞서서 프로세스와 스케쥴러에 대해서 공부하겠습니다. 프로세스란? :: 메인 메로리로 이동하여 실행중인 프로그램 프로세스의 범위 메모리구조 + 레지스터 set 프로세스 별 독립적인 대상은 프로세스의 범주에 포함시킬 수 있다. 램보다 더 큰 공간을 할당받았다고 가정하였을때, 메인메모리에 다 들어갈 수 없으므로 하드디스크까지 그 영역을 확장시키게 됩니다. (Virtual Memory 사용) 메인메모리 뿐만 아니라 더 넓은 범위까지 포함합니다. 프로세스의 실행 프로그램을 실행시킨다는것에서 CPU를 가장 먼저 떠올리는데, 이는 ALU가 있기 때문이죠. (기본 연산장치) 이보다 더 중요한것은 register set..

Windows 자료형과 MBCS와 WBCS 호환

/* * http://sosal.kr/ * made by so_Sal */ 모든 프로그램이 UNICODE 가 아니기 때문에 기존에 개발된 프로그램 호환성, UNICODE를 지원하지 못하는 운영체제 등 100% 유니코드로만 프로그램을 동작하도록 구현하지 않습니다. 그렇다면, Software를 개발할때 MBCS와 WBCS 2개 모두 개발하게 된다면 유지, 보수에 어려움이 2배가 되겠습니다. 그래서 MBCS, WBCS 모두 호환하게 되는 프로그램을 구현하는것으로 결론에 도달하게 되는데, 그래서 Windows에는 이를 해결시켜주는 메크로가 존재합니다. #include에서 정의되어 있는 Windows 스타일의 자료형을 살펴보죠. (WinString.cpp 자료 참조) typedef char CHAR; typede..

Windows :: 문자셋 종류, MBCS, WBCS

/* * http://sosal.kr/ * made by so_Sal */ 문자셋의 종류와 특성 SBCS (Single byte Character set) 문자를 표현하는데 1바이트 사용. - ASCII Code MBCS (Muiti Byte Character Set) 한글은 2바이트, 영문은 1바이트 - Multi : 문자열의 종류에 따라 다른 크기를 가진다. WBCS (Wide Byte Character Set) 문자를 표현하는데 2바이트 사용. - UNICODE 안정적이기 때문에 많이 사용한다. #include #includeint main(void){ char str[] = "ABC한글"; int size = sizeof(str); int len = strlen(str); printf("배열의 크..

LINQ를 이용한 객체 데이터 정렬

/* * http://sosal.kr/ * made by so_Sal */ gene이라는 클레스에는 r1, r2라는 데이터가 있습니다.단순한 배열이었다면 sort 함수로 빠르게 처리하면 되지만 클레스인경우 그렇지 못합니다.따라서 이러한 객체들을 구현하기 쉬운 버블소트정도로 리스트를 새로 만드는 경우가 많은데LINQ를 사용하면 필요한 데이터만 정렬해서 쉽게 뽑을 수 있습니다. 아래 예제는 gene이라는 클레스를 10개 생성하여 r1, r2 2개의 데이터를 무작위로 집어넣고r1을 기준으로 객체들을 정렬하여 r1, r2 모두를 출력하는것입니다. class gene{ public int r1; public int r2; public gene(int i, int j) { r1 = i; r2 = j; }}//r1,..

반응형