목차
- 시스템 버스(System Bus) 란?
- 제어 버스 (Contol Bus)
- 주소 버스 (Address Bus)
- 데이터 버스 (Data Bus)
- CPU와 기억 장치간의 통신
- CPU와 I/O 장치간의 통신
- 전체 시스템 구성
시스템 버스(System Bus) 란?
- 시스템 버스란 컴퓨터의 구성요소(CPU, 기억장치, I/O장치)간의 Data/신호 교환을 위한 통로입니다.
- 제어 버스 / 주소 버스 / 데이터 버스 라는 하부 버스로 이루어집니다.
쉽게 이해하자면 시스템 버스라는 버스 터미널 안에 버스가 지나다니고, 데이터와 신호들이 각 버스를 타고 이동한다고 이해하면 쉽습니다.
제어 버스 (Control Bus)
- 제어 버스는 CPU가 시스템 내의 각종 요소들의 동작을 제어하는데 필요한 신호들을 전달하는 통로입니다.
- 제어 선의 개수는 CPU or 시스템 구성에 따라 다릅니다. 고정값X
- 가장 기본적인 제어 신호들로는 기억장치 읽기/쓰기 신호와 I/O 읽기/쓰기 신호가 있습니다.
- 읽기/쓰기 동작을 모두 수행하기 때문에 양방향 버스 입니다.
주소 버스 (Address Bus)
- 주소 버스는 다른 장치로 주소 정보(기억장치 주소, I/O 장치 포트 번호)를 전달하는 통로입니다.
- 주소 선의 개수 == 주소 버스의 폭(Width) == 최대 기억장치 용량 ( 2^주소 버스의 폭 )
- 주소를 전달만 하기 때문에 단방향 버스 입니다.
데이터 버스 (Data Bus)
- 데이터 버스는 CPU와 다른 장치 사이에서 실질적인 Data를 전달하는 통로입니다.
- 데이터를 주고 받아야 하기 때문에 양방향 버스 입니다.
- 데이터 버스의 폭(Width)가 한 번에 전송될 수 있는 Data의 크기(비트 수)를 결정합니다.
- Word 크기, 레지스터 크기와 같다.
- 만약 데이터 버스 크기가 32bit 라면, Data를 한 번에 32bit씩 읽을 수 있다.
CPU와 기억 장치간의 통신
- CPU가 데이터를 기억장치의 특정 장소에 저장하거나 이미 저장되어 있는 내용을 읽는 동작을 액세스(Access)라고 합니다.
- 이러한 액세스는 적재(Load), 저장(Store) 명령에 의해 수행됩니다.
적재(Load): 기억장치 읽기
- 주소 버스: 기억장치에서 읽을 Data가 저장된 주소 값 전달 ( CPU -> 기억장치 )
- 제어 버스: "기억장치 읽기 신호" 전달 ( CPU -> 기억장치 )
- 데이터 버스: 해당 기억장치에 저장된 Data 전달 ( 기억장치 -> CPU )
저장(Store): 기억장치 쓰기
- 주소 버스: Data를 저장 할 기억장치의 주소 값 전달 ( CPU -> 기억장치 )
- 제어 버스: "기억장치 쓰기 신호" 전달 ( CPU -> 기억장치 )
- 데이터 버스: 저장 할 Data 를 기억장치에 전달 ( CPU-> 기억장치 )
CPU와 I/O 장치간의 통신
- 버스(주소, 데이터), 제어 신호(I/O 읽기/쓰기 신호)가 필요합니다.
- 시스템 버스에서 I/O장치에 직접 연결하지 못하기 때문에 I/O 장치 제어기를 통해서 제어를 전달합니다.
- 접속 경로: CPU <-> 시스템 버스 <-> I/O 장치 제어기 <-> I/O 장치
CPU가 키보드로부터 데이터를 읽어들이는 과정은 다음과 같습니다.
- 키보드의 어느 한 키가 눌러지면 그에 대응되는 8비트(ASCIII 코드 7비트 + 패리티 비트 1비트) 데이터가 제어기로 전송되어 데이터 레지스터에 저장됩니다.
- 동시에 상태 레지스터에 입력 준비 비트(In_RDY)가 세트됩니다.
- CPU는 데이터 입력을 원하는 시점이 되면 먼저 상태 레지스터를 읽어들이고 In_RDY 비트가 1로 세트되어 있는지 검사합니다.
- 만약 세트되어있다면 데이터 레지스터에서 데이터를 읽어오고, 그렇지 않다면 상태 레지스터의 내용을 검사하는 과정을 반복합니다.
전체 시스템 구성
'CS' 카테고리의 다른 글
Heap이 Stack에 비해 느릴 수 밖에 없는 이유 (0) | 2024.07.21 |
---|---|
객체 지향 프로그래밍을 설계할 때는 SOLID 원칙을 지켜야 한다. (0) | 2024.04.12 |
[소프트웨어 공학] 블랙박스 테스트-1 (0) | 2022.11.07 |
[소프트웨어 공학] JUnit (0) | 2022.10.10 |
[소프트웨어 공학] 소프트웨어 테스트 - 2 (0) | 2022.10.03 |