2008. 11. 11. 09:15 과거 저장소/Something New
728x90

저는 서울산업대(SNUT)내 EndlessCreation(EC)라는 동아리에 몸담고 있습니다.
일주일 전쯤 모두들 큰 맘 먹고 지저분한 동방을 청소하기 시작했습니다.

시작은 그저 밑에 있는 먼지나 청소기로 구석구석 치우고, 정리정도 였는데,
이게 왠말인가요... 하다보니 책상에 대한 위치 변경 안건이 나오고, 모두들 술렁이며
배치를 해보기 시작했습니다. 이런저런 의견이 있었지만 마지막으로 결정된 배치는

---|   | ---------------------
|   입구    -------          ------ |
|             보드판          테이블|
|                                         |
|    ======= =======     |
|           책 상       책  상        |
|                                         |
|   ====== ======           |
|    책 장     책 장                  |
--------------------------------

위와 같습니다.

거의 한시간 반정도 청소와 함께 배치를 하고 선정리를 하고 보니 나름 세미나실 분위기가 물씬 풍기면서, 잠들어 있던 학구열을 불태우는듯 보였습니다.

거기에 한 술 더 뜬 저는 "아 집보다 동방이 더 좋다"라는 생각을 하기까지도 했답니다.^^

힘들긴 했지만 바꾸고 나니 한결 마음도 가볍고, 기분도 좋았습니다.
과연 이 배치로 몇달? 몇년이 갈지는 모르겟지만 한번 두고봐야겠습니다.

인증샷~ 몇컷 올려봅니다.

나의 분신 Averatec 2500
[나의 작업환경 및 분신 Averatec2500]

나의 분신 Averatec 2500
[나의 작업환경 및 분신 Averatec2500 2]

동방 입구 및 화이트보드
[동방 입구와 간지 화이트보드]
전체 풍경 및 열공모드
[책상 배열과 열공중인 원평X]

데스크탑2대와 열공모드
[데스크탑 2대와 또 나온 원평X]

책장과 열공모드
[우리들의 책으로 가득찬 책장과 계속 출현중인 원평X]

열공모드
[마지막 원평X 풀샷]
728x90
posted by acedon
2008. 11. 1. 14:42 과거 저장소/Something New
728x90

아~ 내 정든 노트북 2300 JB1K여 ... 나를 떠나려 하는건가??

지난 28일 무려 한달 반 동안의 노트북의 결함과의 사투에서 결국 끝을 내고 새로운 친구녀석을 만들게 되었습니다.

1년만 지나면 제 averatec 2300에서 고질적으로 발생하는 문제가 있는데,
바로 "전원은 들어오나 부팅화면이 나오지 않는 부분" 이였습니다.

전 1년 내내 아무 문제 없이 잘 사용해왔기 때문에 저에게는 먼 이야기로만 들렸습니다.
하지만 이게 왠일? 제꺼도 근 1년이 다되고 조금 넘어갈 시점에서 이상 증후군이 발생되기 시작했습니다.

처음. 화면이 갑자기 깨지면서 먹통이 되는 현상
        사실 이 증상을 겪고는 화들짝 놀랐습니다. 한편으로는 어이없고, 다른 한편으로는 걱정이 밀려왔습니다

둘째. 드디어 화면 안뜸 문제 발생
        컴퓨터를 잠시 안쓰기에 닫아놓고, 절전모드로 진행되게 되는데 여기서 원상태로 돌아오지 못하는 현상이였습니다. 그래서 강제종료하니 그다음부터는 먹통 ㅡ0ㅡ;; 그래서 메인보드 교체라는 특단의 조치를 취했습니다.

하지만, 이게 별로 오래가지는 못했습니다. 2주안에 총 3번이 더 발생되어 결국은 교체신청까지 하게되었습니다. 그래서 저의 정든 2300에서 2500으로 교체되게 되었습니다.

