분류 전체보기

Kernel Synchronization (Windows) 유니프로세서 시스템에서는 인터럽트 마스크를 사용해서 전역 자원에 대한 접근을 보호한다. 멀티프로세서 시스템에서는 스핀락을 사용한다. - 스핀락을 사용하는 스레드는 선점되지 않는다. (스핀락을 사용하는 스레드가 선점되면 데드락 발생) 사용자 레벨에서 동작하는 디스패처 객체를 제공한다. 이는 뮤텍스, 세마포어, 이벤트, 타이머로 작동된다. 타이머는 시간이 만료되면 하나 이상의 스레드에게 알린다. 이벤트는 조건변수와 유사하게 작동한다. - 어떤 조건을 만족하면 기다리던 스레드에게 notify() 디스패처 객체는 신호가 있는 상태(객체 사용 가능), 신호가 없는 상태(스레드가 차단됨)으로 나뉜다. 디스패처 객체마다 waiting queue가 있다. 오브..
while(test_and_set(&lock)); // CS lock = false; test_and_set : 인자로 들어온 값을 true로 변경하고, 변경 전 target의 값을 반환한다. 스핀락을 구현하기 위해, 인자로 lock이 들어간다고 할 때, 이미 누군가 임계구역에 들어가 있어서 lock이 사용중이라면 true를 반환하므로 true를 반환하는 동안에는 임계구역에 접근을 막는다. 만약 false를 반환했다면 임계구역에 들어가 있는 스레드가 없는 것이므로, 자신이 임계구역에 들어간다. 임계구역에서 벗어날 때는 lock을 false로 바꾼다. while(compare_and_swap(&lock, 0, 1) != 0); // CS lock = false; compare_and_swap : 첫 번째 ..
공유데이터에 대한 동시 액세스는 데이터 불일치를 초래할 수 있기에 협력하는 프로세스의 순서대로 실행되도록 보장하는 스레드 동기화가 필요하다. => 임계구역을 설정해야한다! 각 프로세스는 임계구역에 접근하기 전에 권한을 요청하고, 임계구역이 끝나면 권한을 놓아준다. 임계구역 문제를 해결하기 위해 3가지 조건이 필요하다. 상호배제(mutual exclusion) - 오류가 발생하지 않도록 한 스레드만 진입 가능 진행(progress) - 임계구역에 들어간 프로세스가 없을 때 들어가려는 여러 프로세스가 있을 때 어떤 프로세스가 들어갈지 결정해야함 유한대기(bounded waiting) - 한 번 임계구역에 들어간 프로세스는 그 다음에 다시 들어갈 때 제한을 둬야하고, 모든 스레드는 유한시간 내에 해당 임계구역..
AIMD 손실을 감지할 때까지(타임아웃, 3 중복 ACK) 윈도우를 1씩 증가시키다가 손실이 감지되면 절반으로 줄인다. - 3 중복 ACK가 발생하면 윈도우를 절반으로 줄임 - 타임아웃이 발생하면 윈도우를 1 MSS(가장 큰 세그먼트 크기)로 줄임 TCP rate는 cwnd/RTT (bytes/sec)쯤이다. TCP sender 전송의 최대치는 LastByteSend - LastByteAcked
Principles of congestion control congestion : 긴 딜레이, 패킷 손실 scenario 1 (simplest) 설정 : 하나의 라우터, 무한 크기 버퍼, 입출력 링크 용량 R, 재전송이 필요하지 않음 => 용량이 R/2이면 네트워크 도착이 절반임으로 네트워크가 가득 찬다. 버퍼의 크기가 무한이므로 패킷 손실은 발생하지 않지만, 큐잉 지연이 발생하게 된다. 이에 따라 전송 지연이 증가한다. scenario 2 설정 : 하나의 라우터, 유한 버퍼, 재전송 있음 애플리케이션 레이어은 입력과 출력이 같고, 재전송을 포함한 transport 레이어의 입력은 애플리케이션의 입력보다 크거나 같다. Idealization(이상화) 완벽한 정보 가짐: sender는 라우터 버퍼가 사용 ..
TCP flow control 네트워크 레이어가 전달하는 데이터가 애플리케이션 레이어가 소켓 버퍼에서 삭제하는 데이터보다 빠르면 어떻게 될까? - 이때 필요한게 flow control, receiver의 버퍼가 너무 많고 빠른 전송에 오버플로우되지 않도록, receiver는 sender를 컨트롤한다. TCP receiver는 TCP header의 rwnd field로써 버퍼에 빈자리가 있다고 advertises한다. - 많은 OS에서 RcvBuffer를 자동조정(autoadjust) sender는 rwnd가 도착할때까지 unACKed data의 크기를 제한한다. guarantees(보장된) receive buffer는 overflow되지 않을 것이다. TCP connection management - a..
Real-Time CPU Scheduling Event latency : 이벤트가 발생한 시점부터 해당 이벤트를 처리하는데 걸리는 시간 실시간 시스템의 성능에 영향을 미치는 두 가지 유형의 대기시간이 있다. - interrupt latency : 인터럽트가 발생한 시점부터 해당 인터럽트를 처리하는 루틴이 시작되는 데까지 걸리는 시간 - dispatch latency : 현재 프로세스를 CPU에서 제거하고 다른 프로세스로 전환하는데 걸리는 시간 Dispatch Latency 1. 커널 모드에서 실행중인 프로세스의 선점(preemption) : 기존 프로세스를 실행중이던 CPU에게 그 실행을 중지시킴 2. 낮은 우선순위 프로세스가 높은 우선순위 프로세스가 필요로 하는 자원을 해제(release)하는 것. ..
CPU 스케줄러는 준비 큐에 있는 프로세스 중에서 선택하고 CPU 코어를 그 중 하나에 할당한다. 큐는 다양한 방식으로 정렬될 수 있다. CPU 스케줄링 결정은 프로세스가 다음 중 하나의 상태로 전환될 때 발생한다. 1. 실행 중인 상태에서 대기 상태로 전환될 때 2. 실행 중인 상태에서 준비 상태로 전환될 때 3. 대기 상태에서 준비 상태로 전환될 때 4. 종료될 때 실행 중인 상태에서 대기 상태로 전환될 때와 종료될 때는 비선점(nonpreemptive)이다. -> CPU를 안놔줌 running -> ready 일때와 waiting -> ready 일때는 선점(preemptive)이다. -> CPU를 한정된 시간만 사용 공유 데이터에 대한 액세스를 고려해야함 - 경쟁상태 발생 가능 커널 모드에서 선..
푸더기
'분류 전체보기' 카테고리의 글 목록 (16 Page)