1. Dekker's Algorithm

# 프로세스 i 측의 코드
while True:
    ''' LOCK ''' 
    # 프로세스 i가 임계영역에 진입하려함을 표시
    flag[i] = True
    
    # 만약 프로세스 j도 임계영역에 진입하려할 경우
    while flag[j]:
    	# 프로세스 j가 진입할 차례라면 임계영역에 대한 진입 시도를 취소하고
        # j의 차례가 끝날때까지 대기한 뒤 다시 진입시도
    	if turn == j:
            flag[i] = False
            while turn == j:
            	pass
            flag[i] = True
    ''' END LOCK '''
    
    ''' 임계 영역 '''
        
    ''' UNLOCK '''
    # 임계 영역에서의 작업이 끝나고 빠져나옴
    flag[i] = False
        
    # 프로세스 j 측에 차례를 넘김
    turn = j
    ''' END UNLOCK '''
  • 두 개의 프로세스간의 상호배제를 보장하는 최초의 알고리즘

  • turn 과 flag 두 개의 공유 데이터를 사용하여 구현
    => turn 만을 사용할 경우 한쪽이 실행되지 않을 경우 차례가 넘어가지 않아 하나의 프로세스가
         임계영역에 연속으로 진입할 수 없는 문제가 발생

    => flag 만을 사용할 경우 서로 동시에 임계영역에 진입하려할 경우 교착상태(Deadlock)에 빠지는 문제가 발생

  • Dekker's Algorithm은 이 두가지를 동시에 사용하여 상호배제를 보장
    => 프로세스 j측은 i와 j의 위치를 맞바꾸어 작성하면 된다

 

 

2. Peterson's Algorithm

# 프로세스 i측의 코드
while True:
    ''' LOCK '''
    # 프로세스 i가 임계영역에 진입하려함을 알림
    flag[i] = True
    
    # 차례를 우선 프로세스 j에게 넘겨준다
    turn = j
    
    # 만약 j의 차례이고 j가 임계영역에 들어가고자 할 경우 대기
    while flag[j] && turn == j:
    	pass
    ''' END LOCK '''
    
    ''' 임계 영역 '''
    
    ''' UNLOCK '''
    # 임계 영역에서의 작업이 끝나고 빠져나왔음을 알림
    flag[i] = False
    ''' END UNLOCK '''
  • Dekker's Algorithm 과 거의 유사하지만 차례를 상대에게 양보하는 형태로 이루어지며 보다 단순한 구조를 가짐

  • 둘이 거의 동시에 실행됐지만 i가 차례를 양보하는 것이 미세하게 빨랐을 경우를 가정
    • 프로세스 i와 j는 모두 flag 값을 True로 하여 진입의사를 밝힌다.
    • i가 먼저 j에게 차례를 넘기고 직후에 j도 i에게 차례를 넘겨 결국 i의 차례가 된다.
    • j가 진입을 원하고있지만 i의 차례이기에 프로세스 i가 임계영역에 들어간다
    • j는 i가 진입을 원하고있고 i의 차례이기에 대기상태에 들어간다(Busy Waiting)
    • i는 작업을 마치고 임계영역을 빠져나오며 flag 값을 False로 한다.
    • j는 여전히 i의 차례이지만 i가 flag 값을 False로 했기에 임계영역에 진입하여 작업을 수행하고 빠져나온다.

 

 

3. Dijkstra's Algorithm

# 프로세스의 상태(flag)
# idle : 프로세스가 임계 영역에 진입을 시도하고있지 않은 경우
# want-in : 프로세스가 임계 영역 진입을 시도하고있는 경우
# in-CS : 프로세스가 임계 영역 직전 또는 임계 영역 내에 있는경우

# 프로세스 i측의 코드
while True:
    ''' LOCK '''
    while True:
    	''' 임계 영역 진입 시도 1단계 '''
        # 프로세스 i가 임계 영역에 진입하려함을 알림
        flag[i] = want-in
        
        # 자신의 차례가 아닐 경우
    	while turn != i:
            # 현재 실행중이던 프로세스의 작업이 끝났는지 확인, 끝났을 경우 자신의 차례로 돌리고 진입
            # 이 과정에서 여러개의 프로세스가 동시에 통과하여 2단계에 진입할 수 있다.
            if flag[turn] == idle:
            turn = i
	
    	# 1단계를 통과한 일부 프로세스들은 2단계에 진입
        # 임계 영역 직전에 있음을 알림
        flag[i] = in-CS
        
        # 모든(n개의) 프로세스들의 flag값을 확인하여 자신 외에도 in-CS 상태인 프로세스가 존재하는지 확인
        j = 0
        while j < n and (j == i or flag[j] != in-CS):
            j = j + 1;
          
        # 만약 자신 외에 in-CS 상태인 프로세스가 존재하지 않는다면 반복문을 빠져나가 임계 영역에 진입
        if j == n:
            break
	''' END LOCK '''
    
	''' critical section '''
	
    ''' UNLOCK '''
    # 임계 영역에서의 작업을 마치고 idle 상태로 돌아간다.
    flag[i] = idle
    ''' END UNLOCK '''
  • 프로세스의 상태를 idle, want-in, in-CS 3단계로 나누어 n개의 프로세스간의 상호배제를 구현

  • turn 의 경우 반드시 임계영역에 들어간 프로세스의 번호가 되진 않지만 그럴 경우
    1단계로 되돌아간 프로세스 중 다시 진입을 시도하는 프로세스가 while turn != i 반복문을
    바로 통과하여 다시 2단계로 진입하게되기 때문에 문제는 없다.

 

 

4. SW Solution의 문제점

  • 복잡한 구현

  • 느린 속도
    => Dijkstra의 알고리즘만 보더라도 의미없는 반복을 계속하는 경우가 많이 발생할 것을 예상할 수 있음

  • lock, unlock 연산 수행중 스케줄러에 의해 자원을 회수당할 수 있음(Preemption)
    => 해당 연산 수행중 interrupt를 억제하는 것으로 해결할 수 있지만 오버헤드 발생

  • Busy Waiting, 즉 대기시간동안 계속해서 반복문 내를 순환하는 방식이기에 비효율적

 

1. 동기화(Synchronization)란?

  • 다중 프로그래밍(multi-programming) 시스템에서는 다수의 프로세스(스레드 포함)가 동시에 실행
  • 동시에 실행되는 프로세스간에 공유하는 자원이나 데이터가 존재할 경우 문제가 발생할 수 있음
  • 프로세스가 서로 비동기적이라고 함은 프로세스가 서로의 존재를 모르고 독립적으로 동작중임을 의미한다.
  • 프로세스의 실행 순서를 맞추거나 공유 자원에 대한 접근 정책을 설정여 문제를 해결하는 것을 동기화라고 한다.

 

 

