Home | Info | Research | Blog | Repos | Messages | Contact Me


by pyrasis @ 10-20 [03:33 pm]
요즘 나오는 컴퓨터들은 기본적으로 CPU의 개수가 2개 이상입니다. 예전에는 물리적인 CPU를 2개 이상 꽂아서 사용했지만, 최근들어서는 물리적인 CPU 하나에 여러개의 코어를 탑재하여 나오고 있습니다.(인텔 코어2 듀오, 코어2 쿼드 등) 펜티엄 4때에는 하이퍼쓰레딩이라는 기술이 사용되기도 했습니다.윈도우는 실제로 CPU가 2개 인 것이나, 코어 2 듀오 CPU를 하나만 꽂았을 때, 펜티엄4의 하이퍼쓰레딩 모두 여러개의 CPU로 인식합니다.WinD..

글 전체보기

by pyrasis @ 09-15 [03:02 pm]
리눅스 커널의 include/asm-i386/atomic.h의 주요 함수를 Visual C++에서 컴파일 할 수 있도록 만들어 보았습니다.Atomic 함수는 멀티 쓰레드, 멀티 프로세서 환경에서도 안전하게 변수의 값을 연산할 수 있도록 해주는 함수입니다. 이런 기능을 Atomic 연산이라고 합니다.리눅스 및 유닉스 계열에서는 Atomic 함수라고 하고, 윈도우에서는 Interlocked 함수라고 합니다.[CODE type=C]#ifndef __ARCH_I386_..

글 전체보기

by pyrasis @ 09-07 [03:31 pm]
리눅스 커널의 include/asm-x86/bitops.h의 주요 함수를 Visual C++에서 컴파일 할 수 있도록 만들어 보았습니다.[CODE type=C]#ifndef _I386_BITOPS_H#define _I386_BITOPS_H/* * Copyright 1992, Linus Torvalds. * Copyright 2008, Lee Jae-Hong (pyrasis) */#include <linux/compiler.h>#define inline..

글 전체보기

by pyrasis @ 05-29 [12:11 am]
윈도우 프로젝트 필수 유틸리티 - Subversion, Trac, CruiseControl.NET이 출간되었습니다.요즘 제가 블로그에 글 쓰는 것이 뜸했습니다. 다 이 책 때문이었습니다. 원래는 좀더 일찍 나올 수 있었는데, 표지 결정이 늦어지면서 5월 30일에 출간하게 되었습니다. (이때를 틈타 막판에 원고를 수정할 수 있었습니다. 편집자들이 너무 고생을해서 저를 잡아먹으려고 작전을 세우고 있다는 소문이...) 윈도우 기반 환경에서 Subversi..

글 전체보기

by pyrasis @ 05-17 [11:51 pm]
윈도우에는 3종류의 APC가 있습니다.먼저 유저 APC가 있는데, 이것은 유저모드 프로그래밍에서 QueueUserApc 함수로 APC를 등록하거나, overlapped I/O에서 사용됩니다.노멀 APC는 PASSIVE_LEVEL에서 실행되며 유저 APC를 선점할 수 있습니다.스페셜 APC는 APC_LEVEL에서 실행되며 유저모드 코드, 노멀 APC 및 PASSIVE_LEVEL에서 실행되는 쓰레드를 선점할 수 있습니다. 이 스페셜 APC는 I/O 완료..

글 전체보기

by pyrasis @ 05-06 [09:06 pm]
윈도우(XP 이상)에서 USB 키보드(USB Composite 장치)를 꽂으면 기본적으로 usbccgp.sys가 로드 됩니다. 마찬가지로 USB 메모리를 꽂으면 usbstor.sys가 로드 됩니다. 각 USB 장치를 빼면 해당 드라이버는 언로드 됩니다. (단 같은 종류의 USB 장치가 여러개 꽂혀 있을 때 모든 장치가 빠져야 해당 드라이버가 언로드 됩니다.)여기서 중요한 것은 ObReferenceObjectByName과 같은 함수를 이용하여 \\Dr..

글 전체보기