2500을 받고 느낀거는 기존 2300보다 좀더 쌈박해졌다(?)라는 생각이 들었다.
투박했던 2300에서 쌔끈해진 2500 ^^ 왠지 모르게 기분이 좋아졌다.
또한 2300에서 2500으로 바꾸면서, OS또한 Vista로 사용해보기로 마음먹었다.

처음에는 과연 만족할만한 성능이 나올까 했지만, 오히려 내 생각하기에는 더 빨라진거 같았다. 이렇듯 조금씩 새로운 변화에 적응해 가려고 노력하고 있는중이다.

012


728x90
posted by acedon
2008. 8. 20. 15:23 과거 저장소/Device Driver
728x90
오늘 노트북이 잠시 입고된 상태라 데스크 탑에 WDK를 설치한 후 간단한 드라이버를 빌드하려고 하였습니다. 그런데 이상하게 빌드 오류가 났습니다.
일단 오류 내용은 아래와 갔습니다.

Build Error Message

이런 메시지는 처음 보는 부분이라 급당황 했습니다. 그래서 WDK도 새로 설치해보고 혹시 소스상 문제일까 해서 다른 잘되는 소스로도 테스트 해보았지만 동일한 증상이였습니다.

그리고 나서 이것저것 구글도 뒤져보다가 결국 선배한테 물어봤는데, 의외로 간단히 답이 나왔습니다. 실로 민망할정도의 답이였습니다. ㅠ.ㅠ
전 왜 이런것도 모르고 드라이버 공부한다고 했을까? 하는 생각이 들정도였습니다.

원인소스 경로에 한글과 빈칸이 들어가 있었던 것이였습니다;;;

소스 경로에는 한글을 쓰면 안되고 또한 빈칸 또한 들어가면 안된다는 것을 알고 다시 테스트 해보니 정말 거짓말 처럼 잘되었습니다. 무슨 설정상의 문제도 아니였고, 소스상의 오류도 아닌 이런 간단한 오류 하나도 처리못한 제가 너무 미웠습니다.

그래도 이제 시작하는 입장에서 부끄럽지만 인정하고, 다시금 열심히 공부해야겠다는 생각을 하고 다시 전념하려 합니다.^^
728x90
posted by acedon
2008. 8. 17. 11:17 과거 저장소/Something New
728x90
Big Fat Cat
오늘은 오랜만에 5년전쯤에 샀던 BigFatCat이라는 책을 보게되었습니다. 늘 영어가 부족하다고 아니 많이 부족하다는 것을 느끼기에 부담감만 늘어가고 있던 찰나에 다시금 보게 되니 감회가 새로웠습니다.

사실 이책은 거의 1년에 1~2번 정도는 꺼내 읽어보는 것 같습니다. 그 때 마다 느끼는 건 "아하!"라는 산뜻한 느낌이었습니다. 하지만 또다른 편으로는 나의 영어 수준이 "아직도 그대로구나!"라는 안타까운 현실이 슬프게 만들었습니다. 흠...

그래도 저자의 글들을 보면서 조그마한 희망과 함께 늘 볼때마다 새롭게 다가오는 글들이 저를 기분좋게 만들어 줍니다.

그렇다면 간단히 서문을 써보겠습니다.
모두 희망을 가지고 영어를~


-세계에서 가장 간단한 언어 "영어"
  저자는 세계의 공통어인 영어가 어려웠다면 결코 공통어가 될 수 없었을 거란 이야기를 합니다. 오히려 우리나라 언어 "한국어"가 더 어렵다고 말하고 있습니다. 그렇기에 우리들이 영어에 두려움을 가질필요가 없고, 충분히 습득할 수 있는 언어라고 말하고 있습니다.

-유일한 학습법 "읽기"
  저자는 무엇보다 영어의 읽기 부분에 초점을 맞추고 있다. "읽는다"라는 것은 곧 축적되는 일이라고 이야기 하고 있습니다.
예로 좋아하는 곡의 멜로디를 계속 듣다 보면 자기도 모르게 자연스럽게 외워지는 것처럼, 영어도 억지로 외우려고 하지 않아도 계속해서 읽다 보면 자연스레 구문과 표현방식과 무수한 단어들을 기억하게 된다고 야기 하고 있습니다. 이런것들을 "무의식의 기억"이라고 칭하고 있습니다.