2. 상호 배제(Mutual Exclusion)

  • 코드에서 여러 프로세스가 공유하는 데이터에 접근하는 부분을 임계 영역(Critical Section)라고 한다.
  • 임계 영역에 여러 프로세스가 동시에 들어가지 않도록 하는 것을 상호 배제(Mutual Exclusion)라고 한다.

  • 기본 연산
    • Lock
      • 임계영역에 진입하기 위한 연산
      • 임계영역에 진입한 다른 프로세스가 존재하지 않을 경우 진입
      • 진입하는 즉시 다른 프로세스가 들어오지 못하도록 함

    • Unlock
      • 임계영역에서의 작업을 마치고 빠져나오는 연산
      • 임계영역에 다른 프로세스가 들어올 수 있도록 비어있음을 알림

  • 상호배제 구현의 조건
    • 상호 배제(Mutual Exclusion)
      • 말그대로 임계영역에 진입한 프로세스가 있다면 다른 프로세스는 진입할 수 없도록 해야함

    • 진행(Progress)
      • 임계영역에 진입한 프로세스가 없는 상태이고 하나 이상의 프로세스가 임계영역에 진입하고자
        하는 상황일 경우 어느 프로세스를 임계영역에 진입시킬지 정해진 시간 내에 선택해야함

    • 한정된 대기(Bounded Waiting)
      • 프로세스의 임계영역으로의 진입까지의 대기시간은 유한해야한다.

  • 상호배제 구현의 방식
    • 소프트웨어적 해결책(SW Solution)
      • 개발자가 소프트웨어 수준에서 직접 상호배제를 보장하는 코드를 작성하는 방식
      • Dekker's Algorithm, Peterson's Algorithm, Dijkstra's Algorithm 등이 있다.

    • 하드웨어적 해결책(HW Solution)
      • 하드웨어 수준에서 자체적으로 상호배제를 보장하도록 설계하는 방식
      • TestAndSet(TAS) 구조 등이 있다.

    • OS에서 지원하는 소프트웨어적 해결책(OS Supported SW Solution)
      • 운영체제가 자체적으로 지원하는 소프트웨어적 해결책
      • 스핀 락(Spin Lock), 뮤텍스(Mutex), 세마포어(Semaphore) 등이 있다.

    • 언어 수준에서의 해결책(Language-Level Solution)
      • 프로그래밍 언어에서 자체적으로 지원하는 소프트웨어적 해결책
      • 자바의 모니터(Monior)가 대표적이다.

'CS > 운영체제' 카테고리의 다른 글

#6 동기화(Synchronization) 3 - HW Solution  (0) 2021.12.24
#5 동기화(Synchronization) 2 - SW Solution  (0) 2021.12.23
#3 프로세스 스케줄링(Scheduling)  (0) 2021.12.21
#2 스레드(Thread)  (0) 2021.12.20
#1 프로세스(Process)  (0) 2021.12.14

1. 성능(Performance) 판단의 지표 (용어정리)

  • CPU 사용률(CPU Utilization)
    • 단위 시간동안 프로세서가 작업중인 시간의 비율
    • 사용률이 높을수록 CPU를 효율적으로 사용하고 있는 상태

  • 처리율(Throughput)
    • 단위 시간당 완료하는 작업의 수

  • 반환 시간(Turnarount Time)
    • 요청된 작업이 완료될 때 까지의 시간
    • 종료 시간 - 도착 시간

  • 대기 시간(Waiting Time)
    • 작업이 Ready Queue 에서 대기하는 시간
    • 시작 시간 - 도착 시간

  • 반응 시간(Response Time)
    • 요청된 작업에 반응이 돌아올 때 까지의 시간
    • 첫 응답이 돌아온 시간 - 도착 시간
  • 실행 시간(Burst Time)
    • 요청된 작업이 실제로 실행된 시간
    • 종료 시간 - 시작 시간

 

 

2. 스케줄링의 기준

  • 스케줄링 기법의 선택을 위해 고려해야할 항목

  • 프로세스의 특성
    • 프로세서의 작업비중과 입출력(I/O) 작업비중 중에서 어느쪽이 높은지를 고려

  • 시스템의 특성
    • 실시간, 대화형 시스템의 경우 반응 시간이 핵심 지표가 된다.
    • 일괄 처리 시스템(batch system) 등의 경우 단위 시간당 처리율(Throughput)이 핵심지표가 된다.

  • 프로세스의 긴급성(Urgency)
    • hard-realtime : 지정된 응답시간 내에 반응에 실패할 경우 심각한 피해가 발생하는 시스템
    • soft-realtime : 지정된 응답시간 내에 반응에 실패할 경우 성능저하가 발생할뿐 동작엔 문제가 없는 시스템
    • non-realtime : 실시간 시스템이 아닌 경우

  • 프로세스의 우선순위(Priority)

  • 프로세스의 실행시간(Service Time)

 

 

3. 스케줄링의 단계

  • Short-Term 스케줄링
    • Ready Queue에서 대기중인 프로세스중 어느 프로세스에게 프로세서(CPU)를 할당할지 결정
    • 일반적으로 말하는 스케줄링은 단기 스케줄러에 의한 스케줄링을 의미함
    • 가장 자주 발생하는 스케줄링이기 때문에 성능에 미치는 영향도 매우큼 => 속도가 매우 빨라야한다.

  • Mid-Term 스케줄링
    • 너무 많은 프로세스에게 메모리를 할당하여 시스템 성능이 저하될 경우
      메모리에 적재된 프로세스의 수를 유동적으로 조절하

    • 메모리에 적재될 프로세스중 일부를 선택하여 컨텍스트를 디스크의 스왑 영역에
      저장해두고 메모리를 해제한다. 이를 스왑 아웃(Swap Out)이라 한다.

  • Long-Term 스케줄링
    • 메모리에 동시 적재 가능한 프로세스의 수(multi-programming degree) 조절
      => Ready Queue 에 들어갈 프로세스의 수 조절

    • 현대의 시분할 시스템이나 실시간/대화형 시스템의 경우 장기 스케줄러를 두지 않거나 최소화시킴
      • 시분할 시스템의 경우 모든 프로세스에 공평하게 정해진 시간동안 자원을 분배하기 위해,
        실시간/대화형 시스템의 경우 요청을 받았을 때 정해진 시간 내에 응답하기 위해 바로 메모리를
        할당하고 Ready Queue에 넣어야하기 때문에 Long-Term 스케줄링의 의미가 없기 때문
    • 일괄 처리 시스템(batch system)에 적합하다.

 

 

