TCP란?    

 

 TCP는 신뢰성과 정확성을 우선으로 하는 연결형 통신 프로토콜이다. TCP 헤더를 붙여 세그먼트를 만드는 캡슐화 과정을 진행한다. 그리고 데이터를 전송하기 위해 필요한 가상의 독점 통신로를 확보하는 작업인 연결이라는 작업을 수행한다. 연결은 TCP 헤더의 코드비트 부분의 SYN와 ACK를 통해 3-way 핸드셰이크라고 하는 패킷 요청을 세 번 교환하는 행동을 하여 연결을 확립한다. 그리고 FIN와 ACK를 통해  4-way 핸드 셰이크를 진행해 연결이 끊어진다. 

 

 

 [참고]

 TCP 헤더에 관한 내용은 전 포스트 글을 참조하세요.

 

 

 

8. 전송 계층 - 1 (신뢰 데이터 전송)

전송 계층 물리 계층, 데이터 링크 계층, 네트워크 계층 이 세 개의 계층만 있으면 목적지에 데이터를 보낼 수 있다. 하지만, 데이터가 손상되거나 유실되면 이 세 개의 계층에서는 아무것도 해��

almotjalal.tistory.com

 

 


    일련번호와 확인 응답 번호란?    

 

  3-way 핸드셰이크를 통해 연결이 확보되어 실제 데이터를 보내거나 데이터를 받을 때에는 TCP 헤더의 일련번호(Sequence number)와 확인 응답 번호(Acknowledgement number)를 사용한다. 

 

 

