Nami 의 공부방 139

인스택 큐 스핀 록에 대해서 ~~!!

인스택 큐 스핀 록은 익스큐티브 스핀 록의 단점을 보안 하고자 나온 스핀 록이다 . 자 그럼 익스큐티브 스핀 록 에 단점에 대해서 알아 봐야 겠죠? ㅎㅎ 그래야 이해 하기 쉬우니깐요 ㅎㅎㅎㅎ 익스큐티브 스핀 록은 서로 경쟁 상태에 있는 프로세서가 스핀 록을 얻기 위해 같은 메모리 영역을 계속 수정해야 하며, 메모리 영역을 수정하게 되면 스핀 록을 얻고자 하는 프로세서는 동일한 캐시 라인을 반복해서 메모리로 가져와야 합니다. 즉 cpu가 메모리로부터 데이터를 가져올때 32바이트,64,128바이크 크기의 캐시 라인을 가져 오는데요 캐시 라인은 성능 향상을 위해 존재하는것이지만 멀티스레드 환경에서는 메모리의 갱신을 어렵게 합니다. 그 이유는 하나의 CPU 코어에서 읽어들인 캐시 라인 데이터를 변경하는 시점에서..

익큐티브 스핀 록에 대해서 ~~~

익스큐티브 스핀 록은 드라이버에서 가장 많이 사용되는 스핀 록으로서 주로 데이터 구조체를 보호하기 위해 사용된다고 하네요 ^^ 익스큐티브 스핀 록은 디스패치 레벨이하에서 실행 되는 스레드만이 획득 가능하구요. 익스큐티브 스핀 록을 사용하기 위해서는 스핀 록 구조체를 위한 변수를 선언 해야 하며 이 변수는 전역 변수나 페이징이 불가능한 Device_Extension 구조체 내에 스핀 록 변수를 선언 해야 합니다 ^^ 스핀 록을 획득 하기 위해서 스핀 록 변수를 초기화 해야되는데 초기화 함수로는 KeInitializeSpinLock()함수를 사용하여 처리하고 사용하기 위해서는 KeAcquireSpinLock() 함수를 호출 합니다 ^^ KeAcquireSpinLock() 이 함수는 IRQL를 조사 하여 스레..

스핀록에 대해서 ~~

스핀 록은 상호배제를 형태로 제공되는데요 상호 배제란 하나의 스레드가 자원을 소유하고 사용하고 있으면 그 자원을 사용하는 다른 스레드는 자원을 쓰고 있는 스레드가 자원을 반납했을시 그 자원을 쓸수 있다는 방식입니다 ^^ 자 그럼 자원을 기다리는 스레드는 자원을 기달리는 동안 무슨일을 할 까요?ㅎㅎㅎ 자원을 기달리는 스레드는 검사와 설정 과정을 반복 하면서 스핀락을 획득할려고 합니다 ^^ 이처럼 자원을 획득할때까지 검사와 설정과정을 반복하면서 어떤 동작도 실행하지 않는것을 비지 웨이팅(busy-Waiting)이라고 하네요 ^^ 스핀락을 원리와 사용시에 항상 같이 나오는 놈이 있는데요 바로 데드락 이라는 놈이죠 ^^ㅋㅋ 데드락은 멀티 프로세서에서 하나의 프로세서에서 하나의 스레드가 자원A를 획득하고 다른 하..

인터럽트 처리 방법 및 인터럽트 오브젝트 !!!

오늘은 다른분의 블러그를 참조하고 글을 올리네요 ^^ 책을 보다가 인터럽트 오브젝트라는 놈을 보게 되었는데요.. 궁금한 나머지 인터넷을 조사 +.+ 자 소개 해 보겠습니다 ~~ ㅎㅎ 인터럽트 란 외부 장치 등에서 발생된 신호를 cpu에게 알리기 위한 수단입니다 ^^ 자 cpu에게 알려줬으니깐 cpu가 작동하겠죠? ㅎㅎㅎㅎ cpu는 인터럽트 서비스 루틴인 ISR을 등록하기 위해 IoConnectInterrupt DDK 함수를 호출하는데요 여기서 호출할때 인터럽트 오브젝트를 생성한다고 하네요 ^^ 인터럽트 오브젝트는 디바이스 ISR의주소와 특정 레벨의 인터럽트를 서로 연관시키는 모든 정보가 들어있다고 하네요 ^^ CPU는 인터럽트 컨트롤러에게 방금 접수된 인터럽트의 IRQ를 질의하여 해당 IRQ를 파악하여 ..

자료 구조 리스트 , 저수준 파일 입출력 을 이용한 프로그램 !!!

아 드디어 만들었네요 ㅠㅠ 처음 C++로 만들었는데 구조체가 클래스 라는것 잃고 ㅠㅠ 만들다가 왜 소멸이 안돼 !!! 삽질을 하루종일 했네요 ㅠㅠ 그러다가 구조체가 클래스니깐 소멸자를 정의 하니깐 이젠 다시 C로 만들라고 하네요 ㅠㅠ 그래서 다시 만들어 봤습니다 ㅠㅠ #define DBG 으로 정의된 부분은 주석 을 풀면 소스 사이사이에 출력문이 나옵니다 ^^ 그걸 보고 분석하면 될것 같네요 ^^ #include #include #include #include #include #include //#define DBG #define stringLen 20 enum { ADD=1, DELETE , OUTPUT, EXIT }; typedef struct List { char buffer[stringLen]; ..

string 구현하기 ~~!!

#include using namespace std; class Str { private: char *buf; //동적 메모리 할당을 위한 포인터 int size; public: Str(); //디폴트 생성자 Str(const char *ptr); //문자열로부터 생성 Str(const Str &Other); //복사 생성자 ~Str(); //파괴자 Str &operator =(const Str &Other); const Str operator +(Str &Other) const;//연결 연산자 const Str operator +(const char *ptr) const { return *this+Str(ptr); } int length() const { return strlen(buf); } frie..

템플릿의 구체적 명시화를 이용한 간단한 프로그램 ^^

#include using namespace std; template T Add(T a, T b) { return a+b; } template double Add(double a, double b) { return a+b; } template char * Add(char * a, char * b) { int data=0 ; int data1=0; data = strlen(a); data1 = strlen(b); char * cData = new char [data+data1+1]; strcpy(cData,a); strcpy(cData+data,b); return cData; } void main() { int a=1,b=2; char * str1 = "템gggdddddd릿"; char * str2 = "..