프로그래밍/위도우 시스템 (10) 썸네일형 리스트형 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의 핸들 값을 반환받는다 그.. Win System Programming load eax, 0x0100 이런 명령어는 100이라는 주소가 너무 커서 피연산자 8bit로 표현이 불가하다. 그래서 다른 방법을 사용하는데 mul r0, 4, 4 mul r1, 4, 4 mul r2, r0, r1 //256(0x100) store r2, 0x30(메모리 주소) load r1, [0x30] //indirect 모드로 0x30 주소에 있는 값의 주소로 가서(0x100) 값을 가져온다. 프로세스 란 단지 메모리에 로딩된 실행중인 프로그램이 완벽한 설명은 아니며 프로세스 가상메모리 + 레지스터 가 더 좋은 설명이다. 프로세스에 종속적인 레지스터가 있기 때문인데 A라는 프로세스가 실행중인데 B라는 프로세스가 실행 되어야 한다면 A프로세스에서 사용중이던 레지스터들을 다른 메모리에 저장후 다시 B.. Win System Programming ALU에서 사칙연산 명령어를 해석할때는 피연산자에 메모리주소가 바로올수 없고 레지스터 가 와야한다. 이유는 메모리에 접근하기위해서는 항상 레지스터를 거치기 때문이다. Load(메모리에서 레지스터로 로드), Store(레지스터에서 메모리로 저장) 명령어는 피연산자에 주소가 올수 있다. ex) store eax, 0x20(메모리 주소) Win System Programming win32 vs win64 32bit 컴퓨터는 bus, cpu가 한번에 처리할수 있는 명령어의 비트수가 32bit이다(64bit 컴퓨터는 64bit이다). 32bit컴퓨터에서 64bit의 포인터 주소를 같는다면 버스에서 주소를 보내는데 2번의 작업을 하므로 비효율적이다. 가상메모리에 대해서 알고싶다... 나중에 가면 배우는 듯 하다. 예스! 윈도우도 예외처리가 있나보다. 에러나면 전역구역에 에러코드가 저장된다. 바로 GetLastError( )를 호출하면 코드가 리턴된다. 이전 1 2 다음 목록 더보기