TCP 헤더

 

 

  TCP는 데이터를 분할해서 보내는데 일련번호 송신 측에서 수신 측에 이 데이터가 "몇 번 째 데이터인지" 알려 주는 역할을 한다. 즉, 전송된 데이터에 일련번호를 부여해 수신자는 원래 데이터의 몇 번째 데이터를 받았는지 알 수 있다. 

 

 확인 응답 번호수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려 주는 역할을 한다. 그래서 이 번호는 다음 번호의 데이터를 요청하는데 사용한다. 예를 들어, 10번 데이터를 수신하면 11번 데이터를 송신 측에 요청한다. 이 과정을 확인 응답이라고 한다. 

 

 데이터를 전송하기 전 단계에서 3-way 핸드셰이크로 연결 수입이 이루어지고 데이터를 전송하기 위해 이번 통신에 사용하는 일련번호인 3001번과 확인 응답 번호인 4001번으로 가정해보면

 

 

 

 

  1. 컴퓨터 1은 컴퓨터 2로 200바이트의 데이터를 전송한다.
  2. 컴퓨터 2는 200바이트를 수신하고 다음에 수신하고자 하는 데이터 번화를 확인 응답 번호에 넣는다. 다음에 수신하고자 하는 데이터는 3001+200=3201이므로 3201번부터 보내 달라고 요청한다.
  3. 컴퓨터 1은 컴퓨터 2로 3201번부터 200바이트의 데이터를 전송한다. 
  4. 컴퓨터 2는 200바이트를 수신하고 다음에 수신하고자 하는 데이터의 번호를 확인 응답 번호에 넣는다. 다음에 수신하고자 하는 데이터는 3201+200=3401번부터 보내 달라고 요청한다. 

  

 위 과정을 데이터 전송이 완료될 때 까지 반복된다. 데이터가 항상 올바르게 전달되는 것은 아니므로 일련번호와 확인 응답 번호를 사용해서 데이터가 손상되거나 유실된 경우에는 같은 데이터를 재전송하게 되어 있는데 이것을 재전송 제어라고 한다. 

 

 


    윈도우 크기란?    

 

   위에서 설명한 과정은 세그먼트(데이터) 하나를 보낼 따마다 확인 응답을 한 번 반환하는 통신이라서 비효율적이다. 위 방식 대신에 매번 확인 응답을 기다리는 대신 세그먼트 연속해서 보내고 난 다음에 확인 응답을 반환하면 효율이 높아진다. 

 

  수신 측에서 받은 세그먼트를 일시적으로 보관하는 장소가 있는데 그 장소를 버퍼(Buffer)라고 한다. 이 버퍼 덕분에 세그먼트를 연속해서 보내도 수신 측은 대응할 수 있고 확인 응답의 효율도 높아진다. 하지만, 세그먼트를 대량으로 받아 버퍼가 처리하지 못하는 경우가 생기는데 이 현상을 오버플로(Over flow)라고 한다. 

 

 그래서 오버플로가 발생하지 않도록 버퍼의 한게 크기를 알고 있어야 하는데 그것을 TCP 헤더에서 윈도우 크기 값에 해당한다. 윈도우 크기(Window size)얼마나 많은 용량의 데이터를 저장해 둘 수 있는지를 나타낸다. 즉, 확인 응답을 일일이 하지 않고 연속해서 송수신할 수 있는 데이터의 크기를 말한다. 

 

 

 그럼 송수신측은 서로의 윈도우 크기를 어떻게 확인할 수 있을까? 바로 3-way 핸드셰이크를 할 때 판단한다. 

 

 컴퓨터2는 컴퓨터 1의 윈도우 크기가 3000이라는 것을 알게 되며 컴퓨터1은 컴퓨터 2의 윈도우 크기가 2000이라는 것을 알게 된다.

 

 

 오른쪽과 같은 방식으로 수신 측이 윈도우 크기를 가지고 있다면 확인 응답을 받지 않고도 세그먼트(데이터)를 연속적으로 전송할 수 있다.

 


    포트 번호란?    

 

   전송 계층에서 연결 확립, 재전송 제어, 윈도우 제어 등과 같은 기능에 의해 TCP는 데이터를 정확하게 전달할 수 있었다.  전송 계층은 데이터를 정확하게 전달하는 기능뿐만 아니라 전송된 데이터의 목적지가 어떤 애플리케이션(웹 또는 메일 등)인지 구분하는 역할도 수행한다.

 

 목적지가 어떤 애플리케이션인지 구분하지 못하는 것을 방지하기 위해서는 출발지 포트 번호(Source port number)목적지 포트 번호(Destination port number)가 필요하다. 

 

 

 포트 번호는 0~65535번을 사용할 수 있는데 0~1023번은 주요 프로토콜이 사용되도록 예약되어 있으며 잘 알려진 포트(Well-known ports)라고 한다. 1024번은 예약되어 있지만 사용되지 않는 포트이고, 1025번 이상은 랜덤 포트라고 해서 클라이언트 측의 송신 포트로 사용된다. 아래 표에 해당하는 포트번호는 서버에서 주로 사용되는 애플리케이션 번호이다. 

 

 

 이처럼 동작하는 애플리케이션은 각각 포트번호가 있어서 다른 애플리케이션과 서로 구분된다. 데이터를 전송할 때는 상대방의 IP 주소가 필요하지만, 어떤 애플리케이션이 사용되고 있는지 구분하려면 TCP는 포트 번호가 필요하다. 

 

 

 

 


    UDP란?    

  UDP는 TCP와 다르게 비연결형 통신으로 데이터를 전송할 때 TCP 처럼 시간이 걸리는 확인 작업을 일일이 하지 않는다. 또한, 신뢰성과 정확성을 중요시 한 TCP와는 다르게 UDP는 효율성을 중요시 한다. 

 

 UDP의 장점은 데이터를 효율적으로 빠르게 보내는 것이라서 스트리밍 방식으로 전송하는 동영상 서비스와 같은 곳이 사용된다. 동영상을 TCP로 전송하게 되면 수신 확인하는 데 시간이 너무 오래 걸려서 동영상을 원활하게 볼 수 없다. 

 

 TCP는 TCP 헤더가 붙은 데이터를 세그먼트라고 했는데 UDP 에서는 UDP 헤더가 붙은 데이터UDP 데이터그램이라고 한다. UDP 헤더는 올바른 목적지의 애플리케이션으로 데이터를 전송하기 위해 필요한 정보가 기록되어 있다. 

 

 

 또한 UDP를 사용하면 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있다. 이것을 브로드캐스트(Broadcast)라고 하는데 브로드캐스트는 목적지에 관계없이 랜에서 일괄적으로 통보를 보낼 수 있어 가능하다. TCP는 3-way 핸드셰이크와 같이 데이터를 전송할 때도 확인 응답을 하나씩 보내야 하기 때문에 브로드캐스트와 같이 불특정 다수에게 보내는 통신은 적합하지 않을 뿐더러 목적지를 지정하지 않으면 안 되기 때문에 일괄 통신을 할 수 없다. 

 


   TCP와 UDP 비교    

 

 

 

 

    전송 계층   

 

  물리 계층, 데이터 링크 계층, 네트워크 계층 이 세 개의 계층만 있으면 목적지에 데이터를 보낼 수 있다. 하지만, 데이터가 손상되거나 유실되면 이 세 개의 계층에서는 아무것도 해줄 수 없다.

 

 이를 방지해주는 역할은 OSI 모델에서 전송 계층이 수행한다. 전송 계층목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요하다. 

 

 

 전송 계층에는 오류를 점검하는 기능이 있는데, 오류가 발생하면 데이터를 재전송하도록 요청한다. 또한, 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능을 가지고 있다. 예를 들어, 웹에서 사용하는 데이터인데 메일 프로그램에 전송하는 것을 방지해준다. 

 

 


 

    연결형 통신과 비연결형 통신   

 

  전송 계층의 특징을 간단히 설명하면 신뢰성/정확성과 효율성으로 구분할 수 있다. 

 

 신뢰성/정확성은 데이터를 목적지에 문제없이 전달하는 것이고, 효율성은 데이터를 빠르고 효율적으로 전달하는 것이다. 이렇게 신뢰할 수 있고 정확한 데이터를 전달하는 통신을 연결형 통신이라고 하고, 효율적으로 데이터를 전달하는 통신을 비연결형 통신이라고 한다. 

 

 

 그렇다면 신뢰성과 정확성이 보장되지 않는 비연결형 통신은 보통 언제 쓰일까? 동영상을 볼 때 많이 사용한다. 동영상은 신뢰할 수 있고 정확한 데이터 전송보다는 빠른 전송이 필요하기 때문이다. 데이터가 늦게 도착해서 화면이 버벅거리는 동영상보다는 데이터가 조금 유실되더라도 원활하게 보는 것이 좋다.  

 

 또한, 연결형 통신 프로토콜에는 TCP가 사용되고, 비연결형 통신 프로토콜에는 UDP가 사용된다.

 


    TCP란   

 

  데이터 링크 계층에서 이더넷 헤더를 붙여 프레임을 만들고 네트워크 계층에서 IP 헤더를 붙여 IP 패킷을 만든 것처럼 전송 계층에서도 TCP 헤더를 붙여 세그먼트(Segment)를 만드는 캡슐화를 진행한다. 

 

 

 

 

  TCP는 연결형 통신에 사용한다. 연결형 통신은 꼼꼼하게 상대방을 확인하면서 데이터를 전송해야 하는데 그 전에 해야할 일은 연결(Connection)이라는 가상의 독점 통신로를 확보해야 한다. 

 

