1998/10/23 조경민 Inside Secrets Visual C++ 5.0 P900
제8장 프로세스와 멀티 스레드 프로그래밍

  윈도 95 메모리 맵


0xFFFF FFFF                           <-- 4GB
윈도95운영체제 가상 장치 드라이버 VxD      |
0xC000 0000

0xBFFF FFFF
윈32 공유 DLLs
메모리 맵 파일
0x8000 0000

0x7FFF FFFF                           <--- 2GB
일반 애플리케이션                           |
0x0040 0000

0x003F FFFF                           <--- 4MB
16비트 윈도3.1과 호환성                     |
0x0000 1000

0x0000 0FFF
Protected, NULL 포인터 지정
16비트 윈도3.1과 호환성
0x0000 0000                            ---- 0

한 애플리케이션이 메모리 블럭에 할당되면 이를 인스턴스 되었다고

하며 실행중인 인스턴스는 프로세스가 된다. 이 애플리케이션은

4GB까지 메모리 접근이 가능하며 각 애플리케이션 마다 가상 4GB가

주어진다. 그러나 윈95에서는 0xC000 0000 부터 0xFFFF FFFF까지는

운영체제에 예약 되었기 때문에 쓸수가 없다.  그러나 윈95의 단점은

이 메모리 공간을 쓰기/읽기가 가능해서 다운이 되는 주 요인이 된다.

NT에서는 방어적인 메모리 구조를 갖고 있기 때문에 이 문제는

발생하지 않는다.


윈 3.1 시분할 cpu 제어 ( time slice )비선점형 멀티태스킹, 협력형

멀티 테스킹 으로 시스템이 강제로 제어권을 현재 실행  애플리케이션

에서 빼앗아 다른 태스크로 전환해 버린다.


스레드 = 작업 경로 , 프로세스의 종속적 한 프로세스의 모든 자원과

모든 데이타 공간을 함께 이용한다.



프로세스 제어

BOOL CreateProcess(LPCSTR lpszImageName, // 실행파일 프로그램이름
LPCSTR lpszCommandLine, //실행 인자
LPSECURITY_ATTRIBUTES lpsaProcess, //프로세스 보호 속성 구조체
LPSECURITY_ATTRIBUTES lpsaThread, //  스레드 호 속성
BOOL bInhreitHandles, //상속 보호 플래그 핸들
DWORD dwCreate, //ㅍ프로세스 생성 플래그
LPVOID lpvEnvironment, //새로운 환경 블록
LPCSTR lpszCurDir, // 현재 작업 디렉토리
LPSTARTUPINFO lpsiStartInfo, //부모 윈도우 정보
LPPROCESS_INFORMATION lppiProcInfo); //프로세스 정보

실행파일 프로그램이름을 찾는 순서
응용 프로그램이 로드된 디렉토리
현재 디렉토리
윈도우 시스템 디렉토리 윈도우 NT 3.51이상에서는 32윈도우
시스템디렉토리를 찾은 후에 즉시 16비트 윈도우 시스템 디렉토리 검색
GetWindowsDirectory로 얻은 윈도우 디렉토리
PATH 환경 변수에 지정된 디렉토리를 순서대로 검색

UINT ExitProcess(UINT uExitCode);
프로세스가 소유한 모든 스레드를 종료하고 관련 DLL 종료 프로세스 종료

+ Recent posts