Soft Ware 130

함수 ~~

파이썬에서는 help 명령어를 치면 함수에 대해 알수 있습니다. help(print); 치면 print에 대해 알수 있습니다. 자 그럼 여기서 사용자가 정의한 함수에 대해서도 알수 있겠죠? 하지만 정보 가 미약합니다 ㅠㅠ 자 그럼 사용자가 정의한 함수에 대해서 정보를 기입해 두면 다른 사용자가 소스를 분석할때 좋겠죠? 키워드는 plus.__doc__ = "return the sum of parameter a, b" 입니다. 사용자가 정의한 함수.__doc__="설명" 이런식으로 이루워졌습니다. ㅎㅎ # -*- coding: utf-8 -*- def factorial(x): """이 함수는 입력한 값에 대한 x*x-1....1 값을 리턴한다""" if x < 1: return 1; return x * fa..

Soft Ware/python 2012.03.10

정의하지 않는 가변 인자 (딕셔너리)

def userURIBuilder(server,port,**user): str = "http://" + server + ":" + port + "/?"; for key in user.keys(): str += key + "=" + user[key] + "&"; return str; print(userURIBuilder("test.com","8080",id="userid",passwd="1234",name="mike",age="20")); 이 경우에는 딕셔너리로 저장된다. 딕셔너리란 사전이란 뜻으로 키 값을 통해서 값을 입력 및 출력 할수 있다 ^^ 딕셔너리는 순서대로 저장 되는것이 아니라 임의로 저장되는데 음 그럼 출력 순서를 모르지 않을까요 하는 생각이 드는데 책이랑 출력값이 같다 ㅠㅠ

Soft Ware/python 2012.03.05

가변인수 !!

1.첫번째 경우 def union2(Data): res=[]; for item in Data: for x in item: if not x in res: res.append(x); return res; union2([["HAM"],["EGG"]]); 이 경우는 리스트를 넘기기 때문에 item 에서 HAM 문자열을 한개로 본다 2. 두번째 경우 def union2(Data): res=[]; for item in Data: for x in item: if not x in res: res.append(x); return res; print(union2(["HAM","EGG"])); 이 경우는 리스트 안에 있는 문자열들을 ["HAM","EGG"] 를 한개로 보고 그 안에 있는 내용을 H A M 한글자씩 item에..

Soft Ware/python 2012.03.05

키워드 인수 !!!

키워드 인수 는 일반 인수 뒤에 위치 합니다. 즉 def connectURI(server,port): str = "http://" + server + ":" + port; return str; print(connectURI("test.com","8080")); print(connectURI("test.com",port="8080")); print(connectURI(port="test.com",server="8080")); 이런식으로 사용할수 있습니다. 하지만 print(connectURI("test.com",server="8080")); 를 선언한다면 오류가 발생합니다. 그이유는 일반인수는 순서대로 server 에 "test.com"에 대입 되고 다시 server에 "8080" 를 대입 할려고 하니깐 ..

Soft Ware/python 2012.03.05

디스패치 오브젝트 중 세마포어 오브젝트와 타이머 오브젝트에 대해서 !!!

뮤텍스 오브젝트는 특정한 스레드만 획득 할수 있었다면 세마포어 오브젝트는 하나 이상의 스레드가 동시에 공유된 자원을 사용 할 수 있도록 허락 합니다 ^^ 그럼으로서 드라이버는 뮤텍스 오브젝트와 달이 얼마나 많은 스레드가 동시에 세마포어 오브젝트를 얻을 수 있는지를 제어 할수 있습니다 . 세마포어 초기 함수를 보면 VOID KeInitializeSemaphore(IN PRKSEMAPHORE Semaphore, IN LONG Count, IN LONG Limit) 여기서 Count 는 커널에서 얼마나 많은 스레드가 세마포어 오브젝트를 사용할수 있는지를 Limit는 동시에 사용할수 있는지를 나타낸다 . ------------------------------------------------------------..

비동기 프로시저 콜 < APC > 에 대해서 ~~