※ 연결(Connection): TCP 통신에서 정보를 전달하기 위해 사용되는 가상의 통신로이며 연결을 확립하고 데이터를 전송한다.

 

 연결을 확립하기 위해서는 TCP 헤더의 코드 비트를 확인해야 한다. 코드 비트는 연결의 제어 정보가 기록되는 곳이다. 코드 비트 중에서도 연결 요청을 뜻하는 SYN확인 응답을 뜻하는 ACK이 중요하다.

 

 


    3-way 핸드 셰이크   

 

  연결(Connection)은 SYN와 ACK를 사용하여 확립할 수있다. 신뢰할 수 있는 연결을 하려면 데이터를 전송하기 전에 패킷을 교환하는데 다음과 같이 세 번 확인 한다. 

 

 

  1. 통신을 하려면 컴퓨터2에게 허가를 받아야 하므로, 컴퓨터1에서 연결 확립 허가를 받기 위한 요청(SYN)를 보낸다.
  2. 컴퓨터2는 컴퓨터1이 보낸 요청을 받은 후에 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)를 보내고 동시에 컴퓨터1에게 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)를 보낸다.
  3. 컴퓨터2의 요청을 받은 컴퓨터1은 컴퓨터2로 허가한다는 응답으로 연결 확립 응답(ACK)을 보낸다. 

 

  이처럼 데이터를 보내기 전에 연결을 확립하기 위해 패킷 요청을 세 번 교환하는 것을 3-way 핸드 셰이크(three-way handshake)라고 한다. 

 

  연결을 끊을 때에는 FIN와 ACK를 사용하여 확립할 수있다. FIN은 연결 종료를 뜻한다. 이처럼 연결을 종료하기 위해 패킷 요청을 네 번 교환하는 것을 4-way 핸드 셰이크(four-way handshake)라고 한다. 

 

  1. 컴퓨터 1에서 컴퓨터 2로 연결 종료 요청(FIN)을 보낸다.
  2. 컴퓨터2에서 컴퓨터 1로 연결 종료 응답(ACK)을 반환한다.
  3. 또한 컴퓨터 2에서도 컴퓨터 1로 연결 종료 요청(FIN)을 보낸다.
  4. 컴퓨터 1에서 컴퓨터 2로 연결 종료 응답(ACK)을 반환한다.

 

 

 

 

    컴퓨터 구조의 문제점    

 

 컴퓨터 구조의 가장 큰 문제는 CPU와 메모리, 주변 장치 간 작업 속도가 다르다는 것이다. 메모리와 주변 장치는 시스템 버스(FSB)로 연결되어 있고, CPU(ALU, 제어 장치, 레지스터)는 CPU 내부 버스(BSB)로 연결되어 있다. 문제는 CPU 내부 버스의 속도가 시스템 버스의 속도보다 빠르기 때문에 메모리를 비롯한 주변 장치의 속도가 CPU의 속도를 따라가지 못한다. CPU에 비하면 메모리가 느리고 프로그램과 데이터를 보관하는 하드디스크는 메모리보다 느리다. 

 

 이런 문제로 장치간 속도를 개선하고 시스템 작업 속도를 올리기 위해 기술이 개발되었는데 버퍼, 캐시가 이에 해당된다.  

 


    버퍼(Buffer)    

 

 버퍼(Buffer)는 속도 차이가 있는 두 장치 사이에서 그 차이를 완화해준다. 예를 들어, 사과 50개를 마트에 옮긴다고 가정해보자. 한 번에 하나씩 옮기면 50번을 왕복해야 하지만 사과 50개를 트럭에 실어 옮기면 한 번에 옮길 수 있다. 이 때, 버퍼는 트럭에 비유된다. 

 

 입출력에서 데이터를 가져오는 경우에도 마찬가지이다. 느린 입출력 장치에서 데이터를 읽을 때마다 하나씩 전송하면 작업량에 비해 실제로 전송되는 데이터 양이 매우 작다. 따라서, 일정량의 데이터를 모아 전송하면 적은 노력으로도 많은 양의 데이터를 옮겨 속도의 차이를 완화할 수 있다.

 

 또한, 버퍼는 소프트웨어적으로도 사용되는데 대표적인 예는 동영상 스트리밍이다. 동영상은 네트워크에서 데이터가 들어오는 시간과 플레이어가 재생되는 시간의 속도 차이가 발생한다. 플레이어가 재생되는 도중에 데이터가 도착하지 않으면 동영상이 끊기는데,  동영상 데이터 일정부분을 버퍼에 넣으면 이러한 현상을 방지해준다.

 


    스풀(Spool)    

 

 스풀(Spool)은 CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼이다. 대표적으로는 프린터에 사용되는 스풀러(Spooler)이다. 스풀러는 인쇄할 내용을 순차적으로 출력하는 소프트웨어로 출력 명령을 내린 프로그램과 독립적으로 동작한다. 

 

 예를 들어, 워드프로세서로 작업을 하고 프린터로 출력할 때, 프린터 출력 작업과 문서 작업을 동시에 할 수 있는데 이는 스풀러를 사용했기 때문이다. 스풀러가 없다면 프린트 출력 작업과 문서 작업이 독립적으로 진행되지 못하기에 출력 작업이 끝날 때까지 문서작업을 할 수 없다. 

 

 또한, 스풀은 버퍼와 차이점이 있다. 버퍼는 어떤 프로그램이 사용하는 데이터든 버퍼가 차면 이동한다. 즉, 프로그램들 사이에 버퍼를 공유한다. 하지만, 스풀은 한 인쇄물이 완료될 때까지 다른 인쇄물이 끼어들 수 없다. 즉, 프로그램간에 배타적이다. 

 


 

    캐시(Cache)    

 

 캐시(Cache)메모리와 CPU 간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해두는 임시 장소이다. 캐시는 필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종으로 CPU가 앞으로 사용할 것이라고 예상되는 데이터를 미리 가져다 놓는다. 이 때, 미리 가져오는 작업을 미리 가져오기(prefetch)라고 한다. 예를 들면, 장독대에 있는 간장을 미리 간장통에 가져다 놓는 것을 들 수 있다.

 

 캐시는 CPU 안에 있으며 CPU 내부 버스의 속도로 작동하기 때문에 느린 시스템 버스의 속도로 동작하는 메모리의 단점을 보완해준다. 

 

 캐시는 메모리 내용 중 일부를 미리 가져오고, CPU는 메모리에 접근해야 할 캐시를 먼저 방문해 원하는 데이터를 찾아본다. 만약 캐시에 데이터가 존재하면 캐시 히트(Cache hit)라고 하며 그 데이터를 사용한다. 하지만, 원하는 데이터가 없으면 메모리로 가서 데이터를 찾는데 이를 캐시 미스(Cache Miss)라고 한다. 캐시가 히트되는 적중률을 캐시 적중률(Cache hit ratio)라고 한다. 

 

 

 

 컴퓨터의 성능을 향상하려면 캐시 적중률이 높아야 한다. 캐시 적중률을 높이는 방법 중 하나는 캐시의 크기를 늘리는 것이다. 또한, 앞으로 많이 사용될 데이터를 가져오는 것이다. 현재 위치에 가까운 데이터가 멀리 있는 데이터보다 사용될 확률이 더 높다는 지역성(Locality) 이론이 있다.  

 

 캐시를 가져오는 것 뿐만 아니라 캐시에 있는 데이터가 변경되는 경우 이를 반영해야 하는 문제도 있다. 캐시는 메모리에 있는데이터를 임시로 가져온 것이기 때문에 캐리에 있는 데이터가 변경되면 메모리에 있는 원래 데이터를 변경해야 한다. 변경하는 방법에는 즉시 쓰기와 지연 쓰기 방식이 있다. 

 

  •  즉시 쓰기(Write through): 캐시에 있는 데이터가 변경되면 이를 즉시 메모리에 반영하는 방식, 메모리와의 빈번한 데이터 전송으로 인해 성능이 느려진다는 단점이 있지만, 급작스러운 정전에도 데이터를 잃지 않는다는 장점이 있다. 
  • 지연 쓰기(Write back): 변경된 내용을 주기적으로 반영하는 방식, 메모리와의 전송 횟수가 줄어 시스템의 성능을 향상할 수 있으나 메모리와 캐시된 데이터 사이의 불일치가 발생할 수 있다. 

 

 


 

    저장장치의 계층 구조    

 

 가격과 컴퓨터 성능 사이의 타협점으로 저장장치의 계층 구조(Storage hierarchy)가 존재한다. 저장장치의 계층 구조는 속도가 빠르고 값이 비싼 저장장치를 CPU 쪽에 두고, 값이 싸고 용량이 큰 저장 장치를 반대쪽에 배치하여 적당한 가격으로 빠른 속도와 큰 용량을 동시에 얻는 방법이다. 

 

 CPU와 가까운 쪽에 레지스터나 캐시를 배치하여 CPU가 작업을 빨리 진행할 수 있게한다. 비교적 속도가 느린 메모리에서 작업한 내용을 하드디스크와 같이 저렴하고 용량이 큰 저장장치에 영구적으로 저장한다. 이처럼 저장장치 계층 구조는 사용자가 저렴한 가격으로 용량은 하드디스크처럼 사용하고 작업 속도는 레지스터처럼 빠르도록 만들어 준다. 

 

 

 

 하지만 저장장치의 계층 구조는 중복되는 데이터의 일관성을 유지하는 것이 문제가 될 수 있다. 변경된 내용을 즉시 반영하지 않고 일정 기간 모았다가 한 꺼번에 메모리에 반영하는 지연 쓰기의 경우나 협업 중인 다른 작업에서 데이터를 읽으려 하거나 갑자기 전원이 꺼지는 경우가 해당한다. 

 


 

    인터럽트    

 

 컴퓨터에는 많은 주변장치가 있기 때문에 CPU가 모든 입출력에 관여하면 작업 효율이 현저하게 떨어진다. 이러한 문제를 해결하기 위해 등장한 것이 인터럽트(Interrupt) 방식이다. 인터럽트는 요리사 옆에 주방 보조를 두는 것과 같다. CPU 작업과 저장장치의 데이터 이동을 독립적으로 운영함으로써 시스템의 효율을 높인다. 즉, 데이터의 입출력이 이루어지는 동안 CPU는 다른 작업을 할 수 있다. 이 때, 입출력 관리자 또는 장치 관리자가 주방 보조에 해당한다. 

 

 [인터럽트 동작 방식]

  1. CPU가 입출력 관리자에게 입출력 명령을 보낸다.
  2. 입출력 관리자는 명령받은 데이터를 메모리에 가져다놓거나 메모리에 있는 데이터를 저장장치로 옮긴다.
  3. 데이터 전송이 완료되면 입출력 관리자는 완료 신호를 CPU로 보낸다. 

 이 때, 입출력 관리자가 CPU에게 보내는 완료 신호를 인터럽트라고 한다. CPU는 다른 작업을 하다가 완료 신호를 받으면 하던 작업을 중지하고 옮겨진 데이터를 처리한다. 인터럽트 방식에서는 많은 주변 장치중 어떤 것의 작업이 끝났는지를 CPU에 알려주기 위해 인터럽트 번호를 사용한다. 인터럽트 번호는 완료 신호를 보낼 때 장치의 이름 대신 사용하는 장치의 고유 번호로서 운영체제마다 다르다. 윈도우의 경우 인터럽트 번호를 IRQ(Interrupt ReQuest)라고 부른다. 

 

 CPU는 입출력 관리자에게 여러 개의 입출력 작업을 동시에 시킬 수 있다. 이 경우 여러 작업이 동시에 완료되고 그 때마다 인터럽트를 여러 번 사용해야 하는데 이는 비호율적이다. 그래서 여러 개의 인터럽트를 하나의 배열로 만든 인터럽트 벡터(Interrupt Vector)를 사용한다.

 

 인터럽트 동작 방식은 다음과 같다. 입출력 요청 - 데이터 전송 - 인터럽트 발생 순으로 진행되는데 인터럽트 0번과 2번의 작업이 완료되어 인터럽트 0번과 2번이 동시에 발생했다는 것을 알 수 있다. CPU가 인터럽트 벡터를 받으면 0번과 2번의 작업을 동시에 처리한다.

 

 

 입출력 작업을 알리는 인터럽트 외에도 다양한 종류의 인터럽트가 있는데 사용자가 컴퓨터의 전원 버튼을 눌러 강제 종료하면 CPU는 하던 일을 모두 멈추고 처리 중인 데이터를 안전하게 보관한 뒤 시스템을 종료해야 한다. 또한, 메모리에서 실행중인 어떤 작업이 자신에게 주어진 메모리 영역을 넘어서 작업을 하려 하거나 0으로 숫자를 나누면 인터럽트가 발생한다. 

 

 

 [참고]

  • 직접 메모리 접근(Direct Memory Access, DMA): 메모리는 접근 권한을 가진 CPU만 접근이 가능하고 입출력 관리자는 접근이 불가능하다. 따라서, 입출력 관리자에게는 CPU의 허락없이 직접 메모리에 접근할 수 있는 권한을 부여한다. 
  • 메모리 매핑 입출력(Memory Mapped I/O): 직접 메모리 접근을 사용하면 메모리가 복잡해진다. CPU가 사용하는 데이터와 입출력 장치가 사용하는 데이터가 섞여 있다. 이를 위해 CPU가 사용하는 메모리 공간직접 메모리 접근을 통해 들어오거나 나가는 데이터를 위한 공간을 분리한다. 
  • 사이클 훔치기(Cycle stealing): 만약 CPU와 입출력 관리자가 동시에 메모리에 접근하려고 하면 누군가는 양보를 해야한다. 이는 보통 CPU가 메모리 사용 권한을 양보하는데 이는 CPU의 작업 속도보다 입출력장치의 속도가 더 느르기 때문이다. 이러한 상황을 사이클 훔치기라고 한다. 

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

9. 프로세스  (0) 2020.10.16
8. 병렬처리  (0) 2020.10.16
6. CPU와 메모리(2)  (0) 2020.10.14
5. CPU와 메모리(1)  (0) 2020.10.06
4. 하드웨어의 기본 구성  (0) 2020.10.05