목록기타 CS 이론 (29)
만족
Sniffing 주로 유선 연결된 네트워크 상에서 다른 시스템이 보내는 내용을 엿보는 방법. 만약 허브 환경이라면 모든 패킷이 모든 네트워크 구성원에게 전달되므로, 이 때 랜카드의 promisicuos 모드를 활성화하면 패킷 필터링 기능이 해제되어 모든 정보를 들여다볼 수 있게 된다. 시스템에 꽂힌 랜카드들은 IP주소와 MAC주소를 통해 전송받은 패킷을 필터링해, 자신을 대상으로 하는 패킷만 받아들인다. 그러나 스위치 환경에서는 이런 필터링 방식이 스위치에서 이루어지기 때문에 스니핑을 위해 다른 방법을 사용한다. Sniffing: with Switch 스위치에는 MAC 테이블이 존재하므로, 들어온 패킷에 대해 목적지 MAC이 몇번 포트에 해당하는 네트워크인지를 알 수 있다. 이 때, ARP 프로토콜을 악..
DoS (Denial of Service) 서비스 거부 공격, 즉 서버가 정상적인 서비스를 하지 못하도록 하는 공격을 말한다. DoS: Ping of Death ICMP 프로토콜(패킷을 보낸 후 수신자가 다시 송신자에게 특정 메시지를 보낼 수 있다)을 활용해 네트워크가 정상적으로 작동하는지 확인하는 ping 유틸리티가 있다. Ping of Death 공격은 ICMP 프로토콜을 악용하여 수신자에게 최대 크기의 데이터를 전송하면 수신자의 네트워크에서는 해당 데이터를 모두 적절한 크기의 패킷으로 나누어 처리해야 하므로 부하가 커진다. 따라서 수신자는 정상적인 네트워크 서비스를 사용할 수 없게 된다. 현재 대부분의 대형 IT회사들은 아예 ICMP프로토콜을 막아버리거나, 일정 크기를 넘어설 경우 무시하고 있다. ..
프로토콜 서로 다른 시스템에 있는 개체가 통신하기 위해 필요한 동일한 통신 규약(약속) 프로토콜의 기능 주소지정 상대의 주소를 지정한다 순서지정 프토로콜 데이터 단위가 전송될 때 보내는 순서를 명시하는 기능으로, 연결 지향형(TCP/IP)에서만 사용 단편화 및 재조합 대용량 데이터 전송 시, 일정한 데이터 블록으로 나누어(단편화) 전송하고 수신자는 그 데이터를 재조합한다 데이터 흐름제어 수신자가 수신한 데이터의 양이나 속도 제어 연결제어 연결 지향형 데이터 전송에서는 연결 설정, 데이터 전송, 연결 해제의 3단계로 구성된다. 캡슐화 데이터에 제어 정보를 덧붙이는 것 오류제어 데이터 교환 시 오류를 발견하는 기법 동기화 송수신 개체가 먼저 정의된 인자를 공유하는 기법 멀티플렉싱 하나의 통신 선로에서 여러 ..
버블 정렬은 2중 for문을 사용해 각 순회마다 인접한 요소들을 비교해 조건을 만족할 경우 위치를 스왑하는 방식(한칸씩 미는 방식)으로 요소를 정렬한다. 매우 쉽지만, 소팅 방법중에 효율이 나쁜 편에 속한다. 작동예시 [3,2,1]을 오름차순 정렬한다고 생각해 보자. 첫 번째 반복 arr= [3,2,1] //i=0. j= 1 to 2 (i+1부터 배열의 길이-1 까지) [2,3,1] //3과 2를 비교하는데 2가 더 작으므로 위치 스왑 (i=0, j= 1) [2,1,3] //3과 1을 비교하는데 1이 더 작으므로 위치 스왑 (i=0, j=2) //첫 번째 반복에서 가장 큰 수는 3으로 결정되었으므로 마지막 요소(arr[2])는 더 이상 검사하지 않음 //i=1. j= 2 to 2 (i+1부터 배열의 길이..
Real-Time Scheduling 정해진 시간 안에 주어진 기능이 제대로 동작하게 하는 스케쥴링 방식. Real-Time이 Super-Fast를 의미하는 것은 아니다. Real-Time Scheduling: Types Hard Real-Time 실행 시간이 정해진 Deadline을 넘어서면 치명적인 문제가 발생한다. 예를 들어 자동차 자율 주행 시스템이나, 원자로 감시 시스템 처럼 감지와 대응이 늦어질 경우 큰 사고로 이어질 수 있는 분야에 적용되는 기법이다. Soft Real-Time 실행 시간이 정해진 Deadline을 넘어서면 시스템의 품질이 하락하는 경우. (치명적인 사고를 발생시키지는 않음) 예를 들어, 축구 실시간 중계 방송에서 실행 시간이 Deadline을 넘어서면 buffering이나 ..
인터럽트가 발생할 경우 다른 프로세스들을 정지시킨 채로 인터럽트 핸들러가 우선적으로 실행되며 이 인터럽트 핸들러는 non-preemptive(다른 프로세스가 선점할 수 없음)하며, 다른 프로세스, 심지어 다른 인터럽트 핸들러들 까지도 현재 인터럽트 핸들러가 끝나기 전까지는 실행되지 않는다. 인터럽트 핸들러에서 실행하는 작업 중, 중요성이 비교적 낮고 시간이 오래 걸리는 작업에 대해 시스템 반응성을 최대한 보전하면서 진행하려면 어떻게 해야 할까? 중요도가 높은 것은 Top Half(즉시 한번에 처리), 그렇지 않은 것은 Bottom Half(여유가 될 때 까지 연기)로 이관하여 Interrupt Handler의 동작을 쪼갤 수 있다. Kinds of Bottom Halves Bottom Half와 관련된 ..
요즘 대부분의 컴퓨터가 멀티코어 환경인 만큼 프로그램 개발 시 발생하는 동기화 문제에 대해 얼마나 성능 감소를 완화시킬 수 있을지가 매우 중요하다. 실제로 우리가 동일한 성능을 가진 코어가 있을 때, 1코어 CPU와 2코어 CPU를 비교하면 2코어 CPU의 성능이 2배 빠를 것으로 기대하지만, 실제로 차이는 그보다 훨씬 적다. 코어 갯수가 늘어날 수록 동기화 문제가 점점 복잡해지고 그에 따라 Overhead가 커지기 때문인데, 오늘은 이런 동기화 성능 감소치를 비약적으로 낮춘 RCU에 대해 알아볼 것이다. 문제 어떤 문자열 포인터가 있다고 해 보자. 이 문자열 포인터에 N개의 스레드가 접근해 Read하려고 하고 M개의 스레드가 접근해 Write하려고 하는 상황이다. N개의 스레드가 Read하는 도중 1개..
Interrupt란? 비동기적으로 하드웨어 신호를 발생시켜 장치가 프로세서의 주목을 요청하는 것 I/O 장치와 프로세서 간의 속도 차이로 인해 프로세서가 I/O 작업을 요청하고, I/O 디바이스가 작업이 완료되었을 때 그것을 프로세서에게 알리는 것 역시 인터럽트이다. 이러한 인터럽트는 모든 종류에 대해 핸들링되는 것은 아니다. 실제로 인터럽트가 발생하더라도, 인터럽트 핸들러가 없는 인터럽트는 아무런 일도 일어나지 않는다. IRQ (Interrupt ReQuest) 그렇다면 OS는 인터럽트의 종류를 어떻게 구별할 수 있을까? (HDD가 발생시킨 인터럽트와 cpu timer가 발생시킨 인터럽트를 어떻게 구분하는가?) ubuntu에서는 /proc/interrupts에 인터럽트 정보를 기술한 파일이 존재하는데,..