반응형

요즘 관심사가 Multi-process, 상의 Windowing system이다 보니, 이런 저런 자료들을 찾아보게 되는데,
제 입장에서 가장 쉽게 접할 수 있는 System이 Windows의 windowing system과 linux 의 windowing system이더군요.

저도 제가 쓰는 OS가 Windows 이고, 학생때 주로 Windows 프로그래밍을 하다보니, embeded 에서도 어떤 모듈을 개발해야 될때 밴치마킹을 windows로  했었습니다.
"화면복원을 windows에서는 어떻게 구현했을까? Clipboard를 만들생각인데, MSDN에서 한번 찾아볼까? " 대충 이런식 이죠.


Windowing System이란?

기본정의는 application의 GUI를 사각형 영역(window, 창) 안에 image나 pixel, text, color등으로 표현하는 것을 의미합니다.
따라서 application process 를 창으로 표현하기 때문에 사용자가 여러개의 application을 동시에 사용해야 하는 경우에 직관적으로 접근할 수 있도록 해주는 system입니다.

많은 platform들이 이 Windwing system이라는 컨셉을 사용하고 있는데, 몇가지 platform들을 나열해보자면, windows나 linux, mac, andriod 등 우리가 알고 있는 대부분의 OS들이 이에 해당합니다.
너무 기본컨셉에 대한 내용이라 다들 아는 내용일텐데, 설명하려니 좀 까다롭네요.

이 window라는 컨셉은 software프로그램을 표현하기 위한 GUI로서는 지금 생각해봐도 멋들어진 컨셉이라 생각됩니다.
mouse와 함께 양대 산맥이라 해도 좋을 만큼요.

요즘에야 당연하게 생각되는 것이기도 합니다.

그때문에 요즘에 만들어지는 application framework 들도 대부분 window를 기반으로 Control이라는 컨셉을 적용하는 것을 기본으로 합니다.
물론 이런 컨셉이 아닌 Model - Control - Presentation을 base로 구성하려는 움직임도 있기는 합니다만, 아마도 가번 system은 windowing system으로 하고 그 위에 올라가는 SDK 차원에서 지원을 windowing system premetive 한 API들 뿐만아니라, 확장된 개념으로 제공하는 경우가 많습니다.
OSX, Windows series, Symbian, Linux X-Window, BeOS, NEXTSTEP 등등 모두다 window 기반의 시스템이죠.

이 외에도 in-house 방식으로 개발되는 대부분의 platform들도 아마 windowing system을 적용하려 한다고 보입니다.
( 아닌 system도 있기는 하죠, 저도 몇번 경험했었으니..)

PalmFree는 인터넷에 올라온 기사에서 읽은 바로는 HTML base의 OS라고 하는데,제 생각에는 base에는 windowing system이 깔려있지 않을까 합니다. 정확한 내용은 아니니 요거는 살짝 꼬리 내리고 가겠습니다. ㅎ

아무튼 지금까지 나온 System들은 대부분 GUI를 표현하기 위해서 windowing system을 사용하고 있다는 것이고, 제가 개발하고자 하는 것도 이러한 windowing system 이랍니다.


Windowing System 공부하기?
우선 저는 X-window 와 GTK를 스터디 하려고 합니다.
X-Server나 GTK는 수년 십수년 동안 안정화를 해 나가고 있는 system인데다가, Source까지 open되어있기 때문에 실제 구현이 어떤식으로 되어있는지 를 확인 할수 있으리라 예상되기 때문인데요, 더군다나 windows 의 경우에는 제가 평소 사용하고 자주 접하고 있는 system이다 보니 대충 동작방식은 이해를 하고 있는 상태이기 때문에 특별히 더 공부가 필요하다고 생각되지 않는것도 하나의 이유입니다.(더군다나 windows는 소스가 없으니 상상만 하게되죠.)
 
이런 생각에 처음 받아본 소스가 xorg-server-1.4.tar 를 첨 받았답니다.
압출을 풀고 소스를 쭉 살펴보니,,
XServer.h 라는 파일이 있어 ... "오 요파일은 뭔가 중요해 보이는 구나.." 싶어 파일을 열어봤는데.
흑..
#import <Cocoa/Cocoa.h>
@interface XServer : NSObject {
:
로 시작되더군요.

OSX 의 Cocoa framework에서 사용되는 XServer.h 인가봅니다.
"OSX도 X server를 사용하나 보군...." 요런 생각을 했습니다.

그러면서 다시 source file에 대한 keyword를 생각하다보니. window 를 찾게 되었는데, win 까지 typing을 하고니니. win.h 가 보이더군요.
hw/xwin/win.h 뭔가 스터디를 해야할 첫 포인트를 찾은 느낌이랄까.
(사실 제가 X-Window를 한번도 공부한적이 없어서 인터넷을 선생님 삼아 시작을 해보고 있는 것이라 이리 삽질이 많답니다.)

WinWindow.c
코드 분석 .
일단 전체적인 함수들의 종류를 살펴봤다. ( 함수 살펴보기에는 h 파일들이 더 좋음... ^^;;)
그런데, WinWindow.c 에 구현되어있는 함수들의 선언은 대부분 win.h에 있더군요. WinWindow.h에는
CreateWindow,DeleteWindow , DestroySubwindows ,GravityTranslate, MoveWindowInStack,CheckWindowOptionalNeed,FindWindowWithOptional
GravityTranslate 왠 Gravity?????




암튼 책에서 본 함수들과 좀 달라서.. 더 코드를 살펴보고, X Window의 비밀(????) 을 탐구하기로함.







+ Recent posts