버스의 종류    

 

 버스는 CPU와 메모리, 주변장치 간 데이터를 주고받을 때 사용한다. 버스의 종류에는 제어 버스, 주소 버스, 데이터 버스가 있다.

 

  • 제어 버스(Control Bus): 다음에 어떤 작업을 할지 지시하는 제어 신호가 오고 간다. 예를 들어, 메모리에서 데이터를 가져올 때는 읽기 신호를 보내고, 처리한 데이터를 메모리로 옮겨놓을 때는 쓰기 신호를 보낸다. 즉, 제어 버스의 신호는 CPU, 메모리, 주변 장치와 양방향으로 오고 간다.
  • 주소 버스(Address Bus): 메모리의 데이터를 읽거나 쓸 때 어느 위치에서 작업할 것인지를 알려주는 위치 정보가 오고 간다. 주소 버스는 메모리 주소 레지스터와 연결되어 있으며 단방향이다. 따라서, CPU에서 메모리나 주변 장치로 나가는 주소 정보는 있지만 주소 버스를 통해 CPU로 전달되는 정보는 없다. 
  • 데이터 버스(Data Bus): 메모리 버퍼 레지스터와 연결되어 있으며 양방향이다. 

 

 

 

 버스의 대역폭은 한 번에 전달할 수 있는 데이터의 최대 크기를 말하는데 CPU가 한 번에 처리할 수 있는 데이터의 크기와 같다. 흔히 32bit CPU, 64bit CPU라고 하는데, CPU가 한 번에 처리할 수 있는 데이터의 최대 크기를 말한다. 32bit의 경우 버스의 대역폭도 32bit이고 레지스터의 크기, 메모리에 한 번에 저장할 수 있는 데이터의 크기도 32bit이다. 

 

 참고로 CPU가 한 번에 처리할 수 있는 데이터 최대 크기를 워드(word)라고 한다. 이는 버스의 대역폭과 메모리에 한 번에 저장되는 단위도 워드라는 것을 알 수 있다. 32bit CPU에서 1워드는 32bit이다. 


    메모리의 종류    

 

 모든 프로그램은 메모리에 올라와야 실행될 수 있다. 메모리에는 실행에 필요한 프로그램과 데이터가 존재하며 CPU와 협업하며 작업이 이루어진다. 메모리를 이루는 소자 하나의 크기는 1bit이고 0또는 1이 저장된다. 그러나 소자 하나만으로는 데이터를 표현할 수 없어 메모리 주소는 바이트 단위로 지정되고, 메모리에서 데이터를 읽거나 쓸 때에는 워드 단위로 움직인다. 

 

 메모리는 크게 두 종류로 읽고 쓸 수 있는 램(RAM, Random Access Memory)와 읽기만 가능한 롬(ROM, Random Only Memory)로 구분된다. 

 

 

 

 램은 또한 전력이 끊기면 데이터가 사라지는 휘발성 메모리와 전력이 끊겨도 데이터를 ㅂ관할 수 있는 비휘발성 메모리로 나뉜다. 

 

  • 휘발성 메모리(Volatility Memory)에는 동적 램(Dynamic RAM)과 정적 램(Static RAM)이 있다. 동적 램은 저장된 0과 1의 데이터가 일정 시간이 지나면 사라지기에 다시 재생해야 한다. 정적 램은 전력이 공급되는 동안에만 데이터를 보관할 수 있다. 속도는 빠르지만 가격이 비싸다. 일반적으로 메인 메모리는 동적 램을, 캐시 같은 고속 메모리에는 정적 램을 사용한다. 

 

  • 비휘발성 메모리(Non-Volatility Memory)에는 플래시 메모리(Flash Memory)와 FRAM, PRAM 등이 있다. 플래시 메모리는 디지털 카메라, MP3 플레이어, USB 드라이버 같이 전력이 없어도 데이터를 보관하는 저장장치로 사용한다. 하지만, 플래시 메모리의 각 소자는 최대 사용 횟수가 제한되어 많이 사용하면 기능을 잃는다. 따라서, SD 카드나 USB 드라이버를 오래 사용하면 성능이 저하되거나 데이터를 잃어 버릴 수 있다. 또한, 하드디스크를 대신하도록 만든 SSD는 가격이 비싸지만 데이터 접근 속도, 내구성 때문에 컴퓨터, 노트북, 스마트폰 등에 많이 사용한다.

 

 롬은 전력이 끊겨도 데이터를 보관하는 것이 가능하지만 데이터를 한 번 저장하면 바꿀 수 없다는 단점이 있다. 예를 들어 빈 CD는 CD-ROM이라고도 하며 데이터를 한 번만 저장할 수 있다. 롬의 종류에는 마스크 롬, PROM, EPROM 등이 있다. 

 


 

    메모리 보호    

 

  현대의 운영체제는 시분할 기법을 사용하여 여러 프로그램을 동시에 실행하므로 사용자 영역이 여러 개의 작업 공간으로 나뉘어져 있다. 이러한 상황에서 메모리 보호는 매우 중요한 문제이다. 만약 메모리가 보호되지 않으면 어떤 작업이 다른 작업의 영역을 침범하여 프로그램을 파괴하거나 데이터를 지울 수 있으며 최악의 경우에는 시스템을 멈출 수 있다. 이처럼 운영체제 영역이나 다른 프로그램 영역으로 침범하려는 악성 소프트웨어를 바이러스(Virus)라고 한다. 

 

 운영체제도 소프트웨어 중 하나이므로 CPU를 사용하는 작업 중 하나이다. 사용자의 작업이 진행되는(사용자 프로세스가 CPU를 차지하는) 동안 운영체제는 잠시 중단된다. 따라서, 운영체제가 중단된 상태에서 메모리를 보호하려면 하드웨어의 도움이 필요하다. 

 

 메모리를 보호하기 위해 CPU는 현재 진행 중인 작업의 메모리 시작 주소를 경계 레지스터(Bound Register)에 저장한 후 작업을 한다. 또한, 현재 진행 중인 작업이 차지하고 있는 메모리의 크기, 즉 마지막 주소까지의 차이를 한계 레지스터(Limit Register)에 저장한다. 그리고 사용자의 작업이 진행되는 동안 이 두 레지스터의 주소 범위를 벗어나는지 하드웨어적으로 점검해서 메모리를 보호한다. 

 

 B 작업의 메모리 시작 주소 140은 경계 레지스터에, B 작업의 크기인 40은 한계 레지스터에 저장된다. B 작업이 데이터를 읽거나 쓸 때마다 CPU는 해당 작업이 경계 레지스터와 한계 레지스터의 주소값 안에서 이루어지는지 검사한다. 만약 두 레지스터의 값을 벗어나면 인터럽트(Interrupt)가 발생한다. 인터럽트가 발생하면 모든 작업이 중단되고 CPU는 운영체제를 깨워 인터럽트를 처리하도록 시킨다. 운영체제가 실행되면 해당 프로그램을 강제 종료시킨다. 이처럼 메모리 영역은 하드웨어와 운영체제의 협업에 의해 보호받는다. 

 


    부팅(Booting)    

 

  응용프로그램은 운영체제가 메모리에 올려서 실행하는데, 운영체제는 누가 메모리에 올려서 실행될까? 운영체제도 CPU에 의해 실행되기 때문에 누군가에 의해 메모리에 올라와야 한다. 컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정을 부팅(Booting)이라고 한다.

 

 

 사용자가 컴퓨터의 전원을 키면 롬(ROM)에 저장된 바이오스(Bios)가 실행된다. 바이오스는 CPU, 메모리, 하드디스크, 키보드, 마우스와 같은 주요 하드웨어가 제대로 작동하는지 확인한다. 만약 이상이 있으면 삐 소리와 함께 오류 메세지를 출력하고, 이상이 없으면 하드디스크 마스터 부트 레코드(Master Boot Record, MRB)에 저장된 작은 프로그램을 메모리로 가져와 실행한다. 

 

 마스터 부트 레코드는 하드디스크의 첫 번째 섹터를 가리키며, 운영체제를 실행하기 우한 부트스트랩(Bootstrap) 코드가 이 곳에 저장되어 있다. 부트스트랩 코드는 운영체제를 메모리에 가져와 실행하는 역할을 하는 작은 프로그램이다.

 

 마스터 부트 레코드에 저장되어 있는 부트스트랩이 메모리에 올라오면 하드디스크에 저장된 운영체제를 메모리로 불러온다. 따라서, 마스터 부트 레코드가 손상되면 운영체제를 실행할 수 없다. 이는 컴퓨터 바이러스의 좋은 공격 대상이 된다. 따라서, 일부 바이오스는 사용자 옵션 부분에 운영체제 보호 항목을 만들어 마스터 부트 레코드를 수정할 수 없게 한다. 

 

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