4. 스케줄링 정책

  • 비선점 스케줄링(Non-preemptive Scheduling)
    • 한번 자원을 할당받고나면 실행이 완료되고 이를 반납하기 전까지 사용할 수 있음

    • 보다 우선순위가 높은 프로세스가 도착하더라도 자신의 작업은 끝까지 수행할 수 있음

    • 한 작업이 모두 수행되기 전까지 다른 작업에 대해 응답할 수 없기에 평균 응답시간이 길어짐

    • 우선순위가 높은 작업이 먼저 실행되기 시작한 우선순위가 낮은 작업에 밀리는 경우가 자주 발생

    • 하나의 프로세스가 실행을 마칠 때 까지 Context Switching이 발생하지 않아 오버헤드가 적음

  • 선점 스케줄링(Preemptive Scheduling)
    • 자원을 할당받은 후 실행이 아직 완료되지 않았어도 보다 우선순위가 높은 프로세스가 도착하거나
      자신의 사용시간이 만료되면 자원을 반납해야함

    • 선점에 의한 Context Switching 이 자주 발생 => 오버헤드가 큼
    • 시분할 시스템이나 실시간/대화형 시스템에는 이 방식이 적합

  • 우선순위(Priority)의 결정
    • 정적 우선순위(Static Priority)
      • 프로세스 생성시 변하지 않는 우선순위를 지정
      • 구현이 쉽고 overhead가 적음
      • 상황 변화에 따른 유연한 대처 불가

    • 동적 우선순위(Dynamic Priority)
      • 프로세스의 상태 변화에 따라 Priority 변경
      • 구현이 복잡하고 Priority 계산을 위한 overhead가 발생
      • 상황 변화에 따른 유연한 대처 가능

 

 

5. 스케줄링 알고리즘

 ① 비선점형 스케줄링 알고리즘

  • FCFS(First Come First Served)
    • 대기열에 먼저 들어온 프로세스를 우선적으로 실행하는 알고리즘

    • 장점
      • 구현이 매우 간단하며 오버헤드 또한 거의 없음
      • 작업이 종료될 때를 제외하면 Context Switching이 발생하지 않아 CPU 사용률이 매우 높다
      • 도착한 작업은 자신의 순서가 오면 반드시 실행되기에 starvation(기아) 이 발생하지 않는다.

    • 단점
      • 평균 응답시간이 매우 길다
      • 하나의 오래걸리는 작업으로 인해 다른 작업들의 대기시간이 길어지는 문제

  • SJF(Shortest Job First)
    • 실행시간(Burst Time)이 가장 적은 프로세스가 우선적으로 실행되는 알고리즘
    • 장점
      • 평균 대기시간 최소화
      • 시스템 내 프로세스의 수를 최소화(실행시간이 짧은 작업들이 빠르게 종료되기 때문)

    • 단점
      • 프로세스의 실행시간을 정확히 예측하는 것이 현실적으로 어려움
      • 실행시간이 긴 프로세스가 계속해서 우선순위에서 밀리는 starvation(기아)이 발생

  • HRRN(Highest Response Ratio Next)
    • Response Ratio 공식에 따라 계산된 우선순위가 높은 프로세스를 우선적으로 실행하는 알고리즘
    • Response Ratio = (Service Time + Waiting Time) / Service Time
    • 서비스 시간이 짧을수록, 대기시간이 길수록 우선순위가 높아지는 방식
    • 대기시간의 증가에 따라 우선순위가 높아져 starvation이 발생하지 않도록 하는 에이징(aging) 기법을 사용

 

 ② 선점형 스케줄링 알고리즘

  • RR(Round Robin)
    • FCFS의 선점형 버전
    • 기본적으로는 대기열에 가장 먼저 도착한 프로세스를 먼저 처리
    • 대신 자원의 사용 시간에 제한을 두어 시간이 만료되면 자원을 반납하고 대기열의 맨 뒤로 간다

    • 장점
      • 특정 프로세스에 의한 자원 독점의 방지
      • 평균 응답시간이 길어지는 문제 해결

    • 단점
      • 잦은 Context Switch로 인한 오버헤드가 큼
    • 시분할 시스템이나 실시간/대화형 시스템에 적합
  • SRT(Shortest Remaining Time)
    • SJF의 선점형 버전 
    • 남은 실행시간이 가장 적은 프로세스를 먼저 처리
    • 남은 실행시간이 더 적은 프로세스가 대기열에 들어오면 그 프로세스에 의해 자원이 선점당함

    • 장점
      • SJF의 장점(대기시간의 최소화, 시스템 내 프로세스 수의 최소화)을 극대화

    • 단점
      • SJF와 마찬가지로 실행시간(Burst Time)의 측정이 어려움
      • 남은 실행시간(Remaining Time)을 지속적으로 추적해야함

  • MLQ(Multi Level Queue)
    • 프로세스들을 그룹화하여 그룹마다 독자적인 큐(대기열)를 사용하는 스케줄링 기법
    • 프로세스는 작업의 특성(작업의 중요도, 빠른 응답시간이 요구되는지 등)에 따라 분류
    • 각 큐는 그 특성에 맞는 독자적인 스케줄링 기법을 적용
    • 한번 배정된 큐에서는 이동할 수 없음
    • 큐 사이에는 우선순위 기반의 스케줄링 사용

    • 장점
      • 작업의 특성에 따라 적합한 스케줄링 기법을 독립적으로 적용 가능

    • 단점
      • 여러개의 큐를 관리해야하는 만큼 스케줄링의 오버헤드가 보다 큼
      • 우선순위가 낮은 큐의 starvation이 발생할 수 있음
      • 처음에 프로세스를 적절한 큐에 배정하지 못하면 이동이 불가능하기에 프로세스에 대한 사전정보가 필요

  • MFQ(Multi Level Feedback Queue)
    • 프로세스가 처음 배정된 큐에서 다른 큐로 이동 가능해진 MLQ 방식
    • Feedback 을 통해 우선순위를 조정
    • 프로세스에 대한 사전정보를 알지 못해도 HRN과 비슷한 효과를 볼 수 있음

    • 장점
      • MLQ가 그러했듯이 각 큐마다 별도의 스케줄링 정책을 사용하는 것으로
        프로세스의 특성에 적합한 스케줄링 방식 적용이 가능

      • 입출력 위주(I/O Bounded)의 프로세스를 상위 큐로 이동
        => I/O 위주의 프로세스는 CPU 사용시간이 짧기 때문(적은 service time)

      • 대기시간이 길어진 프로세스를 상위 큐로 이동(Aging)
        => starvation 의 방지

    • 단점
      • 복잡한 설계와 구현
      • 다중 큐의 관리로 인한 오버헤드

 