by pyrasis @ 02-03 [07:49 pm]
Critical Region은 공유 자원을 보호하는 가장 기본적인 동기화 요소입니다.KeEnterCriticalRegion 함수로 Critical Region에 진입하며 KTHREAD의 KernelApcDisable에서 1을 뺍니다. 반대로 KeLeaveCriticalRegion 함수로 Critical Region에서 벗어나며 KernelApcDisable에 1을 더합니다. KernelApcDisable의 초기값은 0 입니다. 이렇게 해서 노멀 AP..

글 전체보기

by pyrasis @ 12-08 [08:53 pm]
윈도우 2003에는 Fast Mutex보다 성능이 더 좋아진 Guarded Mutex가 추가되었습니다. Fast Mutex와 Guarded Mutex의 기능은 똑같습니다.Fast Mutex는 IRQL을 APC_LEVEL로 올려주어 노멀 APC, 스페셜 APC를 차단합니다.IRQL이 APC_LEVEL로 높아지면 PASSIVE_LEVEL에서 실행되고 있는 노멀 APC는 IRQL이 높아졌기 때문에 제어권을 빼앗을 수 없습니다. 그리고 APC_LEVEL에서..

글 전체보기

by pyrasis @ 11-17 [02:12 pm]
Lookaside List는 같은 크기의 메모리를 반복적으로 할당, 해제 할 경우 사용합니다. Lookaside List는 메모리를 ExAllocatePool, ExFreePool 함수로 일일이 할당, 해제 하는 것 보다 매우 빠르고 효율적으로 메모리를 사용할 수 있도록 해줍니다.Lookaside List는 내부적으로 ExAllocatePool과 ExFreePool을 이용하여 메모리를 할당, 해제 합니다. Non Paged Lookaside List..

글 전체보기

by pyrasis @ 10-29 [09:21 pm]
커널 모드 프로그래밍을 하다 보면 CONTAINING_RECORD 매크로를 자주 보게 됩니다. 이 매크로는 자기 자신을 포함하고 있는 상위 구조체의 주소를 얻기 위해 사용합니다.간단한 예제를 살펴보겠습니다.
typedef struct _HEADER { ULONG Hello; ULONG World; ULONG A; ULONG B; ULONG C; PVOID Body;} HEADER, *PHEADER;
이렇게 HEADER라는 구조체가..

글 전체보기

by pyrasis @ 09-30 [11:06 pm]
윈도우에서 Subversion 커밋 메일을 보내는 방법을 문서로 작성하였습니다.이번 문서는 커밋 메일 설정에 어려움을 겪고 계신 분들을 위해 작성하였습니다. 커밋 메일에 관련된 질문은 이 글의 댓글로 달아주시면 됩니다. http://www.pyrasis.com/main/SubversionCommitMailForWindows

글 전체보기

by pyrasis @ 09-29 [10:33 am]
드라이버에서 문자열을 처리하다 보면 C 표준 문자열 처리 함수인 strcpy()나 sprintf() 같은 함수를 사용할 때가 있습니다. 하지만 DDK에서는 안전한 문자열 함수(Safe String Functions)를 사용하라고 적극 권장하고 있습니다.이 안전한 문자열 함수는 ntstrsafe.h에 정의되어 있습니다. 모두 RtlString으로 시작하는데, 이 함수들은 Cb와 Cch 두 계열로 나뉘어져 있습니다.Cb는 byte-counted라는 뜻이..

글 전체보기

by pyrasis @ 09-08 [01:52 pm]
윈도우 드라이버를 개발하다 보면 UNICODE_STRING을 사용하는 경우가 많습니다. 유저모드에서 커널모드로 문자열을 보내왔을 때나, 드라이버 내에서 문자열을 주고 받고 조작하는 경우 보통 NULL로 끝나는 char * 문자열을 이용하는 경우가 많습니다.이 char * 문자열은 윈도우 커널모드 함수에서 받아주지 않기 때문에 UNICODE_STRING으로 변환해서 사용합니다. 보통 char *에서 ANSI_STRING으로 만들고 다시 RtlAnsiS..

글 전체보기