읽기만 잘한다면 "듣기" 또한 잘할 수 있다고 합니다. 그 예로 우리가 외국인의 말을 들을 때 안들리는 경우가 대부분이다. 그럴때 사람들은 이런말을 합니다.
"너무 말이 빨라", "발음을 모르겠어" 라는 등의 말입니다.

하지만 저자는 이렇게 말한다.
"상대방이 말하고 있는 문장을 본 적이 없기 때문이다."
"자신이 알고 있는 문장 중에는 없기 떄문이다" 라고 말을 하고 있습니다.

그 말이 일리가 있습니다. 저자가 말하길, 우리가 영화를 볼때 자막이 없이 보면 잘 못알아 듣지만 자막을 보면 그 말이 더 잘 들리기 때문입니다. 내 기억속에 있는 문장들이랑 매치가 된다면 그만큼 더 잘 들리고 더 잘 이해할 수 있다는 말입니다.

이렇듯 "읽기", "읽는다"는 가장 중요하다고 말하고 있습니다.

위 책은 영어 공부를 하고 싶어하는 분들에게 꼭 권하고 싶은 책입니다.
잘하시는 분이든 못하시는 분이든 한번쯤 읽어보시길 바랍니다.^^
728x90
posted by acedon
2008. 8. 16. 02:25 과거 저장소/Something New
728x90

사용자 삽입 이미지
요새들어 하루에 한편씩 가지고 있던 영화를 보고 있습니다. 그 중에 오늘 본 영화인 The Triangle, 2005 작품입니다.

얼핏 버뮤다 삼각지대라는 내용을 들어본듯 했지만 자세히는 몰랐었는데, 이 영화를 보고 나서 더 관심을 가지게 된것 같습니다.

버뮤다 삼각지대라는 부분은 대서양의 마이애미, 버뮤다, 푸에르토리코를 이어서 나오는 삼각지대를 말합니다.

이 지역에서 예전부터 배와 비행기, 탑승 선원들이 많이 사라졌다는 미스테리한 소문들이 전해내려오고 있습니다.

한 이야기로는 1945년 훈련중에 5대의 해군 비행기[Flight 19]가 사라진 것에서 시작합니다.

영화의 내용에서도 이와 같은 내용이 나오고 있습니다.
영화속에서는 자기장으로 인해서 시공간의 차원의 문이 열려서 문제가 된 부분을 야기하고 있습니다. 이 과정은 자연현상이 아닌 실험을 통하다가 생겨난 부분이라는 것입니다. 실제는 아니겠지라는 생각을 해보게 됩니다. 어떤 분은 시멘트의 급격한 사용으로 인해 그 물질들이 버뮤다 삼각지대로 흘러들어와 쌓이고 그로 인해 석회석으로 변화하여 이산화 탄소를 내뿜는다는 부분에 무지 자세하게 설명해 놓으신 글도 있는데 흥미로웠습니다.
# 관련글 보러가기

또 한 어떤 분의 리뷰를 보면서 웜홀이라는 부분에 대해서 이야기 하신부분이 있어 읽다보니 좀더 흥미로움이 느껴졌습니다.
# 웜홀관련 기사보기

오랜만에 미스테리한 부류에 영화를 보고나니 정말 호기심이 더욱더 극대화 된듯 합니다.그래서 이것저것 더 찾아보고 있는데 미처 그전에는 진지하게 생각해보지 않았던 분야에 대해서 접하게 되는 부분이라 새롭고 즐거웠습니다.

영화를 보는 내내 만약에 내가 저 상황에 있다면? 이라는 생각을 하고나니 좀 짜릿한 느낌이 들었습니다. 이제 또다른 미스테리 물이 없는지 찾아봐야 할듯 합니다.^^