'CS > 운영체제' 카테고리의 다른 글

#5 동기화(Synchronization) 2 - SW Solution  (0) 2021.12.23
#4 동기화(Synchronization) 1 - 상호 배제의 개념  (0) 2021.12.23
#2 스레드(Thread)  (0) 2021.12.20
#1 프로세스(Process)  (0) 2021.12.14
#0 컴퓨터의 구조  (0) 2021.12.13

1. 스레드(Thread)란?

  • 프로세스 내에서 실행되는 작업의 단위
  • 운영체제의 스케줄러에 의해 관리될 수 있는 최소 작업단위
  • 하나의 프로세스에는 다수의 스레드가 존재할 수 있다.
  • 하나의 프로세스에 속한 스레드들은 프로세스가 운영체제로부터 할당받은 자원을 공유한다.
  • 단, Thread ID(tid)나 PC(Program Counter), SP(Stack Pointer) 등의 Register Set 등의
    제어요소나
    스택 영역의 경우 공유하지 않고 각 스레드가 독립적으로 가지게된다.
  • 경량 프로세스(Light Weight Process)라고도 불린다.

 

 

2. 스레드의 장점

  • 응답 속도 증가
    • 일부 스레드의 처리가 지연되더라도 다른 스레드가 작업을 계속할 수 있음
  • 자원 공유
    • 제어요소나 스택영역을 제외한 자원을 공유하기에 Context Switch에 의한 오버헤드가 대폭 감소
    • 프로세스를 새로 생성하는 것에 비해 경제적

  • 멀티 프로세서 활용
    • CPU 내의 여러개의 코어를 동시에 활용하여 병렬적으로 작업을 처리하는것으로 성능 향상

 

 

3. 스레드의 구현

  • 사용자 수준 스레드(User-Level Thread)
    • 스레드의 생성, 스케줄링 등을 사용자 영역의 라이브러리로 구현
    • 커널과는 무관하게 구현되어있기 때문에 커널의 개입을 받지않음

    • 장점
      • 생성, 관리(스케줄링, 동기화 등)에 커널이 개입하지 않기에 오버헤드가 적음
      • 라이브러리 형태로 지원되는 기능인만큼 이식성이 좋다

    • 단점
      • IO가 발생한 스레드가 하나라도 존재할 경우 모든 스레드가 대기상태가 된다.

  • 커널 수준 스레드(Kernel-Level Thread)
    • 커널에서 직접 스레드를 관리
    • 스케줄링의 최소단위가 스레드가 됨

    • 장점 
      • 각 스레드가 커널에 의해 개별적으로 관리되기에 하나의 스레드가 대기상태가 되어도
        다른 스레드는 정상적으로 작업을 수행할 수 있음

    • 단점
      • 스레드의 생성, 관리에 커널이 개입하기에 사용자 수준 스레드에 비해 오버헤드가 크다.

 

 

4. 멀티 스레드 모델

  • n:1 모델
    • 다중 사용자 스레드 : 단일 커널 스레드
    • 사용자 스레드만을 사용하는 모델

  • 1:n 모델
    • 단일 사용자 스레드 : 다중 커널 스레드
    • 커널 스레드만을 사용하는 모델

  • n:m 모델
    • 다중 사용자스레드 : 다중 커널 스레드
    • 사용자 스레드와 커널 스레드를 모두 사용하는 혼합형 모델
    • 사용자 입장에서는 원하는 만큼의 스레드를 생성하여 사용
    • 커널 입장에서는 다수의 사용자 스레드를 그보다 적은 수의 커널 스레드가 분할하여 담당
    • 실제 OS에서는 이 모델이 사용되고있다.

 

1. 프로세스(Process)란?

  • 하나, 또는 여러개의 스레드(thread)로 실행되는 작업의 단위
  • 컴퓨터 프로그램의 인스턴스(instance)
  • 효율적인 실행을 위해 운영체제의 커널(kernal)에 의해 관리
  • 운영체제로부터 PCB(Process Control Block)를 할당받고 이를 통해 운영체제의 관리를 받게된다.
  • 프로세스의 작업은 필요한 프로세서(CPU), 메모리, 주변기기 등의 자원을 운영체제에 요청, 할당받아 실행된다. 

 

 

2. 프로세스 제어 블록(Process Control Block)

  • 운영체제가 프로세스를 제어하기 위해 프로세스에게 할당하는 데이터 블록
  • PCB의 정보를 어떻게 참조하고 갱신하냐에 따라 OS의 성능이 크게 갈린다.

 

  • 프로세스 실행에 필요한 데이터를 보관
    • PID(Process IDentifider)
      • 프로세스의 고유 식별자

    • 프로세스의 상태(Process State)
      • 생성, 실행, 준비, 대기, 종료 등 프로세스의 상태 정보

    • PC(Program Counter)
      • 다음에 실행될 명령어의 위치를 나타내는 포인터

    • 레지스터 정보(Register Inforamation)
      • 프로세스가 실행중이었을 때의 CPU의 레지스터 정보를 저장해두는 영역

    • 스케줄링 정보(Scheduling Information)
      • 프로세스의 우선순위 등 스케줄링에 필요한 정보

    • 메모리 관리 정보(Memory Management Information)
      • 페이지 테이블, 세그먼트 테이블, 메모리 제한 등의 메모리 관리를 위한 정보

    • 입출력 정보(I/O Information)
      • 프로세스가 할당받은 주변장치나 파일에 대한 정보

    • 계정 정보(Accounting Information)
      • CPU 사용시간, 시간제한, 실행 ID 등의 정보

 

  • 모든 프로세스는 생성시에 고유의 PCB를 할당받고 이는 프로세스의 종료시 반환된다.
    PCB의 일부 정보는 프로세스가 종료된 후에도 잠시동안 소멸되지 않고 남아있다.

 

  • Context Switching
    • 인터럽트가 발생할 경우 실행중인 프로세스의 처리를 중단하고 PCB에 프로세스의
      상태를 저장(Context Saving)하고 다음으로 실행될 프로세스의 정보를 레지스터에
      적재(Context Restoring)하는 과정

    • 인터럽트의 발생 요인
      • 기계적 고장, 전원부족 등 프로그램 외적인 결함(External Interrupt)
      • CPU 사용시간 만료(Timeout), 입출력 요청의 완료 등 외부로부터의 인터럽트 요청
      • 입출력 요청(I/O Request)이나 자식 프로세스 생성(Fork Child) 등의 커널 서비스 요청(System Call)
      • 프로그램의 내부적 결함, 즉 예외(Exception)
    • Context Switching의 오버헤드
      • Context Switching 이 발생하는 동안 CPU는 아무 작업도 실행하지 않음
      • 자주 발생할 수록 오버헤드로 인해 성능 저하를 가져올 수 있음

 

 