IRQL 중에 APC LEVEL이 있습니다. 그 녀석에 대해 알아 보겠습니다 APC 은 비동기 프로시저 호출을 처리할때 재 진입을 제어 하기 위해 커널 모드 루틴에 의해 사용된다고 하네요. 간단한 예를 들어서 알아 보겠습니다. 프로세서 A라는 녀석이 파일 I/O 를 처리 하기 위해 함수를 호출 하였습니다. I/O 관리자는 경로를 찾기 위해 오브젝트 관리자를 호출하여 해당 볼륨을 찾습니다. 그런 다음 I/O 관리자는 IRP를 생성하여 파일 시스템 드라이버를 호출합니다. 파일 시스템 드라이버는 캐싱 관리자를 호출하여 해당 파일이 캐싱 되어 있으면 시스템 버퍼에 메모리를 복사 하던지 맵핑 합니다 . 자 그럼 다시 돌아와서 프로세서 A는 그동안 무엇을 하고 있을까요? 비동기 프로시저 라는 의미는 파일 입출력 하..

디스패처 오브젝트 중 뮤텍스 오브젝트

뮤텍스 오브젝트는 공유 자원을 사용 하기 위해 경쟁 상태에 있는 스레드들의 동기화를 위한 방법을 제공 한다 . 뮤텍스 오브젝트는 하나의 스레드만이 주어진 시간에 공유 된 자원을 접근할수 있다고 하네요 ^^ 뮤텍스 와 스핀 록의 차이점으로는 1. 뮤텍스는 특정한 스레드 컨텍스트에서만 획득할수 있습니다. 즉 그말은 해제할때고 특정한 스레드 컨텍스트에서만 해제 할수 있다는 말이죠 ㅎㅎ 2. 뮤텍스 오브젝트에 대한 제어를 얻으면 커널은 발생할수 있는 데드록을 피하기 위해 특별한 커널 APC 이외에는 다른 어떤 APC도 전달 되지 않도록 처리합니다 3. 모든 뮤텍스는 뮤텍스 오브젝트를 사용하기 전에 현재 사용중인 뮤텍스 보다 더 낮은 레벨이어야 만 합니다 . 4. 뮤텍스 오브젝트는 획득 한 순서대로 정확히 해제 ..

디스패처 오브젝트 중 이벤트 오브젝트

앞절에서 말한 디스패처 오브젝트 중에는 이벤트 , 뮤텍스, 세마포어 등이 있습니다 . 우선 이벤트 오브젝트 부터 알아 볼건데요 ㅎㅎ 이벤트 오브젝트는 여러 스레드들 사이에서 코드 실행의 동기화를 위해 사용되는데요 이게 무슨말이냐면요 예를 들어보겠습니다 스레는 A는 드라이버에서 사용할 데이터를 생성하고 그 데이터를 현재 사용하고 있습니다 . 스레드 B는 스레드 A가 사용중인 데이터를 사용하기 위해 데이터를 사용할수 있을때를 기달리는데요 스레드 A가 데이터의 사용을 끝났을때 이벤트 오브젝트를 사용하여 스레드 B에 데이터를 사용할수 있도록 알려준다고 하네요 ^^ 이벤트 오브젝트는 통지 이벤트 오브젝트 와 동기화 이벤트 오브젝트가 있는데요 1. 통지 이벤트 오브젝트는 자동으로 Non-Signaled 상태로 다시..

디스패처 오브젝트 !!

디스패처 오브젝트의 기본적인 속성은 Signaled 와 Non-Signaled 상태 중 하나를 가진다 Signaled 상태는 디스패처 오브젝트가 보호 하고 있는 데이터를 사용하는 스레드가 하나도 없으며 코드 의 임계 영역에 있는 디른 스레드 역시 하나도 없는 상태를 말한다. Non - Signaled 상태는 디스패처 오브젝트가 보호 하고 있는 데이터를 사용하고 , 코드 임계 영역에서 실행되고 있는 스레드가 있다는것을 말한다. 또한 드라이버는 디스패처 오브젝트를 사용하기 위해서는 페이징이 불가능한 영역에 오브젝트 변수를 선언해야 한다고 하네요 ㅎㅎ 하나의 스레드가 공유된 데이터를 사용할 필요가 있다면 KeWaitforSingleObject() 함수 와 KeWaitForMultipleObject(), KeW..