728x90
posted by acedon
2008. 8. 15. 01:39 과거 저장소/IT infomation
728x90
리팩토링(Refactoring)이란?
한마디로 말하면 "프로그램의 외부사양(입력과 출력)을 변경하지 않은 채 내부구조를 안전하게 개선하는 테크닉" 이라고 표현할 수 있습니다.

목적
그렇다면 이런 리팩토링이라는 작업을 수행해야 하는 이유는 무엇일까요?
그건 궁극적으로 프로그램을 이해하기 쉬운 상태로 유지하고, 확장성과 재사용성을 높이는 것이라고 할 수 있습니다.

프로그램의 수정이라는 행위에 대해서 4가지 정도의 예를 들 수 있습니다.
  1. 디버그(Debug)
  2. 기능 확장(Expansion)
  3. 퍼포먼스 개선(Tuning)
  4. 리팩토링(Refactoring)

위 네 가지를 어떤 상태(State)에서 수정하느냐의 관점에서 보게 되면 디버그나머지 세 가지로 분류 할 수 있습니다.
  - 디버그는 정상작동을 하지 않는 프로그램을 수정하는 행위
  - 나머지 세 가지는 정상작동을 하는 프로그램을 수정하는 행위

나머지 세 가지들은
  - 기능확장은 그 말 그대로 기능확장이 필요할 때 사용하게 되는 부분
  - 퍼포먼스 개선 또한 성능을 향상시키기 위하여 사용하게 되는 부분
하지만 리팩토링은 아무 문제가 없는 프로그램에 대해 행하는 부분입니다.

리팩토링을 안전하게 수행하는 요령
  1. 리팩토링과 다른 작업을 분리합니다.
  2. 리팩토링 전후에 반드시 테스트합니다.
  3. 한번에 최소한의 작업만 수행합니다.
  4. 기존의 로직에 미치는 영향을 적게합니다.
  5. 반드시 백업을 합니다.

- 백업 관리에 있어서 제공하는 툴로는 오픈소스S/W인 CVS, MS의 Visual SourceSafe 등이 있습니다.

이런 리팩토링에 대해서 노하우들이 적립되어 있는데, 그것이 바로 "리팩토링 카탈로그"입니다.

사용자 삽입 이미지

대표적인 리팩토링인 "메소드 추출"의 순서는 다음과 같습니다.
  1. 적절한 이름의 새 메소드를 생성합니다.
  2. 추출하고 싶은 로직을 새 메소드로 복사합니다.
  3. 추출된 로직 속의 로컬 변수를 새 메소드에 적합하도록 변경합니다.
  4. 컴파일 하여 테스트 합니다.
  5. 원래 메소드를 새로운 메소드를 호출하도록 변경합니다.
  6. 컴파일 하여 테스트 합니다.

간단하게 리팩토링이 무엇인지에 대해서 알아보았습니다.
관심이 있으신 분은 "Refactoring : Improving The Design of Existing Code" 책 또는 "저자 : 마틴파울러의 http://www.refactoring.com"을 방문해 보십시오.
물론 저도 아직 읽어보지 못했습니다. ^^

출처 : 아무도 가르쳐 주지 않았던 소프트웨어 설계 테크닉 - Watanabe Kouzo외 9인 저 참고
728x90
posted by acedon
2008. 8. 12. 18:01 과거 저장소/Device Driver
728x90

이번에는 IRP(I/O Request Packet)에 대해서 알아보겠습니다.
처음 공부하는 입장이라 용어들이 매우 낯설게 느껴집니다. 그래도 계속해서 보고, 또 다른부분을 보다가도 눈에 띄이다 보니 자연스레 조금은 친숙해지는것 같습니다.

IRP(I/O Request Packet)
Windows2000이상의 OS에서 거의 모든 I/O는 패킷 구동 방식으로 이루어집니다. 개별적인 I/O요청은 각각 드라이버가 무엇을 해야 할지를 말하고, I/O 서브시스템을 통한 요구 처리 과정을 추적하는 작업 지시의 형태로 구현됩니다. 이런한 작업 지시들은 I/O Request Packet(IRP)라는 데이터 구조체 형태로 이루어집니다.