3. 프로세스의 상태(Process State)와 전이

 ① 프로세스의 상태

  • 생성(New / Create) : 프로세스가 생성되어 PCB를 할당받은 상태
  • 준비(Ready) : 프로세스가 실행 준비를 마치고 CPU만 할당받으면 언제든 실행 가능한 상태
  • 실행(Run) : 프로세스가 CPU를 할당받아 실행되고있는 상태
  • 대기(Block / Wait) : 프로세스가 인터럽트의 처리가 완료되길 대기하고있는 상태
  • 종료(Terminated) : 프로세스의 실행이 종료된 상태

 

 ② 프로세스의 상태 전이(Process State Transition)

출처: https://www.d.umn.edu/~gshute/os/processes-and-threads.xhtml

  • Creation
    • 생성(New)된 프로세스가 준비 상태(Ready)가 되어 대기열에 들어감

  • Dispatch
    • 준비상태(Ready)의 프로세스가 CPU를 할당받아 실행상태(Run)에 들어감

  • Timeout
    • 실행(Run)중이던 프로세스가 운영체제로부터 할당받은 CPU 사용시간을 모두 소진하여
      준비상태(Ready)로 되돌아감

  • Blocking
    • 실행(Run)중이던 프로세스가 입출력 요청, 시그널 대기 등으로 인해 발생한 인터럽트의 처리가
      완료될 때 까지 대기상태(Block)에 들어감

  • Unblocking / Wake up
    • 인터럽트의 처리가 완료되어 대기상태(Block)였던 프로세스가 다시 준비상태(Ready)가 되어
      대기열에 들어감

  • Termination
    • 실행(Run)중이던 프로세스가 작업을 마치고 종료상태(Terminated)에 들어감

1. 프로세서(Processor) - CPU

 ① CPU(Central Processing Unit)

  • 컴퓨터의 중앙 프로세서
  • 컴퓨터의 모든 장치의 동작을 제어

 

 ② 레지스터(Register)

  • 프로세서 내부의 메모리
  • 프로세서가 사용하기 위한 데이터를 저장
  • 컴퓨터를 구성하는 메모리중 가장 빠름
  • 사용자 가시 레지스터
    • 데이터 레지스터(Data Register)
      • 함수 연산에 필요한 데이터를 저장
      • 산술/논리 연산에 사용하며 연산 결과로 플래그값 저장

    • 주소 레지스터
      • 주소나 유효 주소를 계산하기 위해 필요한 주소의 일부분을 저장
      • 주소 레지스터에 저장한 값을 사용하여 산술연산 가능

  • 사용자 불가시 레지스터
    • 프로그램 카운터(PC - Program Counter)
      • 다음에 실행할 명령어의 주소를 보관하는 레지스터
      • 실행할 명령어를 메모리에서 읽어오면 명령어 길이만큼 증가, 다음명령어를 가리킴
      • 분기명령어는 목적 주소로 갱신

    • 령어 레지스터(IR - Instruction Register)
      • 현재 실행중인 명령어를 보관하는 레지스터

    • 누산기(ACC - Accumulator)
      • 데이터를 일시적으로 저장하는 레지스터

    • 메모리 주소 레지스터(MAR - Memory Address Register)
      • 프로세서가 참조하려는 데이터의 주소를 명시하여 메모리에 접근하는 버퍼 레지스터

    • 메모리 버퍼 레지스터(MBR - Memory Buffered Register)
      • 프로세서가 메모리에서 읽거나 메모리에 저장할 데이터를 보관하는 버퍼 레지스터
      • 메모리 데이터 레지스터(MDR - Memory Data Register)라고도 함

  • 프로세서는 위의 다양한 레지스터들과 산술/논리 연산장치인 ALU(Arithmetic Logic Unit)
    사용하여 연산을 수행하고 시스템 버스로 연결된 입출력장치나 메모리와 데이터를 주고받는다.

  • 운영체제는 사용자가 실행한 응용프로그램들이 효율적으로 동작하도록 CPU 자원을 적절히
    할당하고 회수하는 등의 작업을 수행한다.

 

 

2. 메모리(Memory)

  • 데이터를 저장하기 위한 기억장치

  • 컴퓨터를 구성하는 메모리의 종류 - 아래로 내려갈수록 느리지만 값이 싸고 용량이 크다
    • 레지스터(Register)
      • 프로세서 내부의 가장 빠른 메모리
    • 캐시(Cache)
      • 프로세스 내부의 L1, L2 캐시 등의 메모리
      • CPU와 메인메모리 사이의 병목현상 해소

    • 메인 메모리(Main Memory)
      • 프로세서가 수행할 프로그램과 데이터 저장
      • CPU 처리속도에 비해 너무 느린 디스크 입출력 속도로 인한 병목 현상을 해소

    • 보조 기억 장치(Auxiliary Memory)
      • 데이터를 사용하기 위해서는 메인 메모리로 가져와야하는 보조 메모리
      • 디스크나 SSD 등이 대표적

  • 캐시의 동작
    • 일반적으로 하드웨어적으로 관리
    • 캐시 히트(Cache Hit)
      • 필요한 데이터 블록이 캐시메모리 내에 존재
      • 바로 가져와 사용

    • 캐시 미스(Cache Miss)
      • 필요한 데이터 블록이 캐시메모리 내에 존재하지 않음
      • 메인 메모리에서 데이터를 가져와야함

    • 지역성(Locality)
      • 공간적 지역성(Spatial Locality)
        • 참조한 주소와 인접한 주소를 참조하는 특성
        • 순차적 프로그램 수행 등

      • 시간적 지역성(Temporal Locality)
        • 한 번 참조한 주소를 곧 다시 참조하는 특성
        • 반복문 등의 순환문

      • 지역성을 고려하여 캐싱 알고리즘을 적절히 구성하면 높은 캐시 적중률을 얻을 수 있다

  • 운영체제는 응용프로그램이 필요로하는 만큼의 메모리를 효율적으로 할당해주는 작업을 수행한다.

 

 