by pyrasis @ 08-27 [08:58 am]
오늘은 PYRASIS.COM(피라시스닷컴)이 문을 연지 4년째 되는 날입니다.2, 3주년은 제가 계급을 달고 있던 시절이라 따로 챙기지 못하였습니다.예나 지금이나 사이트의 겉모습은 거의 바뀐 것이 없지만 테터툴즈의 설치, WebSVN에서 ViewVC로 전환 등 기능적으로는 어느정도 발전이 있었습니다.자주 글을 쓰지는 못하지만, 양질의 정보를 제공하기 위해 노력하겠습니다.앞으로도 많은 방문 바랍니다. 감사합니다.

글 전체보기

by pyrasis @ 08-25 [09:13 pm]
C언어를 사용하다 보면 예외처리 부분이 상당히 미흡하다는 것을 알 수 있습니다. C++은 언어 차원에서 try, catch라는 예외처리 문법을 제공해 주고 있습니다.C언어는 C 표준 라이브러리에 있는 setjmp(), longjmp() 함수를 사용하여 예외처리를 할 수 있지만 상당히 구식이라 직관적이지도 못하고 사용하기도 불편합니다. 그래서 C언어에서는 Structured Exception Handler(SEH)라는 예외처리 방식을 사용할 수 있습니..

글 전체보기

by pyrasis @ 08-03 [11:15 pm]
SVNSERVE Manager 1.1.1이 릴리즈 되었습니다.윈도우 비스타에서 트레이 아이콘이 16색으로 표시되는 것을 트루컬러로 표시되도록 수정하였습니다.다운로드 및 버그 보고나 기능 추가 요청등은 SVNSERVEManager 페이지에서 할 수 있습니다.

글 전체보기

by pyrasis @ 05-28 [10:56 pm]
CPU는 mov eax, 0x100 같은 명령을 그대로 알아듣지 못합니다. 그래서 CPU가 알 수 있는 2진수 형태의 기계어로 변환해서 실행을 하게 됩니다.오늘은 그 CPU가 실행하는 기계어를 사람이 알아 볼 수 있는 어셈블리 형태로 해석하는 방법을 알아보도록 하겠습니다.먼저 인텔 CPU 매뉴얼이 필요합니다.(이건 인텔 웹사이트에서 받으세요, 이번 글에서는 Volume 2A: Instruction Set Reference, A-M"를 보면 됩니다.)..

글 전체보기

by pyrasis @ 05-21 [09:49 am]
리눅스의 Ext2 파일시스템에서 하드링크와 소프트링크의 차이점에 대해 알아보겠습니다.Ext2 파일시스템은 파일과 디렉토리의 정보를 inode라는 구조체의 형태로 저장합니다.Ext2 파일시스템에서 파일이 저장되는 과정은 다음과 같습니다. 그림 처럼 디렉토리 엔트리(ext2_dir_entry)에 파일명과 파일의 inode 위치를 저장하고 있어 해당 파일의 inode를 찾아갈 수 있습니다. inode의 i_block에 파일의 실제 내용이 담긴 블록 주소를..

글 전체보기

by pyrasis @ 05-17 [07:39 pm]
WebSVN 2.0rc4 한글 패치를 공개합니다.만든지는 좀 오래 되었는데 패치를 원하시는 분들이 계셔서 늦게나마 공개합니다. 패치로 수정된 것들은 다음과 같습니다. 한글을 정상적으로 표시. (로그 보기, 파일 내용 보기, 비교, 수정한 사람 보기) enscript를 사용한 상태에서도 한글을 정상적으로 표시 시간과 날짜를 정상적으로 표시 한글 번역 메시지 추가. http://www.pyrasis.com/main/WebSVNPatch본 사이트 소스코드..

글 전체보기

by pyrasis @ 05-09 [12:05 pm]
CDE는 Collaborative Development Environment의 약자인데 말그대로 협업 개발 환경입니다. 이 협업 개발 환경의 중요성은 이제 손아프니 더 이상 강조하지 않기로 하고, 본론으로 들어가서 현재 나와있는 CDE 시스템들을 리뷰해 보도록 하겠습니다.리뷰한 시스템들 중에서 상용 시스템들도 있으며 무료로 사용할 수 있는 것들도 있습니다.CollabNet Enterprise Editionhttp://www.collab.net/pro..

글 전체보기




Login | Title Index | Recent Changes | Edit | Page Info | Search | Subscribe

Copyright © 2003-2008 PYRASIS.COM,. All rights reserved.