IRP처리과정

  1. I/O를 위한 사용자 모드 각각의 요구에 따라 I/O 관리자는 하나의 IRP를 nonpaged 시스템 메모리에 할당한다. I/O관리자는 파일 핸들과 사용자에 의해 요청된 I/O함수를 기반으로 IRP를 적절한 디바이스 드라이버의 Dispatch 루틴으로 전달합니다.
  2. Dispatch 루틴은 요청에 대한 Parameter를 체크하고, 만약 유효하다면 그 IRP를 드라이버의 Start I/O루틴에 전달합니다.
  3. Start I/O 루틴은 IRP의 내용을 이해하여 디바이스의 동작을 시작합니다.
  4. 동작이 완료되었을 때 드라이버의 DpcForlsr 루틴은 IRP에 최종상태 코드를 저장하고 이를 I/O 관리자에게 전달합니다.
  5. I/O 관리자는 IRP의 정보를 이용하여 그 요구를 완료하고 최종 상태를 사용자에게 보냅니다.

참고
  IRP 이름에서 혼동되는 부분이 발생 될 수 도 있습니다. 소켓도 아닌 커널모드 프로그램인데 패킷을 주고 받는것이 그렇습니다. 이는 NT설계자들이 운영체제의 견고성과 신뢰성을 위해 핵심 구현(Subsystem구조)을 클라이언트-서버 구조로 개발하였기 때문이라고 합니다. 



IRP Layout
하나의 IRP는 가변의 크기의 구조체이며, 이는 nopaged pool에 할당됩니다.
아래의 그림과 같이 크게 2부분(헤더, 스택: 하위 요청파리미터)으로 구성됩니다.

사용자 삽입 이미지

<IRP가 메모리에 로드되었을 때 구조>

IRP Header
  IRP Header 영역은 전체 I/O 요구에 대한 다양한 정보를 가지고 있습니다. 이 헤더 정보를 드라이버에서 직접 접근할 수 도 있고, 이와 반대로 다른 부분은 I/O관리자에 대해 배타적 특성을 가질 수 있습니다.

  • 입력을 읽고 출력을 쓸 수 있는 버퍼가 있습니다.
  • 현재 드라이버가 소유하는 IRP 메모리 영역을 가지고 있습니다.
  • 현재 드라이버가 소유하는 IRP에 대해서 운영체제가 취소를 호출 했을 때 동작하는 루틴이 있어야합니다.
  • 하위 요청(sub-request)에 대한 파라미터가 있습니다.
  • IRP Header는 특정 데이터에 대해서 추가 포인터를 가질 수 있습니다.

위 IRP 구조체 필드 중에서 중요한 부분에 대해서 정리한 표이다.

사용자 삽입 이미지

이제 어느정도 IRP에 대해서 알아본듯 합니다.
결코 쉽지 않은 용어들로 즐비하지만 포기하지 않고 꾸준히만 한다면 승산이 있을 것이라고 생각합니다.

출처 : 마이크로소프트웨어 2006년 4월 기사
728x90
posted by acedon
2008. 8. 12. 14:46 과거 저장소/Device Driver
728x90
NTSTATUS
DriverEntry(
 IN PDRIVER_OBJECT pDriverObject,
 IN PUNICODE_STRING puszRegistryPath
 )
{
 ...
 return (STATUS_SUCCESS)
}

위 구조는 가장 기본적인 DriverEntry()라는 EntryPoint, 즉 시작점입니다.
DriverEntry()함수 내에 2개의 인자가 있습니다.
그 중에 PDRIVER_OBJECT pDriverObject라는 인자 값이 있습니다.
DriverObject의 포인트이고, DriverObject의 구조체를 보겠습니다.