3. 주변 장치

  • 입출력 장치(I/O Device) : 키보드, 마우스, 모니터 등 데이터를 입력, 출력하기 위한 장치

  • 저장 장치(Storage) : 하드디스크, SSD, USB, CD 등의 보조기억장치

  • 운영체제는 응용프로그램의 입출력 요청이나 저장 장치에 대한 읽고쓰기 요청 등을
    효율적으로 처리하여 그 결과를 응용프로그램에게 전달해주는 작업을 수행한다.

 

 

1. SSL

  • HTTP는 기본적으로 플레인 텍스트로 전송하기에 보안에 취약

  • TLS(Transport Layer Security), 혹은 SSL(Secure Socket Layer) 이라 불리는 프로토콜을 사용하여
    전송계층간의 통신시에 데이터를 암호화하는 것으로 데이터 유출을 방지한다.

  • TCP의 3-way handshaking 절차 이후에 SSL handshaking 과정을 거쳐 암호화 통신이 가능한 상태가 된다.

  • SSL handshaking
    • Client Hello
      • 클라이언트는 서버에 사용 가능한 암호화 방식들과 랜덤 데이터를 전송

    • Server Hello
      • 서버는 클라이언트가 보낸 암호화 방식중 하나를 선택
      • 선택한 암호화 방식을 자신이 생성한 랜덤 데이터와 함께 클라이언트에게 전송

    • Certificate
      • 서버는 CA(인증기관)에서 발급받은 SSL 인증서를 클라이언트에게 전송
      • 이때, 인증서 내에 자신이 발급한 공개키를 첨부(개인키는 자신이 보관)

    • Server Key Exchange
      • Certificate 과정에서 클라이언트에게 보낸 인증서에 서버의 공개키가 포함되지 않았다면 직접 클라이언트에게 공개키를 전송

    • Server Hello Done
      • 서버가 행동을 마쳤음을 클라이언트에게 알림

    • Client Key Exchange
      • 클라이언트는 CA의 공개키를 사용하여 서버가 보낸 인증서를 검증
      • 인증서가 검증되면 실제로 데이터를 암호화하기 위한 대칭키를 생성
      • 대칭키를 서버가 보낸 공개키로 암호화하여 서버에게 전송
      • 전송된 대칭키는 중간에 가로채더라도 서버의 공개키로 암호화되어있어 서버의 개인키 없이는 복호화가 불가능하므로 서버와 클라이언트는 안전하게 암호화키를 공유하게 됨

    • Change Cipher Spec / Finished
      • 클라이언트와 서버가 암호화 통신을 위한 준비가 완료되었음을 알리기 위해 서로 번갈아가며 패킷을 전송.

 

 

2. HTTPS

  • 기존의 HTTP에 SSL 프로토콜을 추가하여 보안성을 추가한 확장 프로토콜
  • 443번 포트를 사용

'CS > 네트워크' 카테고리의 다른 글

#10 네트워크 보안 1 - 암호화  (0) 2021.12.06
#9 Wireless Network & Mobile Network  (0) 2021.11.30
#8 Link Layer(Data Link Layer + Physical Layer)  (0) 2021.11.25
#7 Network Layer  (0) 2021.11.18
#6 Transport Layer  (0) 2021.11.16

1. 대칭키 암호화(Private Key Cyptography)

  • 하나의 비밀키를 사용하여 plain text 를 암호화하고 복호화하는 방식
  • 구조가 매우 단순하여 구현이 쉬움
  • 키를 공유하는 과정에서 유출될 경우 보안이 무의미해짐

 

 

2. 공개키 암호화(Public Key Cyptography)

  • 남에게 공개하지 않는 개인키와 모두에게 공개하는 공개키를 사용
  • 어떤 사람의 공개키를 사용하여 암호화된 데이터는 그 사람의 개인키를 사용해야 복호화할 수 있음
  • 어떤 사람의 개인키를 사용하여 암호화된 데이터는 그 사람의 공개키를 사용해야 복호화할 수 있음
  • 키를 교환할 필요 없이 상대의 공개키를 사용하여 암호화한 뒤 데이터를 전송하면 보안이 보장됨
  • 암호화/복호화에 걸리는 시간이 대칭키 암호화방식에 비해 훨씬 길다 
  • DSA, RSA, ECC 등의 알고리즘이 있다.

 

 

3. 인증(Authentication) - 전자서명

  • 통신중인 상대가 정말 본인이 맞는지 확인이 필요
  • 공개키 암호화를 응용하여 본인을 인증
  • 상대에게 랜덤 데이터를 보내고 상대는 이를 자신의 개인키로 암호화하여 전송
  • 상대의 공개키로 이 데이터가 정상적으로 복호화된다면 상대가 본인임을 인증할 수 있음

 

 

4. 인증기관(Certificate Authority)

  • 공개키 암호화를 사용한 인증방식에도 문제가 있음
  • 만약 상대가 보낸 암호화된 랜덤데이터와 공개키 모두 전혀 다른사람의 것이어도 알아챌 수 없음
  • 이를 보장해줄 신뢰성있는 제 3자가 필요 => 인증기관의 필요성
  • 인증기관(CA)은 자신의 비밀키로 암호화된 인증서를 제공하고 사용자는 이를 CA의 공개키로 복호화,
    인증기관이 발행한 인증서임을 확인함과 동시에 인증서를 통해 식별하고자 하는 상대방의 공개키와
    정보를 얻게된다. 이를 통해 전자서명을 통한 상대방의 본인 여부를 확인할 수 있다.

 

 

'CS > 네트워크' 카테고리의 다른 글

#11 네트워크 보안 2 - HTTPS  (0) 2021.12.07
#9 Wireless Network & Mobile Network  (0) 2021.11.30
#8 Link Layer(Data Link Layer + Physical Layer)  (0) 2021.11.25
#7 Network Layer  (0) 2021.11.18
#6 Transport Layer  (0) 2021.11.16

