프로그래밍/NetWork 스피비 2011. 5. 23. 12:46
교착상태(DeadLock)은 서로 다른 두개의 작업(트랜잭션)이 리소스 잠금을 교차해서 획득하려 할 때 발생합니다. 가장 보편적인 DeadLock그림입니다. T1작업은 R1(리소스)의 잠금을 획득하고 R2를 액세스 하려 합니다. 동시에 T2 작업은 R2(리소스)의 잠금을 획득하고 R1을 액세스 하려 합니다. 이처럼 둘중 하나가 중지되지 않는 한 빼도박도 못하는 대치 상황이 바로 교착상태입니다. 이 교착상태는 데이터외에 다른 리소스들에서도 발생할수 있는데요. 자주 일어날수 있는 상황은 아니지만 충분히 가능성은 있어 보입니다. 간단히 몇가지만 설명드리자면 - 스레드 할당을 기다리는 대기작업이 어떤 리소스를 소유하고 있습니다. 불행히도 현재 모든 스레드들의 작업들이 대기하고 있는 그 리소스를 사용해야 하는 경..
프로그래밍/NetWork 스피비 2011. 5. 23. 11:08
1. 스레드 동기화 0) 동기화란? -작업들 사이의 수행 시기를 맞추는 것. 사건이 동시에 일어나거나, 일정한간격을 두고 일어나도록 시간의 간격을 조정하는 것을 이른다. 1) 스레드 동기화(thread synchronization) 필요성 - 멀티 스레드를 사용하는 프로그램에서 두 개 이상의 스레드가 공유 데이터를 접근하는 경우 2) 다양한 스레드 동기화 기법 3) 스레드 동기화 원리 교착상태에 대해서 알아보자 [프로그래밍/NetWork] - 교착상태 (DeadLock) 그리고 이제 각종 동기화 기법에대해서 하나씩 자세히 알아보자!!!! 2. 임계 영역(CriticalSection) - 두 개 이상의 스레드가 공유 리소스를 접근할 때, 오직 하나의 스레드 접근만 허용해야 하는 경우에 사용 2_1)특징 -..
프로그래밍/NetWork 스피비 2011. 5. 23. 10:49
1.프로세스와 스레드 1)용어정리 - 프로세스(process) : 메모리를 비롯한 각종 리소스를 담고 있는 컨테이너로서 정적인 개념 - 스레드(thread) : 실제 CPU시간을 할당받아 수행되는 실행 단위로서 동적인 개념 - 주 스레드(primary thread) : main()또는 WinMain()함수에서 시작되는 스레드로, 프로세스가 시작할 때 생성 - 컨텍스트 전환(context switch) : CPU와 운영체제의 협동으로 이루어지는 스레드 실행 상태의 저장과 복원 작업 2)컨텍스트 전환 과정 3)스레드 ->스레드 생성과 종료에 대해서 알아보자 3_1) 스레드 생성에 필요한 요소 - 스레드 함수의 시작 주소 - 스레드 함수 실행시 사용할 스택 영역의 크기 3_2) 프로세스의 주소 공간 - 두개의..
프로그래밍/NetWork 스피비 2011. 5. 23. 10:32
윈도우는 멀티 태스킹 시스템입니다. 여러 개의 프로세스(프로그램이 실행되어 메모리에 상주된 형태)를 동시에 실행시킬 수 있는 시스템이라는 뜻입니다. 그러나 실제로 CPU 가 동시에 여러 개의 프로세스를 실행하는 것은 아닙니다. 짧은 시간을 쪼개고 쪼개서 일정한 단위시간을 정하여 (시분할 방식, time-division) CPU 가 돌아가면서 여러 개의 프로그램을 하나씩 실행시키는 형태이지요. CPU 는 어떤 순간에나 하나의 프로세스만을 수행하고 있지만, 시간간격이 워낙 짧은 관계로 사용자의 눈에는 여러 개의 프로세스가 동시에 실행되는 것처럼 보일 뿐입니다. 하나의 프로그램은 하나의 프로세스로 전환되어 실행될 수도 있지만, 여러 개의 프로세스로 나누어 동시에 실행되게 할 수도 있습니다. 이 때, 어떤 프로..
프로그래밍/NetWork 스피비 2011. 5. 16. 11:54
* 윈속 초기화 (윈도우 소켓을 사용하기 위해서는 항상 윈속 초기화 필요 ● wVersionRequested - 프로그램이 요구하는 최상위 윈속 버전 - 하위 8비트에 주(major) 버전을, 상위 8비트에 부(minor) 버전을 넣어서 전달함 ● lpWSAData - WSADATA 타입 변수와 주소 - 시스템에서 제공하는 윈속 구현에 대한 세부 사항을 얻을 수 있음 * 윈속 종료(윈속 초기화가 있으면 끝에는 종료를 시켜주어야 함) * 윈속 초기화와 종료사용 예제 #include int main(int argc, char* argv[]) { WSADATA wsa; // 윈속 초기화 if(WSAStartup(MAKEWORD(2,2), &wsa) != 0){ return -1; } MessageBox(NUL..