typedef struct _DRIVER_OBJECT {
    CSHORT Type;
    CSHORT Size;
    //
    // The following links all of the devices created by a single driver
    // together on a list, and the Flags word provides an extensible flag
    // location for driver objects.
    //
    PDEVICE_OBJECT DeviceObject;
    ULONG Flags;
    //
    // The following section describes where the driver is loaded.  The count
    // field is used to count the number of times the driver has had its
    // registered reinitialization routine invoked.
    //
    PVOID DriverStart;
    ULONG DriverSize;
    PVOID DriverSection;
    PDRIVER_EXTENSION DriverExtension;
    //
    // The driver name field is used by the error log thread
    // determine the name of the driver that an I/O request is/was bound.
    //
    UNICODE_STRING DriverName;
    //
    // The following section is for registry support.  Thise is a pointer
    // to the path to the hardware information in the registry
    //
    PUNICODE_STRING HardwareDatabase;
    //
    // The following section contains the optional pointer to an array of
    // alternate entry points to a driver for "fast I/O" support.  Fast I/O
    // is performed by invoking the driver routine directly with separate
    // parameters, rather than using the standard IRP call mechanism.  Note
    // that these functions may only be used for synchronous I/O, and when
    // the file is cached.
    //
    PFAST_IO_DISPATCH FastIoDispatch;
    //
    // The following section describes the entry points to this particular
    // driver.  Note that the major function dispatch table must be the last
    // field in the object so that it remains extensible.
    //
    PDRIVER_INITIALIZE DriverInit;
    PDRIVER_STARTIO DriverStartIo;
    PDRIVER_UNLOAD DriverUnload;
    PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
} DRIVER_OBJECT;
typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;

15개의 필드 중에 대략 3개정도가 가장 중요합니다.
  - DriverExtension
  - DriverUnload
  - MajorFunction

DriverExtension
  - PDRIVER_EXTENSION 구조체인데 이 구조체 중에서 AddDevice란 필드에 대해서 꼭 알아야 합니다.
DriverUnload
  - 드라이버를 Unload할 때 실행시킬 함수를 저장하기 위한 필드입니다.
MajorFunction
  - 커널의 I/O System 중 IO Manager라는 것이 있는데, IO Manager가 발생한 IRP패킷에 대해서 처리하는 함수입니다.
  - IRP(Input Output Request Packet)란 입출력을 요구할 때 발생시키는 데이터 형식이며, 총 28가지가 있습니다.

Driver실행 단계
  1. OS의 드라이버 로더가 .sys파일을 로드
  2. DriverObject를 생성(IO Manager가 처리)
  3. DriverObject가 할 일들을(IRP 핸들러 등록)지정
  4. Unload 및 AddDevice의 할 일들을 지정

IO Manager는 DriverObject에게 요청한 패킷을 전달하는 것이 아니고, DriverObject의 DeviceObject를 생선된 것에 IO 패킷을 요청합니다.

그리고 DeviceObject를 연결하여 DeviceStack을 만드는데 이 DeviceStack을 형성하여 장치를 컨트롤 하게됩니다.

출처 : 마이크로소프트웨어 2006년4월 기사

728x90
posted by acedon
2008. 8. 8. 20:09 과거 저장소/Device Driver
728x90
앞으로 짬짬이 시간을 내어서 Art Baker와 Jerry Lozano의 저서 The Windows 2000 Device Driver Book의 내용을 보면서 중요한 부분들은 메모하려고 합니다.
물론 위 원서를 읽으면 좋겠지만, 저는 그 번역서인 원리와 예제로 배우는 Windows 2000 디바이스 드라이버를 읽어 보고 있는 중입니다. ^0^

Windows2000 드라이버의 종류는 무엇이 있는지 살펴보겠습니다.

- Windows2000은 가장 상위에 사용자 모드커널 모드 두 가지 타입의 드라이버를 제공합니다.


1. 사용자 모드 드라이버는 사용자 모드에서 동작하는 시스템 레벨의 코드입니다.
  - 사용자 모드 드라이버에는 가상의 하드웨어 or 새로운 환경 서브시스템을 위한 가상 드라이버들이 있습니다.
  - Windows2000에서는 사용자 모드의 코드는 직접적으로 H/W에 접근 할 수 없으므로 필수적으로 커널 모드
    드라이버 코드에 의해야 합니다.

