rss

skin by 꾸자네
최근 1년간 스스로에게 자주 묻는 질문(FAQ) Best10



최근 1년간 스스로에게 자주 묻는 질문(FAQ : Frequently Asked Questions)이라는 주제로 10가지(Best 10)를 뽑아 보았습니다. 

( 앞에 나오는 숫자는 순위입니다.  순위는 스스로가 자주 묻고, 중요시 하는 순으로 작성하였습니다. )


10. 목적지에 도달하는 가장 합리적이고 빠른 방법은 무엇인가?

- 학교에 갈때는 용산(집)에서 청량리, 학원 혹은 회사에 갈때는 용산(집)에서 강남역으로 이동을 합니다. 
출발지에서 목적지까지 가는 방법이 한가지만 있는것이 아니기에 가장 빠르고,
가장 합리적인 이동 경로를 택하려고 다양한 방법을 시도하고 있습니다.

- ex) 용산(집)에서 강남역으로 갈 경우(오전 7시 50분 출발) 
 7시 55분경에 집 앞 버스 정류장에 도착하는 7016버스를 탄뒤 용산구청에서 하차. 
 8시 5분경에 용산구청에 도착하는 730번 버스에 승차. 
 평균적으로 8시 35분 경에 강남역에 도착. 
 ( 예전에 이용하던 마을버스와 지하철을 이용하는 방법에 비해 약 20분 정도 빠름 ) 

- 지금도 제 책상 한자리에는 위의 그림과 같은 지하철 노선도가 자리를 잡고 있습니다.


9. 수집하는 물건등은 잘 관리하고 있는가?

- 개인적으로 감명깊게 읽은 책(만화책)등을 수집하고 있습니다. 
책(만화책)의 경우에는 한 번 읽고 책장에 꽂아두는 경우가 많아 소장여부도 기억나지 않는 경우가 많기 때문에 일주일에 한번씩은 전체 책장을 훓어보는 시간을 가지고 있습니다.


8. 매주 토요일 저녁에 서점에 방문하고 있는가?
- 여가 시간에 주로 책을 읽고 있는데, 대여점에서 빌려 보기 보다는 직접 구입해서 보는 것을 선호하기에 매주 토요일 저녁 마다 서점에 가고 있습니다. 2007년 초에 스스로에게 약속한 내용이기도 합니다. 인터넷 등을 이용해서 구입할 책 목록을 작성하기도 하지만, 인터넷 만으로는 책의 구입여부를 판별할 수 없기에 목록을 따로 만들어 가지 않을 때도 있습니다.

- 종로에 위치한 영풍문고에 자주 갑니다.
 ( 서점으로 가는 길에 청계천을 걸을 수가 있고, 타 서점보다 다양한 종류의 서적을 취급하고 있기 때문입니다. )


7. 불필요한 곳에 지출을 하고 있지 않는가? | 물건을 사기 전에 한번 더 생각하는가?


-  계획성 있게 지출을 하는 편이 아니라서 순간적으로 돈을 어디에 지출했는지 잊어버릴때가 많아 2007년 초에 스스로 약속한 내용입니다. 돈이 생기면 먼저 저금을 하고 지출을 하기전엔 정말 필요한 것인지 생각을 하고 동전이 생기면 필요한 정도만 제외하고 전부 저금통에 넣으며 하루하루 생활 하고 있습니다.


6. 영어 공부는 꾸준하게 하고 있는가?

-  세계화, 글로벌 시대를 맞이하여 영어는 선택이 아닌 필수라고 생각합니다. 언어의 특성상 꾸준하게 노력하지 않는다면 만족하는 수준에 이르지 못하기 때문에 매일매일 스스로에게 질문을 던지면서 영어의 필요성을 느끼고 공부하고 있습니다.


5. 말하기 전에 한번 더 생각하고 있는가? 

- 살아가면서 조심하고 또 조심할 것이 있다면 말하기라고 생각합니다. 생각하기 전에 말이 앞선다면 상대방 혹은 스스로에게 큰 상처를 줄 수 있기에 항상 말하기 전에는 심사숙고 하는 습관을 들이고 있습니다.


4. IT 관련 뉴스(IT 관련 서적)를 꾸준히 접하고 있는가?

- 제 꿈은 컴퓨터 프로그래머로서 기술을 선도하는 사람이 되는 것입니다. 꿈을 위한 하나의 발판으로 매일 아침에 전자신문 또는 디지털 타임스등을 읽으며 최근 IT의 핫 뉴스, 기술 흐름등을 접하고 있습니다. 또한 월간 발간되는 마이크로소프트웨어지, IT 관련 서적등을 꾸준히 구독함으로써 관련 여러 기술등을 직접익히고 있습니다.


