주변 장치 구조 및 연결 방식

Jun_k·2026년 4월 10일

CS

목록 보기
4/19

메모리 맵 입출력 방식 (Memory-mapped Input Output)

  • CPU가 사용할 수 있는 전체 주소 공간의 일부를
    메모리에 할당하고, 남은 구역을 주변 장치(HDD, 키보드 등)에 할당하는 방식

  • CPU의 시야: CPU는 STORE 0x8000, 1이라는 명령을 내릴 때,
    이것이 RAM에 저장하는 것인지 HDD에 명령을 내리는 것인지 구분하지 않는다.
    오직 "0x8000번지에 1을 보낸다"는 행위 자체에만 집중한다.

  • 통합 관리: 메모리와 주변 장치를 별개로 보지 않고, 16비트 기준으로
    65,536개(2162^{16})의 주소 안에 함께 배치한다.

  • 레지스터 매핑: 주변 장치 안에는 상태를 보고하거나
    명령을 받는 제어/데이터/상태 레지스터들이 있고,
    메모리의 특정 주소(예: 0xA000, 0xA300 등)와 1:1로 대응시켜 관리한다.

  • 레지스터 매핑 추가 설명

    • 주변 장치: 키보드, 그래픽카드 같은 장치.
      내부에는 설정을 바꾸거나 데이터를 주고받기 위한
      아주 작은 메모리 칸(레지스터)들이 들어있다.

    • 주소 버스: CPU가 "몇 번지로 가라!"라고 외치는 전선 뭉치.

    • CPU: 명령어를 실행할 때 오직 '주소'만 보고 데이터를 읽거나 쓴다.

    • 동작 과정

      • CPU가 STORE 1, 0xA000 이라는 명령을 실행한다.
        (주소 0xA000에 1을 저장해라)

      • 주소 전선에 0xA000이라는 신호가 흐른다.

      • 시스템 내부에 있는 '주소 해독기'가 이 신호를 보고
        "이건 RAM이 아니라 프린터로 보내야 해"라고 판단하여
        신호의 길을 주변 장치 쪽으로 틀어준다.

      • 주변 장치 내부의 제어 레지스터에 1이라는 값이 기록된다.
        기계는 이 1을 보고 "아, 작동을 시작하라는 뜻이구나"라고
        판단하여 물리적으로 일을 시작한다.

    • 매핑이 없다면?

      • CPU는 메모리용 명령어(LOAD/STORE)와
        장치용 명령어(IN/OUT)을 따로 만들어야 한다.
        하지만 매핑을 하면 명령어 하나로 모든 것을 처리할 수 있기에
        CPU 구조가 보다 단순해진다.

주소 버스(A0~A15)의 정체 (16비트 기준)

  • CPU와 모든 부품은 "16가닥의 구리선(주소 버스)"로 연결되어 있다.
    이 구리선들이 CPU가 몇 번지로 가라고, 신호하는 통로이다.

  • 주소 0xA000을 이진수로 바꾸면 1010 0000 0000 0000이다.
    CPU는 이 숫자에 맞춰 16개의 전선에 전기를 흘리거나(1) 끊는다(0).


A15: "메모리냐 장치냐"를 가르는 마스터 스위치

  • 16가닥(A0~A15)중 가장 왼쪽 전선인 A15(마스터 스위치)는 가장 큰 주소 단위를 결정하고,
    하드웨어 엔지니어는 이 전선 하나로 길을 반으로 나눈다.

  • 가장 왼쪽인 A15가 마스터 스위치인 이유는 우리가 쓰는 십진수에서도
    가장 왼쪽 숫자가 전체 크기를 결정한다.
    예로 1234라는 숫자에서 가장 왼쪽의 숫자인 1이 천의 자리이고,
    이 숫자가 0이면 전체 값은 0000 ~ 0999 사이
    이 숫자가 1이면 전체 값은 1000 ~ 1999 사이이다.
    이처럼 가장 왼쪽 숫자는 전체 범위를 두 덩어리로 크게 나누는 기준이 된다.

  • 메모리 구역 (A15=0): 주소의 시작이 0인 모든 곳 (0x0000 ~ 0x7FFF).

    • 물리적 원리: A15 전선에 전기가 안 들어올 때만
      RAM이 작동하도록 반전기(NOT 게이트)를 달아놓는다.
      즉, "전기가 안 흐름 → 반전기 통과 → RAM에 전기 전달 → RAM 활성화"
  • 주변 장치 구역 (A15=1): 주소의 시작이 1인 모든 곳 (0x8000 ~ 0xFFFF).

    • 물리적 원리: A15 전선에 전기가 흐를 때만 장치 해독기(Decoder)
      전기가 공급되어 장치들이 깨어난다.

해독기(Decoder): "어떤 장치인가"를 고르는 문지기

  • A15를 통과해 주변 장치의 구역에 들어왔다면
    이때에는 A13, A14가 나설 차례가 된다.
    • 동작 원리: 해독기는 A13A_{13}A14A_{14} 전선의 전기 조합을 보고,
      특정 장치의 버튼을 누른다.

      • A13=0, A14=0 이면? -> 키보드 버튼 클릭
      • A13=1, A14=0 이면? -> HDD 버튼 클릭
    • 버튼(활성화 신호)이 눌린 장치만 CPU가 보내는 데이터를 받아들이고,
      나머지 장치들은 자기 일이 아니겠거니 하고, 무시한다.