1. Wireless Network(무선 통신)

  • Wireless Link
    • 신호의 매질(medium)이 대기
    • 채널 내에서 신호들간의 충돌만이 이슈였던 유선연결과 달리 여러 문제가 발생
    • 충돌의 회피/감지가 어려움
      • 멀리서 보낸 시그널은 세기가 매우 약해지며 이더넷이 사용하는 CSMA/CD 방식으로는
        신호를 감지하지 못하고 신호를 보내 충돌이 더 쉽게 발생 

      • 자신이 보내는 신호의 세기가 다른 신호보다 훨씬 크기때문에 충돌의 감지도 어려움
  • IEEE 802.11 Wireless LAN (WI-FI)
    • 무선 연결 네트워크 기술 표준

    • 구조
      • 유선 네트워크에 연결되어있는 AP(Access Point) 존재 
      • 무선 네트워크 인터페이스(무선랜카드)를 가진 단말은 AP와 연결
      • AP와 AP는 스위치로 서로 연결되어있음
      • AP는 주기적으로 자신의 정보를 무선링크상에 broadcast
      • 같은 AP에 연결된 호스트의 집합을 BSS(Basic Service Set)라 한다(하나의 AP와 다수의 유저로 구성)

    • MAC 프로토콜
      • CSMA/CA(Collision Avoid) 사용
      • 송식측은 Carrier Sense 로 채널의 상태를 확인, 표준에 정의된 DIFS 만큼 대기 후 프레임을 전송
      • 수신측은 프레임을 수신한 뒤 표준에 정의된 SIFS 만큼 대기 후 ACK를 전송
      • 이더넷과 달리 충돌을 100퍼센트 감지할 수 없기 때문에 ACK를 통해 전달 여부를 확인해야함
      • 충돌을 감지할 수 없기 때문에 보내기 시작한 프레임은 충돌이 발생하더라도 상관없이 끝까지 전송

    • RTS-CTS
      • 충돌 회피를 위한 컨트롤 프레임 교환방식
      • RTS(Ready To Send) : 송신측이 수신측에게 데이터를 보내려 함을 알리는 컨트롤 프레임
      • CTS(Clear To Send) : 수신측이 송식측에게 현재 데이터를 보내도 된다는 것을 알리는 컨트롤 프레임
      • AP는 CTS를 브로드캐스트하여 데이터를 전송할 동안 다른 호스트들이 데이터를 전송하지 않도록 함
      • 이후 송신측은 수신측에 안전하게 데이터를 전송 가능

    • IEEE 802.11 프레임 헤더
      출처: https://kr.mathworks.com/help/wlan/ug/802-11-mac-frame-generation.html
      • Frame Control
      • Duration
      • Address
        • 4 개의 6바이트(48비트) MAC 주소 필드를 가짐
        • Address 4 는 거의 사용되지 않음(Ad-Hoc 네트워크에 사용)
        • Address 1 : 프레임을 전달받을 목적지 MAC 주소
        • Address 2 : 프레임을 전송하는 출발지 MAC 주소
        • Address 3 : AP가 연결된 라우터의 MAC 주소

        • 왜 AP가 연결된 라우터의 MAC 주소를 WIFI의 프레임이 가지고있어야하는가?
          => AP는 링크 계층의 장비이기 때문에 네트워크 계층의 기능인 포워딩테이블 작성이 불가능

        •  AP는 MAC 주소를 가지는가?
          => AP의 무선 인터페이스쪽은 MAC 주소를 가지지만 유선 인터페이스는 스위치와 마찬가지로
               MAC 주소를 가지지 않음(보이지않음)

        • 가정용 공유기 등의 장비의 경우 링크레이어뿐 아니라 어플리케이션 레이어까지 구현된 장비

 

 

2. Mobile Network(이동 통신)

  • TCP 연결의 유지 여부
    • WI-FI는 다른 AP로의 이동이 발생할 경우 IP주소가 변경, TCP 연결을 유지할 수 없음(이동통신 X)

    • 이동 통신은 네트워크의 범위가 굉장히 넓어 기지국이 커버하는 범위 내에서라면
      어디로 이동하더라도 연결이 끊기지 않음

  • 구조
    • 전국에 다수의 기지국(Base Station)이 설치되어있으며 사용자는 기지국과 무선연결을 수립하고
      기지국간의 계층화된 네트워크를 통해 통신이 이뤄진다.

'CS > 네트워크' 카테고리의 다른 글

#11 네트워크 보안 2 - HTTPS  (0) 2021.12.07
#10 네트워크 보안 1 - 암호화  (0) 2021.12.06
#8 Link Layer(Data Link Layer + Physical Layer)  (0) 2021.11.25
#7 Network Layer  (0) 2021.11.18
#6 Transport Layer  (0) 2021.11.16

1. Broadcast Medium(공용 채널)

  • 네트워크 계층에서 봤던 추상화된 형태와는 달리 실제로 라우터와 호스트,
    라우터와 라우터의 사이에는 전용 회선이 존재하는 것이 아닌 경우가 많음

  • 실제로는 사이에 다른 호스트나 라우터와 함께 사용하는 공용 채널이 존재하는 경우가 대부분이며
    이러한 매체를 Broadcast Medium 이라 한다.

 

 

2. MAC(Medium Access Control) 프로토콜

  • 송신한 데이터가 공용 채널에서서로 충돌하여 쓰레기 데이터가 되는 것을 막을 방법이 필요
    => Medium Access (Control) Protocol - MAC

    => WIFI 도 공기를 Broadcast Medium으로 하는 MAC 프로토콜의 일종(802.11)


  • 이상적인 MAC 프로토콜의 지향점(링크 대역폭이 R일 때)
    • 하나의 노드만이 통신을 수행할 경우 대역폭 전체(R)를 사용할 수 있다.
    • N 개의 노드가 통신을 수행할 경우 대역폭 전체를 N으로 나눈 R/N 만큼의 대역폭을 사용할 수 있다.
    • 통신을 관리하는 특별한 노드가 존재하지 않는다(모든 노드가 동등한 입장)
    • 단순하게 동작해야한다.

  • 접근법
    • Partitioning
      • TDMA(Time Division Multiple Access)
        • 각 노드에게 회선을 사용할 수 있는 시간 슬롯을 배정하는 방식
        • 주어진 시간동안은 모든 주파수 대역을 사용할 수 있음
        • 동시 사용자가 적을 경우 시간 슬롯이 낭비될 수 있음

      • FDMA(Frequency Division Multiple Access)
        • 각 노드에게 주파수 대역을 나누어 배정하는 방식
        • 아날로그 방식으로 구현이 간단함
        • 인접채널간 간섭문제를 해결하기 위해 주파수 대역사이에 가드밴드가 필요해진다
          => 가드밴드로 인해 낭비되는 주파수대역 생김
      • 주파수 대역이나 시간 슬롯이 낭비되지 않는 경우(사용자가 많은 경우)에 유리

    • Random Access
      • Partition 방식의 경우 충돌방지는 확실하게 되지만 주파수대역 낭비나 시간슬롯 낭비의 문제가 있음
      • 노드들이 원하는 타이밍에 통신을 수행하는 방식
      • 사용자가 적을 경우 Partitioning에 비해 효율적

      • CSMA(Carrier Sense Multiple Access)
        • 공용 채널이 사용되고 있지 않다고 판단되면 통신을 실시하는 방식
        • 충돌(Collision)
          • 한 노드가 다른 노드가 통신을 먼저 시작한것을 인식하기 전에 통신을 시작한 경우
            발생하는 충돌을 미연에 방지하는 것은 불가능.

          • 충돌이 발생하는 것을 전제로 충돌로 인한 피해를 최소화하는 방식을 사용
            => CSMA/CD(Collision Detection)
            => 한쪽이 충돌발생을 탐지하고 바로 전송을 멈춘다
            => 랜덤 타이머를 설정하고 타임아웃시 재전송
            => 충돌이 발생할 때마다 타이머의 시간을 두 배씩 늘려간다

          • 유선통신의 경우 충돌 감지 자체는 쉽게 가능

    • Taking Turns
      • polling
        • 하나의 중심 호스트(master)가 연결된 다른 호스트(server)들에게 전송할 데이터가 있는지
          확인하여 전송하도록 하는 방식

      • token passing
        • token을 가진 호스트만이 전송을 할 수 있도록 하는 방식

      • 두 방법 모두 한가지 문제가 발생하면(master의 고장, token의 유실 등) 치명적인 문제가
        발생하는 single point failure 문제로 실제로는 잘 사용되지 않음

 

 