3. 귀찮거나 바쁘다는 핑계로 대인관계를 소홀히 하고 있지 않는가?
- 모든 것에 완벽한 사람이란 존재할 수 없기에 하루하루 살아가는데 있어 사람들과의 관계는 너무나도 중요한 사항이라고  생각합니다. 최근 이런저런 일들을 핑계삼아 대인관계에 소홀해지는 것 같아 스스로에게 위와 같은 질문을 던지면서 대인관계, 휴먼 네트워크의 중요성을 느끼고 자신을 먼저 생각하기 보다는 타인을 배려하는 삶을 살아가도록 노력하고 있습니다.

 


2. 하루하루 되돌아 보는 시간을 가지고 있는가?


- 의미 없이 시간을 흘러보내는 행동을 지양하기 위해 하루 일과를 마치고 집에 돌아오는 길에 손목시계를 보며 하루를 정리하고 있습니다. 모두에게 공평하게 주어지는 24라는 숫자를 어떻게 활용함에 따라서 그 사람의 인생이 달라진다고 생각합니다. 하루하루를 소중히 여기고 귀하게 사용하기 위해 매일 저녁마다 어떤 생활을 하였는지 돌이켜보는 습관을 들이기 위해 위와 같은 질문을 끊임없이 하고 있습니다.


1. 하나님 말씀대로 살아가고 있는가..

 - 매주 일요일마다 교회에 가서 많은 것들을 느끼고 배우고 있습니다. 모태신앙으로 기독교 생활을 시작하였습니다만, 성경 말씀이 제 생활의 중심으로 자리 잡은 지는 2년이 조금 안된 것 같습니다. 생활하는데 있어 어떤 뚜렷한 기준이 없다면 선택의 갈림길에 있을때 정하지 못하고 갈팡질팡하는 경우가 많을 것입니다. 하지만 저는 하나님의 말씀이라는 뚜렷한 기준을 가지고 생활하고 있기 때문에 선택함에 있어 주저함이 없고, 항상 기쁜 마음으로 모든 일들을 접하고 있습니다.



----------------------------------------------------------------------------------------------------------------

작성자 : 김현중 

- 서울시립대학교 컴퓨터 과학부 3학년 휴학중.
- (주)웹티즌에서 산업기능요원으로 재직중.
- 아직은 초보 개발자로 언제나 스스로에 대한 의심을 게을리 하지 않고 있다.

by 이실로테 | 2007/04/15 02:18 | Project | 트랙백 | 덧글(1)
윈도우 - 서비스 - 함수 - 루틴.


 서비스라는 용어는 운영체제, 장치 드라이버, 또는 서버 프로세스에서 호출 가능한 루틴.

Windows API 함수
-> 윈도우API에서 문서화되고 호출 가능한 서브루틴들.

네이티브 시스템 서비스
-> 운영체제 하부에 있는 사용자 모드에서 호출 가능한 문서화 되지 않은 서비스들.

커널 지원 함수
-> 커널 모드에서만 호출될 수 있는 윈도우즈 운영체제 내부의 서브루틴.

윈도우즈 서비스
-> 윈도우 서비스 제어 관리자(Service Control Manager) 에 의해 시작되는 프로세스.

동적 링그 라이브러리
서브루틴들을 사용하는 응용프로그램들에 의해 동적으로 로드될 수 있는 바이너리 파일과 함께 링크된 호출 가능한 서브루틴 들의 집합.

프로그램은 명령들의 정적인 순서인 반면 프로세스는 프로그램의 인스턴스를 실행할때 사용되는 리소스의 집합에 대한 컨테이너,
 -> 전용 가상 주소 공간.
 -> 실행 프로그램
 -> 프로세스에서 모든 스레드에 액세스 가능한 서마포어, 통신 포트 , 파일 등과 같은 다양한 시스템 리소스에 대한 열린 핸들의 목록.

 특권을 식별하는 액세스 토큰.

 프로세스 아이디

 최소 하나 이상의 실행 쓰레드.

쓰레드는 윈도우즈가 실행하는 프로세스내의 실체. 스레드 없이는 프로세스의 프로그램을 실행할 수 없다.
프로세서의 상태를 표시하는 COU 레지스터 집합의 내용.
두개의 스택,하나는 커널 모드에서 실행하는 동안 사용하기 위한 스레드에 대해서, 나머지 하나는 사용자 모드에서 실행하기 위해서 사용.
서비시스템, 런-타임 라이브러리, DLL들이 사용하는 스레드 로컬 저장소.(TLS)
쓰레드 아이디라 부르는 유일 식별자. (프로세스 ID 및 쓰레드 ID는 동일한 이름 공간에서 만들어지므로 이들은 결코 중복되지 않는다.)
 
