C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[181] [강좌] Win32 운영체제 일반 - 일
타락천사 [rain622] 8412 읽음    2001-08-21 10:24
안녕하세여.. 타락임다..^^

윈도우 어플은 만드는 프로그래머라면 기본적으로 운영체제에 대한 지식이 있어야 함미다. 보통 기초 지식이라고 함미다. 건물이나 다리를 놓을 때 중요도가 가장 높고, 시간과 노력을 많이 기울이는 것이 토대를 박는 공사라고 함미다. 틈트미 Win32 환경이 어떻게 작동하는 지에 대한 기본적인 지식을 제공하겠슴미다.

*  들어가며..

객체라는 말은 문맥에 따라 여러가지 의미를 가짐다. Win32 구조에 대해 얘기할 때 나오는 객체는 객체 지향 프로그램이나 COM을 말할때의 객체가 아님다. 심지어, 16비트 윈도우즈를 말할때와 Win32 에서의 객체도 약간 다른 의미를 가짐다. 따라서 우선 Win32의 객체가 어떤것인지 명확하게 이해하고 있어야겠슴미다.

Win32 환경에서는 기본적으로 두 종류의 객체, 즉 커널 객체와 GDI/USER 객체들이 있슴다.

1. 커널(Kernel) 객체들

커널 객체란, Win32 운영체제의 핵심임다. 커널 객체에는 이벤트나 파일 맵핑, 파일, 메일슬롯, 뮤텍스, 파이프, 프로세스, 세마포어, 스레드 등이 포함됨다. 커널 객체에 대한 일반적인 내용을 얘기 하기 전에 Win32 환경에서 객체들이 어떻게 다루어 지는지 기초지식을 가집시다.

1.1. 프로세스

프로세스(Process)란, 프로그램 자체이며 프로그램의 인스턴스를 말함다. 프로세스가 형성되면 Win32 운영체제는 프로세스에 4GB의 주소 공간과 주 스레드를 할당함다. 프로세스는 자기만의 Local 주소 테이블(맞나? ^^;;) LDT 을 가짐다. 프로세스는 그 주소공간 안에서 메모리 할당이나 스레드, 파일 맵핑 등을 함다. 프로세스가 적재한 "동적 연결 라이브러리(DLL)" 도 그 공간 안에 자리를 잡슴다. 프로세스는 아무것도 수행하지 않슴다. 코드를 수행하는 것은 스레드 임다. 주 스레드는 필요에 따라 다른 스레드를 생성할 수 있으나, 주 스레드는 하나임다. Win32 운영체제는 스레드에 CPU 의 수행시간을 할당(타임 슬라이스, Time Slice) 함다.

몇몇 Win32 API 함수들은 애플리케이션의 인스턴스 핸들을 인자로 사용하며, 어떤 것들은 모듈 핸들을 사용함다. Win32 에서는 인스턴스 핸들과 모듈 핸들이 같은 값을 가지며, 모든 프로세스는 고유한 인스턴스 핸들을 가짐다. 16 비트 윈도우즈에선 그렇지 않았었슴다.  Win32에서 각각의 프로세스는 독립적인 4GB의 주소공간을 할당받으며, 따라서 다른 프로세스의 상태를 알지 못함다.

참고) 인스턴스 : 간단히 말해서 프로세스가 할당받은 주소 공간을 의미한다고 생각해두 무방함다. 나중에 설명할 기회가 올지도..ㅠㅠ

1.2. 나머지 커널 객체

그 외에도 여러 커널 객체들이 있슴다. 프로세스에서 생성된 커널 객체는 프로세스의 주소 공간에 존재하며, 프로세스는 그 커널 객체에 대한 핸들을 얻음다. 그 핸들은 다른 프로세스에 넘겨 줄수 없슴다. 그러나 적절한 Win32 API 함수를 쓰면 다른 프로세스에 이미 존재하고 있는 커널 객체의 핸들을 얻을수 있슴다. 가령 뮤텍스 같은 것이 그렇습니다.

2. GDI 와 USER 객체

GDI 객체란, 브러시, 펜, 폰트, 팔레트, 비트맵, 영역(region) 등 그래픽 표시에 관련된 것들을 말하며, USER 객체란 윈도우, 윈도우 클래스, 아톰(Atom), 메뉴 등 사용자 인터페이스에 관련된 것들임다.

Win32 에서는 16비트 윈도우즈와 달리 GDI 객체들을 공유할 수 없슴다. GDI 객체들은 프로세스들의 주소공간에 위치함다.  따라서 같은 번호의 핸들이라도 프로세스가 다르면 다른 객체를 의미함다.

USER 객체 역시 GDI 객체와 동일한 방법으로 작동합니다. 그러나 GDI 와 달리 Win32 USER 서브운영체제가 관리함다. USER 객체의 핸들 테이블을 프로세스별로 관리 되지 않고, USER 자체가 관리한다는 점이 중요함다. 따라서 "윈도우" 나 "윈도우 클래스" "아톰" 같은 USER 객체들은 프로세스들 사이에서 공유될 수 있슴다.

담에는 Win32 메모리 관리에 대해 쓰져..

즐푸하세여..

타락임다..^^

+ -

관련 글 리스트
181 [강좌] Win32 운영체제 일반 - 일 타락천사 8412 2001/08/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.