3. 이더넷(Ethernet)

  • 유선 케이블 상황에서의 MAC 프로토콜
  • Random Access 방식을 사용(CSMA/CD)
  • 이더넷 프레임
    • Preamble / SFD
      • 비트동기, 프레임동기를 위한 부분
      • Physical Layer의 헤더부분

    • DA(Desination Address) / SA(Source Address)
      • 목적지와 출발지의 MAC 주소

    • Len/Type
      • 값이 0x0600 미만이면 프레임의 데이터 영역(Data + Padding)의 길이로 해석
      • 0x0600 이상이면 Data부분에 담겨있는 상위 프로토콜의 타입으로 해석
        => ARP 쿼리, ARP 리스폰스 등

    • Data
      • IP 패킷이 들어있는 부분
      • 뒤에 따라오는 Padding 부분은 0으로 채워진다.

    • FCS(Frame Check Sequence)
      • 수납된 데이터의 에러 검출을 위한 CRC

  • 신뢰성있는 전송
    • 전송에 대한 피드백이 없는데 전송이 정상적으로 완료됐는지 확인하는방법
      => 외부 간섭이 없는 유선연결이기에 회선(채널)내에서의 충돌만 없다면 전송된것으로 볼 수 있음

    • 충돌을 탐지하기 전에 전송이 종료되면 전송에 실패한 데이터를 재전송하지 못함
      => 전송측이 충돌을 탐지하기 위한 충분한 시간을 기다려줄 필요가 있음
      => 전송할 프레임의 길이가 충분하면 충돌을 감지할 수 있음
      => 이더넷은 이를 위한 프레임의 최소길이를 지정

    • 보내려는 데이터의 크기가 프레임 최소길이보다 작다면?
      => 0으로 채워진 padding 부분을 붙여 최소길이를 만족시킴

  • MAC 주소와 ARP
    • MAC 주소
      • 네트워크 랜카드가 가지고있는 고유 주소
      • 랜카드가 제조된 시점부터 바뀌지 않는 값

    • ARP(Address Resolution Protocol)
      • IP 주소를 물리적 네트워크 주소에 바인딩하기 위한 프로토콜

      • 모든 호스트는 포워딩 테이블을 통해 IP패킷을 보낼 다음 목적지(next hop)를 알 수 있지만
        그 IP에 해당하는 MAC 주소를 알지 못해 링크 레이어 레벨에서의 전송이 불가능하다.
        이를 해결하기 위해서 ARP 프로토콜을 통해 IP주소에 해당하는 MAC 주소를 알아내야한다.

      • 절차
        • 전송측은 프레임의 데이터/타입 영역에 IP패킷 대신 목적지 IP주소에 해당하는
          MAC 주소를 요청하는 ARP 쿼리를 담아 네트워크상에 존재하는 모든 호스트들에게
          브로드캐스트

        • 전송측이 보낸 ARP 쿼리를 받은 호스트중 자신의 IP가 쿼리에서 원하는 IP주소와 일치하는
          호스트는 자신의 프레임의 데이터/타입 영역에 ARP 응답(리스폰스)을 담아 전송하는 것으로
          자신의 MAC 주소를 알림

        • 전송측은 얻은 MAC 주소를 ARP 캐시(테이블)에 저장하고 이를 참조하여 목적지 IP에 해당하는
          MAC 주소로 IP패킷을 담은 이더넷 프레임을 전송

 

 

4. 이더넷 네트워크의 물리적 형태

  • 버스(Bus)
    • 90년대 중반까지 주로 사용되었던 형태

    • 모든 노드가 하나의 충돌 도메인을 가지기에 호스트들간에 충돌이 발생할 수 있음

  • 스타(Star)
    • 현재 주로 사용되고있는 형태
    • 여러 호스트들의 중심에 스위치가 존재하며 스위치와 각 호스트들 사이에는 전용 회선이 존재

    • 스위치는 연결된 호스트들로부터 전송된 프레임을 버퍼에 담아두고 처리해나간다.

    • 스위치의 각 인터페이스가 어느 호스트와 연결되어있는지를 학습해나가며 
      스위치 포워딩 테이블을 생성하여 이를 토대로 프레임들의 전송을 처리한다.

    • 학습의 절차
      • 프레임을 전송받은 순간 전송한 호스트의 위치를 파악, 테이블에 저장
      • 목적지의 위치를 모를 경우 flooding(브로드캐스트) 을 통해 위치를 알아내고 테이블에 저장
      • 테이블을 참조하여 해당하는 목적지로 프레임을 전송
      • 처음에는 테이블을 채워나가기 위해 flooding 이 발생하지만 시간이 조금 지나고나면
        테이블이 완성되어 바로 포워딩을 할 수 있다. 
    • 스위치를 사용하는 것으로 보다 쉽게 이더넷 네트워크의 규모를 확장할 수 있다.

    • 스위치가 행하는 포워딩을 스위칭이라고도 한다.
    • 스위치는 MAC 주소를 가지지 않는다(사용자입장에선 보이지 않는다)

 

'CS > 네트워크' 카테고리의 다른 글

#10 네트워크 보안 1 - 암호화  (0) 2021.12.06
#9 Wireless Network & Mobile Network  (0) 2021.11.30
#7 Network Layer  (0) 2021.11.18
#6 Transport Layer  (0) 2021.11.16
#5 Application Layer 2 - HTTP  (0) 2021.11.01

+ Recent posts