by 이실로테 | 2007/01/17 13:09 | 트랙백 | 덧글(0)
생각나는 문제들

1 . 트랜잭션의 처리.
-> 트랜잭션 처리.

2 . DB 용어.

3 . DB에서 체크 포인트가 사용되는 이유.

4 . null에관련된 그룹 함수들

5 . 쓰레드 프로그래밍의 동작 방식.

6 . 윈도우가 에러를 검출하는 방식을 종합적으로 (err_no)

7 . Fetch 동작 방식

8 . 멀티 프로세서에서 작동 순서를 지정하지 않았을 경우에 발생하는 동작.

9 . V(), T() -> 쿼리문이 생각이 나질 않아.

10. 자바에서 스트링 비교
String s1 = "aaa";
String s2 = "aaa";

if( s1 == s2 )
-> 어떤 결과 ? 틀리다.

11. B+트리 정리.

12. 뮤텍스에 대해
Mutual Exclusion.

임계 구역( Critical Section ) 으로 불리는 코드 영역에 의해 구현된다.

 
by 이실로테 | 2007/01/16 21:07 | I think | 트랙백 | 덧글(0)
InitializeCriticalSectionAndSpinCount() Windows System

InitializeCriticalSectionAndSpinCount() Windows System

 

InitializeCriticalSectionAndSpinCount()

에서의 SpintCount에 대해서...

 

Spin - wait 상태로 들어가기 전에 함수의 인자로 주어진 spin 횟수만큼 루프를 돈다는 겁니다.

루프 도는 중간에 critical section을 획득 할 수 있다면 thread context switch가 발생하지 않고 임계영역안에 접근 가능하다는 것입니다.

 

InitializeCriticalSectionAndSpinCount(&g_cs, 2000); 일반적으로 두번째 파라미터 dwSpinCount에 스핀록 루프 횟수를 2000 정도를 잡는게 효율적입니다.


spin에 대해서 조금 부연설명을 하면...

하나의 공유 변수에 대해서 1과 0값을 사용해서 (사실 어떤 값이던 상관이 없죠) critical section 에 대한

권한을 체크하는 것입니다. 이 변수가 1일때는 사용중이고, 0 일때는 진입 가능이라고 보면, critical section에 진입시에는 이 값을 1로 setting

해서 다른 access를 막고, 다시 critical section을 나갈때는 이 값을 0으로 바꿔주는 것죠. 이때 loop를 돌면서 InterlockedExchange를 사용

합니다. 들어가려고 시도하는 쪽에서는 int permission = InterlockedExchange(&var, 1); 같은 문장을 실행시켜봐서 결과가 0이 나오면 진입,

1이 나오면 계속 루프를 돌게 되는거죠. 역시 나올때는 InterlockedExchange(&var, 0); 를 실행하면 됩니다.

by 이실로테 | 2007/01/11 20:57 | I que | 트랙백 | 덧글(0)
이벤트!?



 모든 커널 오브젝트에서 이벤트는 가장 원시적인 단위. 오브젝트는 사용번호, 이벤트가 오토 리셋 이벤트인지 메뉴얼 리셋 이벤트인지 나타내는 boolean값, 이벤트가 시그널인지 넌시그널인지 나타내는 boolean 값을 가지게 된다.


메뉴얼 리셋 이벤트의 경우 이벤트를 기다리는 모든 스레드는 스케줄 가능 상태가 된다. 오토 리셋 이벤트의 경우, 이벤트를 기다리는 모든 스레드 중에서 오직 한 스레드만 스케줄 가능상태가 된다.


성공적인 대기의 부작용이란?
일딴 오브젝트의 상태를 바꾸는 것이란 정도로 생각하자.
by 이실로테 | 2007/01/08 21:14 | I think | 트랙백 | 덧글(0)
크리티컬 섹션!?!! 덜덜덜/



크리티컬 섹션은 유저모드에서 동작한다.
뮤텍스보다 빠르다

자세한 설명은.

-> 쓰레드가 엔터 크리티컬 섹션을 하였을 경우 제일 먼저 CRITICAL_SECTION 구조체 내부의 변수를 검사한다.
이 값이 OFF인 경우 atomic 연산을 통해 ON으로 체인지.

->크리티컬 섹션이 다른 스레드에 점유되어 있는 경우 싱글 CPU상에서는 바로 커널모드로 넘어가게되고, 다중 CPU 상에서는 SPIN COUNT 만큼 대기 하면서 락이 풀리길 기다린다.

-> Leave하면 off로 바꾸고 , 세마포어를 이용한 경우에는 기다리고 있는 스레드에 통지해준다.

스핀카운트를 조정할수있다
커널모드보단 비지웨이팅이 효율적일수 있다.
by 이실로테 | 2007/01/07 16:51 | I que | 트랙백 | 덧글(0)
스레드 폴링이란 무엇인가?!