8. 병렬처리  (0) 2020.10.16
7. 컴퓨터 성능 향상 기술  (0) 2020.10.14
5. CPU와 메모리(1)  (0) 2020.10.06
4. 하드웨어의 기본 구성  (0) 2020.10.05
3. 운영체제의 구조  (0) 2020.10.05

 

    IP 주소의 구조   

 

  IPv4주소는 32비트이며 32비트를 8비트로 단위로 나눠서 표현하는 것을 옥텟(Octet)이라고 하는데 32비트를 4개의 옥텟으로 나누어 10진수로 표현한다.

 

 

  또한, 이 IP 주소는 네트워크 주소(네트워크 ID)와 호스트 주소(호스트 ID)로 나뉘는데 네트워크 주소는 모든 호스트들을 관리하기가 어렵기 때문에 네트워크에 범위를 그룹(호스트들의 집합)으로 지정해 어떤 네트워크인지를 나타내고 호스트 주소는 네트워크 그룹 내에서 어느 컴퓨터인지를 나타낸다. 이 두 가지 정보가 합쳐져서 IP 주소가 된다.

 

 IP 주소 = 네트워크 주소(네트워크 ID) + 호스트 주소(호스트 ID)

 

 


    IP 주소 클래스(Class)   

 

  IP 주소는 네트워크 주소를 크게 만들거나 호스트 주소를 작게 만들어 네트워크 크기를 조정할 수 있다. 이 네트워크 크기는 클래스(Class)라는 개념으로 구분한다. 

 

 

 

  일반 네트워크에서는 A~C 클래스를 사용할 수 있다. A 클래스는 처음 8비트가 네트워크 주소이고 나머지 24비트가 호스트 ID이다. A 클래스의 1옥텟의 범위는 00000001~11111111로 10진수로는 1~127이 된다. 2~4옥텟의 범위는 각각 00000000~11111111로 0~255가 된다. 

 

 따라서, A 클래스의 네트워크 ID와 호스트 ID의 32비트 전체 범위는 1.0.0.0 ~ 127.255.255.255가 된다. 

 

 

 

 B 클래스는 처음 16비트가 네트워크 ID이고 나머지 16비트가 호스트 ID 이다. B 클래스의 1옥텟의 범위는 10000000~10111111로 10진수로는 128~191이 된다. 2~4옥텟의 범위는 각각 00000000~11111111로 0~255가 된다. 

 

 따라서, B 클래스의 네트워크 ID와 호스트 ID의 32비트 전체 범위는 128.0.0.0 ~ 191.255.255.255가 된다. 

 

 

 

 C 클래스는 처음 24비트가 네트워크 ID이고 나머지 8비트가 호스트 ID이다. C 클래스의 1옥텟의 범위는 11000000~11011111로 10진수로는 192~223이 된다. 2~4옥텟의 범위는 각각 00000000~11111111로 0~255가 된다. 

 

 따라서, C 클래스의 네트워크 ID와 호스트 ID의 32비트 전체 범위는 192.0.0.0 ~ 223.255.255.255가 된다. 

 

 

 

 

 여기서 주의할 점은 공인 IP 주소와 사설 IP 주소가 정해져 있다는 것이다.

 

 

 가정 LAN에서는 주로 C 클래스의 사설 IP 주소인 192.168.X.X가 주로 사용된다. 윈도우에서는 검색 창에 cmd를 입력 후 명령 프롬프트 창에서 ipconfig 명령어를 입력하면 사용할 수 있다. 

 

 

 [참고]

  • 공인 IP: 전 세계에서 유일한 IP로 ISP가 제공하며 외부에 공개되어 있기 때문에 인터넷에 연결된 다른 장비로부터 접근이 가능하다. 
  • 사설 IP: 한 네트워크 안에서 사용되는 IP 주소 IPv4의 부족으로 인해 모든 네트워크가 공인 IP를 사용하는 것은 불가능하기 때문에 네트워크 안에서 라우터를 통해 할당받는 가상의 주소이다. 외부에서 접속할 수 없다. 

 


 

    네트워크 주소와 브로드캐스트 주소   

 

  IP 주소에는 네트워크 주소와 브로드캐스트 주소도 존재하는데, 이 두 주소는 특별한 주소로 컴퓨터나 라우터가 자신의 IP로 사용해서는 안 된다.

 

 트워크 주소는 호스트 ID가 0(2진수로 00000000)인 주소이고 전체 네트워크에서 작은 네트워크를 식별하는데 사용된다. 즉, 그 작은 네트워크를 대표하는 주소가 된다. 

 

 브로드 캐스트 주소는 호스트 ID가 255(11111111)인 주소이다. 해당 네트워크에 있는 컴퓨터나 장비 모두에게 한 번에 데이터를 전송하는데 사용되는 IP 주소이다. 즉, 해당 네트워크에 데이터를 전송하려면 호스트 ID에 255를 설정하면 된다. 

 

 

 


 

    서브넷의 구조   

 

  A 클래스 네트워크는 호스트 ID가 24비트여서 IP 주소를 1677만 7214개를 사용할 수 있다. 만약에 이 수 많은 컴퓨터에 브로드캐스트 패킷을 전송하면 모든 컴퓨터에 전송하는데 이는 네트워크가 정체되고 지연을 유발할 것이다.

 

 이처럼 A 클래스의 대규모 네트워크를 작은 네트워크로 분할하여 브로드캐스트로 전송되는 패킷의 범위를 줄일 수 있는데, 이처럼 네트워크를 분할하는 것을 서브넷팅(Subneting)이라고 하고, 분할된 네트워크를 서브넷(Subnet)이라고 한다. 

 

 그러면 기존의 네트워크 ID와 호스트 ID로 구성되어 있던 것이 네트워크 ID, 서브넷 ID, 호스트 ID로 나눠지게 된다. 즉, 호스트 ID에서 비트를 빌려 서브넷으로 만들 수 있다.

 

 


 

    서브넷 마스크   

 

  IP 주소를 서브넷팅하면 어디까지가 네트워크 ID이고 어디부터가 호스트 ID를 판단하기 힘들다. 이를 위해 서브넷 마스크라는 값을 사용한다. 즉, 서브넷 마스크는 네트워크 ID와 호스트 ID를 식별하기 위한 값이다. 이 값은 프리픽스(Prefix) 표기법으로 사용할 수 있는데 슬래시(/)로 비트 수를 나타낸다. 

 

 예를 들어, C 클래스 IP 주소를 서브넷팅해보면 C 클래스는 일반적으로 네트워크 ID가 24비트이다. 하지만, 호스트 ID에서 4비트를 빌려 네트워크 ID를 28비트로 만들면 네트워크 ID는 24비트, 서브넷 ID는 4비트, 호스트 ID는 4비트가 된다. 밑의 예제에서는  255.255.255.240/28로 표현할 수 있다.

 

 

 

 즉, 서브넷 마스크는 IP 주소의 네트워크 부분만을 나타나게 하여 같은 네트워크인지 판별하게 하는 마스크이다.

 

 


 

    라우터의 구조   

 

  그렇다면 네트워크를 분리하는 역할은 누가할까? 라우터(Router)가 수행한다. 

 

 

 

 네트워크를 분할한 다음에 컴퓨터 한 대가 다른 네트워크로 접속하려면 어떻게 해야 할까? 예를 들어 위의 그림에서 192.168.1.0/24 네트워크의 첫 번째 컴퓨터에서 192.168.2.0/24 네트워크의 첫 번째 컴퓨터로 데이터를 전송하려면 라우터의 IP 주소를 설정해야 한다. 이것은 네트워크의 출입구를 설정하는 것으로 기본 게이트웨이(Default Gateway)를 설정해야  한다. 

 

 기본 게이트웨이는 컴퓨터의 네트워크를 설정하는 화면에 있다. 윈도우 10의 경우 "자동으로 IP 주소 받기"를 체크하면 기본 게이트웨이가 자동으로 설정된다. 

 

 

 "자동으로 IP 주소 받기"를 설정하면 192.168.1.0/24 네트워크의 첫 번째 컴퓨터의 기본 게이트웨이가 설정되었지만 이것만으로는  192.168.2.0/24 네트워크의 첫 번째 컴퓨터에 데이터를 보낼 수 없고 추가로 라우터의 라우팅(Routing)의 기능이 필요하다. 

 


 

    라우팅이란?   

 

  라우팅(Routing)은 경로 정보를 기반으로 현재의 네트워크에서 다른 네트워크로 최적의 경로를 통해 데이터를 전송한다. 해당 경로 정보는 라우팅 테이블(Routing table)에 등록되어 있다. 

 

 

 

  라우팅 테이블에 경로 정보를 등록하는 방법은 수동 등록과 자동 등록이 있다. 수동으로 등록하는 방법은 소규모 네트워크에 적합하고, 자동으로 등록하는 방법은 대규모 네트워크에 적합하다. 자동으로 등록하는 방법은 라우터 간에 경로 정보를 서로 교환하여 라우팅 테이블 정보를 자동으로 수정해 준다.

 

 이처럼 라우터 간에 라우팅 정보를 교환하기 위한 프로토콜을 라우팅 프로토콜(Routing Protocol)이라고 한다. 이 라우팅 프로토콜을 설정하여 라우터 간에 경로 정보를 서로 교환하고 그것을 라우팅 테이블에 등록해 나간다. 라우팅 프로토콜에는 RIP, OSPE, BGF 등이 있고 각각 다른 특징을 가지고 있다. 

 

 

   네트워크 간의 연결 구조   

 

 데이터링크 계층에서는 이더넷 규칙을 기반으로 데이터를 전송하지만 같은 네트워크에 있는 컴퓨터끼리만 가능했다. 인터넷이나 다른 네트워크에 있는 목적지로 데이터를 전달하려면 네트워크 계층의 기술이 필요하다. 아래 그림과 같이 데이터링크 계층의 기능만으로는 해당 네트워크 안에서만 통신이 가능하다는 것을 알 수 있다. 

 

 

 

 

 이렇게 네트워크 간의 통신을 가능하게 해주는 역할을 네트워크 계층에서 해준다. 데이터링크 계층에서 한 컴퓨터에서 다른 컴퓨터로 데이터를 전송하기 위해 스위치라는 장비가 필요했던 것처럼 네트워크 계층에서는 다른 네트워크로 데이터를 전송하기 위해 라우터(Router)라는 네트워크 장비가 필요하다.

 

 