2. 커널 모드 드라이버는 커널 모드에서 동작하는 시스템 레벨의 코드입니다.
  - 커널 모드에서는 H/W에 접근하는 것이 허용되므로, 직접적으로 H/W를 제어할 수 있습니다.

이제 우리가 배우려고 하는 부분은 H/W를 다루기 위한 커널 모드 드라이버 부분이니 이 부분에 대해서 더 깊숙히 들어가 보겠습니다.

- 커널 모드 드라이버에는 레가시(Legacy)드라이버WDM드라이버의 이 두가지 타입으로 구분되어집니다.


1. 레거시(Legacy)드라이버는 위 책에 첫 번째 판에 잘 나와있다고 합니다.
  - 하지만 궁금하여 찾아보니 "미친감자"님이 쓰신 내용이 있어서 짧막하게나마 설명 하려 합니다.
    Legacy Driver란?
      - Legacy Driver란 NT4.0 계졀 규격에 맞는 드라이버를 지칭한다고 합니다.
      - WDM Driver와 구분하기 위해서 Legacy Driver라고 말한다고 합니다.
      - Legacy란 영어 단어의 의미에서 부터 유산이란 의미기기에 Windows2000입장에서는 NT4.0의 드라이버
        형태는 유산과 같다고 생각할 수 있기에 그런 단어를 붙인거 같다고 합니다.

2. WDM 드라이버는 플러그 앤 플레이를 지원하고, 전원관리, 자동 설정(autoconfiguration) 그리고 핫 플러그인기능을 제공합니다.
  - WDM 드라이버가 제대로 작성되었다면 Windows2000과 Windows98에 동시에 사용될 수 있습니다.
  - 하지만 두 운영체제 사이에 호환성은 보장하지 않습니다.

- 레거시 드라이버와 WDM 드라이버는 또 다른 레벨의 형태로 상위레벨, 인터미디엇, 하위레벨로 분류 할 수 있다.


1. 상위 레벨 드라이버에는 파일 시스템 드라이버(FSD)가 해당된다.
  - 파일 시스템 드라이버는 상위 레벨에서 내려온 요청을 특정 디바이스의 요청에 맞게 변환하는 역할을 수행합니다.

2. 인터미디엇(Intermediate)드라이버는 디스크 미러 드라이버, 클래스 드라이버, 미니드라이버 그리고 필터 드라이버들이 해당됩니다.
  - 이러한 드라이버들은 상위 레벨의 드라이버와 하위 계층 드라이버 사이에 위치하여 변환하는 역할을 수행합니다.

3. 하위 레벨 드라이버들은 H/W BUS를 위한 컨트롤러 드라이버들이 해당됩니다.
  - 예로, SCSI 호스트 버스 어댑터(SCSI Host Bust Adapter)는 하위 레벨 드라이버중 하나입니다.
  - 이런 드라이버들은 Windows2000의 HAL계층과 상호 동작하기도 하고, H/W와 직접 통신하기도 합니다.

위 내용들을 한눈에 확인 할 수 있게 도표를 참고 하시기 바랍니다.
사용자 삽입 이미지

Windows2000 드라이버 분류 계층도

728x90
posted by acedon
2008. 8. 6. 17:02 과거 저장소/Something New
728x90

08년 8월 마이크로소프트웨어(이하 마소)를 읽다가 괜찮은 문구가 있어서 기록합니다.

인제대학교 의용공학과 전종웅 교수님의 말씀입니다.

3C란?
  - 변화(Change)
  - 경쟁(Competition)
  - 도전(Challenge)

과연 위 3단어를 접하게 되면 다시금 자기를 되돌아보게 됩니다.
각각 위 단어들에 대해 받아들이는 느낌이 다를 거라 생각이 듭니다.

지금 느끼고 있다면, 어서 실천(행동)으로 옮기십시오.

저 역시 쉽지 않지만, 노력하려 합니다.^0^

- 자세항 사항은 8월 마소를 참조하세요!
 

728x90
posted by acedon