스레드 동기화에는 폴링과 동기화 개체 사용이라는 방법이 있는데

폴링은 루프내에서 비동기 호출의 상태를 반복적으로 검사하는것.

대기상태가 아니다. 반복적인 검사!!!!



volatile 타입 한정사.
변수를 메모리에 위치시키고 캐싱하지 않는다.

구체적으로 volatile 한정사는 변수를 모든 최적화로부터 차단하고 항상 변수의 메모리 위치에서 값을 다시 로드하도록 컴파일러에게 알린다.
by 이실로테 | 2007/01/07 16:39 | I que | 트랙백 | 덧글(0)
인터록 함수!?



쓰레드에 원자적으로 동기화를 시켜주는 덜덜덜...


CPU 별 실행 모듈이 다르다.

x86 패밀리 CPU는 인터록함수를 다른 CPU가 같은 메모리 주소에 접근하지 못하도록 하는 버스에서의 하드웨어 시그널로 간주.

알파 계열 플랫폼에서는

1. CPU의 특수 플래그를 온하고 접근한 메모리 주소를 기록.
2. 메모리로부터 레지스터로 값을 읽어들인다.
3. 레지스터를 변경.
4. CPU의 특수 플래그가 오프라면 2단계, 특수 비트 플래그가 여전히 온이면 레지스터의 값은 다시 메모리에 저장.
by 이실로테 | 2007/01/06 14:48 | I que | 트랙백 | 덧글(0)
_beginthreadex!!

각 스레드는 C/C++ 런타임 라이브러리 힙에서 할당한 고유의 tiddata 메모리 블록을 갖는다.

_beginthreadex가 전달하는 스레드 함수의 주소는 tiddata 메모리 블록에 저장.

_beginthreadex는 내부적으로 CreateThread를 호출한다. -> 유일한 방법.

CreateThread가 호출될 때 새로운 스레드가 실행되는데 이때 pfnStartAddr이 아닌
_threadstartex가 호출된다. 또한 스레드 함수가 호출한 파라미터는 pvParam이 아닌 tiddata 구조체의 주소이다.

모든것이 잘 처리되면 스레드 핸들은 CreateThread와 똑같이 리턴.
그러나 하나라도 잘못되면 NULL을 리턴.
by 이실로테 | 2007/01/05 23:24 | I que | 트랙백 | 덧글(0)
delete , delete []!

구글에서 delete와 delete[]의 차이점을 설명하는 것을 찾아서 보니 지금까지 제가 한 delete는 엄연히 따지면 틀린 것이었습니다.
저런식으로 delete를 하면 배열의 0번째에 대해서만 메모리 해제 작업이 이루어진다는군요.

delete[]를 달아서 돌려보니 위와같은 에러가 생기지 않고 무사히 종료되었습니다.
사실 정확하게 왜 배열 통채로 해제 해주지 않아서 그런 에러가 생겼는지는 잘 모르겠네요 ^^; 그래도 delete와 delete[] 의 차이점은 알게 되었으니 나쁘지 않군요. 누가 아시면 덧글로 설명 부탁드려요(__)

흔히 배열로 할당받은 메모리는 delete[] 로 해제하고, 단일 객체로 할당받은 메모리는 delete 로 해제한다고 알고 있습니다.
이것이 정답이며, 이외의 꽁수를 부리는 것은 문제를 발생시킵니다.
습관적으로 늘 이렇게 짝을 맞춰서 사용했지만, 그래도 정확하게 문제를 아는 것이 중요하다고 생각됩니다.

우선 delete 와 delete[]의 차이를 한마디로 말하라면
delete 는 단일 객체에 대한 소멸자의 호출과 메모리 환원을 하며
delete[] 는 배열객체에 대한 각각의 소멸자의 호출과 메모리 환원을 한다는 것입니다.

그러므로
ClassA *pp = new ClassA;
delete pp;
는 아무런 문제가 없으나

ClassA *pp = new ClassA[10];
delete pp;
과 같이 하는 경우는 pp[0]에 대한 소멸자와 메모리 해제만 이루어 집니다.

반드시
ClassA *pp = new ClassA[10];
delete[] pp;
와 같이 해야 합니다. 그렇지 않으면 메모리 누수가 발생합니다.

혹자는 그냥 delete 만 써도 아무런 문제가 없다라고 말합니다.
이는 프로그램 종료시 할당받았던 전체 메모리가 OS에 의해 해제되기 때문입니다.
즉 메모리에 민감한 프로그램이 아닌 경우이겠지만, 정밀한 프로그램에서는 반드시 짝을 맞춰야 합니다.
by 이실로테 | 2007/01/05 16:16 | I que | 트랙백 | 덧글(0)