본문 바로가기

프로그래밍

(13)
Win32 api#2 핸들에 대한 이해 핸들(hWnd)이란 물리적으로는 대부분 32bit 정수값이다. 핸들은 운영체제가 발급해주며 사용자는 변수에 대입받아 사용하고 버리면 된다. 운영체제는 새로만들어진 윈도우창, 논리적 펜, 브러시, 파일, 메모리 번지등에 번호를 붙여 핸들로 사용한다. 이러한 이유는 대상끼리 구분을 위해서 문자열처리하는 것보다는 정수형이 처리 속도가 빠르기 때문이다.
Win32 api#1 변수명명법 http://www.soen.kr/lecture/win32api/ApiLec.htm 참고중인 사이트
Win32 API_1 https://www.youtube.com/watch?v=cBDAbWo1sWo&list=PLOKPEzlY4JKTFx1udqQRdYb1ydob9V5u3&index=2 참고한 온라인 강의 Win32 API 프로그래밍이란 : 윈도우 운영체제가 제공하는 함수를 이용한 C언어 기반의 프로그래밍 즉 운영체제와 관련된 프로그래밍을 한다는 것을 의미한다. 운영체제에서 제공하는 함수를 사용하며 운영체제 자원도 사용하고 반환한다. 운영체제에서 메시지(정수값)를 프로그램으로 전달한다 WinMain( ) : 응용 프로그램 윈도우 생성 WinProc( ) : 메시지 처리(WinMain 안에서 실행되며 콜백함수(누군가에 의해서 호출되는 함수)이다, 운영체제가 하드웨어 정보를 여기로 보낸다 즉 만든다.)
Win System Programming 일반 OS 와 리얼타임 OS 의 차이는 스케쥴러의 타임 슬라이스에 있다. 타임슬라이스는 몇 클럭수인가를 나타내어 컴퓨터가 시간을 인식할수 있도록 해준다. 일반OS는 타임슬라이스가 길고 리얼타임 OS는 짧다. 그래서 반응이 시작이 빠르다고 할수 있는 것이다. 타임슬라이스: 프로세스의 최소 실행단위 선점형 OS는 프로세스가 실행중이더라도 높은 우선순위의 프로세스가 오면 비켜주는 것 이고 비선점형 OS는 프로세스가 실행중이면 우선순위의 상관없이 계속 실행되는 것을 말한다. 종료하거나 양보하려면 프로그래머가 따로 종료 코드를 넣어주어야 한다. 스케쥴링 알고리즘 : 우선순위가 0 ~ 9까지 있다고 할때 우선순위 높은 것들(프로세스들)이 완료 될 때까지 실행되어야 하고 종료되면 그 이전순위가 실행된다 하지만 실제로..
Win System Programming 핸들테이블의 정보는 핸들번호, 커널오브젝트 주소, 상속여부가 있다. 부모 프로세스는 자식 프로세스에게 핸들정보를 상속 할 수 있다. SECURITY_ATTRIBUTE sa; // 보안 관리자 보통 NULL을 넣었었다. sa.nLength = sizeof(sa); sa.IpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; //핸들의 상속여부 YES 된다. ~~~ CreateMailslot(~~,~~,~~,&sa); ~~~. GetCurrentProcess( )함수는 자신의 프로세스 핸들정보를 리턴한다 하지만 그 리턴값은 가짜인데 왜냐 핸들테이블에 실제 저장되어 있지 않기 때문이다. 만약 자식이 부모의 핸들정보를 받고 싶다면 부모가 상속하면 되지만 부모테이블에도 ..
Win System Programming 프로세스 별로 독립적인 메모리 공간이 있다. 자신만의 고유한 정보를 저장/호출 하기 위한 것이 환경변수이다. key 와 value로 구성 되어 있으며 환변변수 설정하는 함수는 아래와 같다. SetEnvironmentVariable("aaa","~~~"); //aaa key, ~~~ value 환경변수 불러오는 함수는 아래와 같다. GetEnvironmentVariable("kkk",~~~, ) //kkk key , ~~~변수에 키에 해당하는 값이 리턴 된다. CreateProcess( NULL, _T("EnvChild"), NULL,NULL,FLASE, CREATE_NET_CONSOLE|CREATE_UNICODE_ENVIRONMENT, NULL, //부모 프로세스의 환경 변수 등록 NULL, &si, &..
Win System Programming IPC란 개념을 예전에 소켓프로그래밍 수업때 배운 기억이 있다. 프로세스간 통신을 위한건데 양방향이 아니라 단방향이다. 쉽게 생각하면 된다. CreateFile이라는 함수를 통해서 파일을 만들어 통신하는 방식이다. receiver쪽에서는 createfile 함수와 read 함수를 sender 쪽에서는 createfile 함수와 write 함수를 사용하는 것이다. ex) HANDLE hMailslot; hMailslot = CreateFile( ); WriteFile( hMailslot message ); closehandle(hMailslot); 요약한 소스코드인데 핸들 타입의 변수를 선언후 파일생성 함수를 호출하면 파일의 핸들값이 반환된다. 파일을 생성할때 핸들값을 파라미터로 준다. 그리고 uc를 줄여..
Win System Programming 커널 = 운영체제에서 꼭 필요한 부분 프로세스를 생성하면 프로세스 정보(우선순위 등)를 가지고 있는 프로세스 커널 오브젝트를 생성한다. 직접 접근할 수는 없고 프로세스, 파일, 파이프 등등을 만들 때마다 커널 각각의 커널 오브젝트가 생성되는데. 각각에 순서에 맞게 번호를 붙인다. 그것을 핸들이라고 한다(자료형은 Handle이지만 int형이다.) 핸들을 통해 간접적으로 커널 오브젝트에 접근할 수 있다. sleep( ) 함수는 프로세스를 blocked 상태로 보낸다. 프로세스마다 핸들 테이블이 있는데 핸들테이블의 핸들 값은 프로세스 or 파일 종속 적이어서 같은 커널 오브젝트를 가리키고 있어도 프로세스마다 핸들 값이 다를 수 있다. 프로세스 A 가 프로세스 B를 생성할 때 A는 B의 핸들 값을 반환받는다 그..