이미지출처: 위키피디아

 

 라우터는 데이터의 목적지가 정해지면 해당 목적지까지 어떤 경로로 가는 것이 좋은지 알려주는 역할을 한다. 하지만, 데이터를 보내려는 목적지를 모르면 라우터도 경로를 알려주지 못한다. 데이터링크 계층에서에서는 MAC 주소만으로도 통신할 수 있었지만 MAC 주소만으로 다른 네트워크에 데이터를 보낼 수 없다. 따라서 네트워크를 식별할 수 있는 다른 주소가 필요한데 그 주소를 IP 주소(IP Address)라고 한다. 

 


   IP란?   

 

 IP 주소는 어떤 네트워크의 어떤 컴퓨터인지를 구분할 수 있도록 해주는 주소이다. 따라서, IP 주소만 있다면 다른 네트워크에 있는 목적지를 지정할 수 있다. 하지만, IP 주소로 목적지를 지정하는 것뿐만 아니라 데이터를 어떤 경로로 보낼지도 결정해야 한다. 이처럼 목적지 IP 주소까지 어떤 경로로 데이터를 보낼지 결정하는 것라우팅(Routing)이라고 한다. 이 결정을 라우터가 수행하는데 라우터에는 라우팅 테이블(Routing Table)이 있어서 경로 정보를 등록하고 관리한다. 

 

 네트워크 계층에는 IP(Internet Protocol)라는 프로토콜이 있는데 통신 규격인 TCP/IP의 그 IP이다. 데이터링크 계층에서 이더넷 헤더를 붙이는 캡슐화를 해서 프레임을 만든 것처럼 네트워크 계층에서는 IP 헤더를 붙여 캡슐화를 진행한다. 

 

 