전체적인 흐름

  • STORE 1, 0xA000 명령을 내리는 순간 벌어지는 일

    • 소프트웨어: "0xA000(HDD의 제어 레지스터 주소)에 1을 써라."

    • 전기 신호: A15A_{15} 전선에 전기 흐름(1), A13A_{13} 전선 전기 흐름(1),
      A14A_{14} 전선 전기 없음(0).

    • 물리적 선택

      • A15A_{15}가 1이라서 RAM은 가만히 있고, 장치 구역이 깨어난다.

      • 해독기가 A13=1, A14=0 신호를 보고,
        HDD 버튼을 누르며 문을 열어준다.

운영체제에서 HDD에서 클러스터 단위로 파일을 저장하면
왜 파일 입출력 성능이 높아지는 것인가?

  • 컴퓨터 내부에서 HDD의 헤드(데이터를 읽는 바늘)가
    아무래도 기계 장치이다 보니 전자가 이동하는 속도에 비해서는
    물리적으로 움직이는 속도가 현저히 느리다.

    • 탐색 시간(Seek Time): 헤드가 데이터가 있는 원판인
      플래터의 위치로 이동하는 시간.

    • 회전 지연(Rotational Latency): 플래터가 빙글빙글 돌아
      데이터가 헤드 밑에 올 때까지 기다리는 시간.

  • 섹터

    • HDD가 물리적으로 데이터를 저장하는 가장 작은 칸이다.
      보통 512바이트 정도인데, 사실 이 단위는
      운영체제가 관리하기엔 너무 작다.

  • 클러스터

    • 운영체제는 여러 개의 섹터를 하나로 묶어
      클러스터라는 단위를 만들고, 이 단위로만 파일을 주고 받는다.
      보통 4096바이트의 크기로
      이렇게 하나로 묶으면 성능이 올라가는 이유는 아래와 같다.

    • 데이터를 섹터 단위로 쪼개서 여기저기 저장하면,
      헤드는 그 조그만하고, 잘 보이지도 않는 조각들을
      찾으려 쉬지 않고, 움직여야 한다.

      하지만 클러스터 단위로 묶어버리면, 헤드가 한 번만 이동해서
      그 자리에 연속된 데이터를 한꺼번에 쭉 읽어버릴 수 있다.
      (아무래도 영역이 넓기 때문에 그 영역을 한번에 읽을 수 있다.)

    • 그리고 I/O 요청 횟수도 감소한다.
      CPU가 HDD에 "데이터 좀 보내줘"라고, 요청하면
      한 번의 명령으로 클러스터라는 큰 덩어리의 데이터를 한 번에
      가져오기 때문에 왓다갔다 하는 횟수가 확연히 줄어든다.


SSD의 직접 접근 방식

  • HDD와 SSD의 가장 큰 차이는 데이터를 찾는 방식이
    물리적이냐, 전기적이냐에 있다.

  • HDD (순차적/물리적 접근)

    • 레코드판을 예시로 들면 만약 1번 노래를 듣다가
      갑자기 10번 노래를 듣고 싶다고 하면 바늘(헤드)이
      1번에서 -> 10번 위치까지 직접 움직여야 한다.
      당연히 멀리 있으면 오래 걸리고, 가까이 있으면 빠르다.
      즉, 데이터의 '물리적인 위치'가 속도를 결정한다.
  • SSD (직접/전기적 접근)

    • 아파트의 인터콤을 예시로 들면 경비실에서
      101호를 호출하나 1501호를 호출하나,
      전기 신호가 전선을 타고 전달되는 시간은 거의 똑같다.
      기계적으로 움직이는 부품이 없기 때문이다.
  • 직접 접근이란

    • 중간 단계를 거치지 않고, 주소만 알면 목표 지점으로
      즉시 점프한다는 뜻이다.

    • 낸드 플래시 내부에는 데이터가 저장되는 아주 작은 방들이
      가로세로 바둑판처럼 배열되어 있다.
      각 방에는 고유한 행(Row) 번호열(Column) 번호가 붙어 있다.

    • 주소 해독기(Decoder)의 역할

      • CPU가 "0x5000 주소의 데이터를 가져와!"라고 명령한다.

      • SSD 컨트롤러는 이 주소를 이진수로 분석해 해당 방으로
        연결된 전선에 전기를 흘린다.

      • 전기는 빛의 속도에 가깝게 이동하므로, 칩의 입구에 있는 데이터나
        가장 구석에 있는 데이터나 도달하는 시간 차이가 거의 0이다.

    • 탐색 시간의 소멸: 데이터를 찾기 위해 헤드를 옮기는 과정이 없다.

    • 회전 지연의 소멸: 데이터가 올 때까지 원판이 돌기를 기다릴 필요가 없다.

    • 일관된 전기적 경로: 어떤 주소를 넣든 주소 해독기를 거쳐
      해당 셀(Cell)까지 도달하는 전기적 경로는 물리적으로
      매우 짧고 일정하게 설계되어 있다.

  • 랜덤 읽기 성능

    • 직접 접근 특성 때문에 랜덤한 곳에 있는
      데이터를 읽는 성능은 SSD가 압도적으로 유리하다.

    • HDD는 데이터가 여기저기 흩어져 있으면 헤드가 왔다 갔다 하느라
      속도가 처참하게 느려진다. (데이터 파편화가 치명적)

    • SSD는 데이터가 어디에 흩어져 있든 주소만 알면
      즉시 가져올 수 있으므로 성능 저하가 거의 없다.

profile
개발을 즐겨보자.

0개의 댓글