IP 헤더를 붙여 캡슐화를 진행해 만든 것을 IP 패킷이라고 한다. IP 헤더에는 정말 많은 정보가 포함되어 있는데 중요한 점은 출발지 IP 주소와 목적지 IP 주소가 담겨져 있다는 것이다. 

 


   IP 주소의 버전  

 

 여기서 의문이 드는 것은 IP 주소는 누가 만들고 어떻게 제공받는 것인가이다. IP 주소는 바로 인터넷 서비스 제공자(ISP)가 제공한다. ISP는 통신사를 예로들 수 있는데 우리나라에선 KT, SKT, LG U+ 등에 해당한다. 

 

 IP는 IPv4IPv6라는 두 가지 버전이 존재한다. 원래는 IPv4만 사용했었는데 이는 32비트로 되어 있어서 IP 주소를 약 43억개를 만들 수 있어 충분하다고 생각했다. 하지만 인터넷이 널리 보급되면서 IP 주소가 부족해졌고 현대에는 128비트로 구성된 IPv6를 많이 사용한다. 

 

 그리고 IPv4 주소는 주소의 수가 고갈될 수 있기 때문에 인터넷에 직접 연결되는 컴퓨터나 라우터에는 ISP가 제공하는 공인 IP 주소를 할당하고 회사나 가정의 랜에 있는 컴퓨터에는 사설 IP 주소를 할당한다. 

 

 예를 들어 아래 그림과 같이 랜 안에 컴퓨터가 여러대 있지만 공인 IP 주소를 컴퓨터 한 대당 할당하면 한정되어 있는 주소가 빨리 소진될 것이다. 따라서, 공인 IP 주소는 라우터에만 할당하고 랜 안에 있는 컴퓨터들에는 랜의 네트워크 관리자가 사설 IP 주소를 할당하거나 라우터의 DHCP(Dynamic Host Configuration Protocol) 기능을 사용하여 IP 주소를 자동으로 할당한다. 이런 방식으로 공인 IP의 주소를 절약할 수 있다. 

 

 


   IP 주소의 구조  

 

  데이터 링크 계층에서 MAC 주소는 48비트 였고 16진수로 표현한다. 반면에, 공인 IP 주소와 사설 IP 주소는 모두 32비트이며 10진수로 표현한다.

 

 IP 주소가 32비트이기 때문에 사람이 한 눈에 보기에는 어렵다. 따라서 32비트를 8비트 단위로 나눠서 표현하는데 이 때 8비트를 옥텟(Octet)이라고 부른다. 32비트를 4개의 옥텟으로 나누고 좀 더 읽기 쉽도록 10진수로 변환한다.