- CPU, 메모리, 입출력장치로 구성됨
- 필수장치 : CPU, 메모리(주기억장치)
- 컴퓨터로 하는 대부분의 작업은 CPU와 메모리를 가지고 처리됨- 주변장치 : 입출력장치(입력장치, 출력장치, 저장장치(보조기억장치))

- 명령어를 해석하여 실행하는 장치
- 산술논리 연산장치, 제어장치, 레지스터로 구성됨
- 작업에 필요한 프로그램과 데이터를 저장하는 장소
- 바이트 단위로 분할되어 있으며 분할 공간마다 주소로 구분
- 입력장치 : 외부의 데이터를 컴퓨터에 입력하는 장치 (키보드, 마우스)
- 출력장치 : 컴퓨터에서 처리한 결과를 사용자가 원하는 형태로 출력하는 장치 (모니터, 프린터)
- 메모리보다 느리지만 저렴하고 용량이 큼
- 전력이 끊겨도 데이터 저장 가능
- HDD, SDD, CD, USB 메모리
- CPU, 메모리, 입출력장치, 저장장치 간 데이터 통로
- CPU, 메모리, 입출력장치, 저장장치를 버스로 연결하는 장치
- CPU, 메모리, 입출력장치, 저장장치를 버스로 연결하는 컴퓨터 구조
- 메모리를 이용하여 프로그래밍이 가능한 컴퓨터 구조
- 폰 노이만 구조가 등장하기 전 : 하드 와이어링(진공관을 전선으로 연결하여 논리 회로를 구성하여 프로그램 작성)을 이용한 컴퓨터 구조- 저장장치에 있는 프로그램은 메모리로 올라와야 실행 가능
- CPU는 작업을 할 때 일정한 박자가 있는데 이 박자를 만들어 냄
- 클록이 일정 간격으로 clock tick(clock cycle)을 만들면 거기에 맞추어 CPU 안의 모든 구성 부품이 작업함

- 초당 clock cycle 수 (1초에 clock cycle이 한 번이면 1 Hz)
- 명령어를 해석하여 실행하는 장치
- 산술논리 연산장치, 제어장치, 레지스터로 구성됨
- CPU에서 데이터를 연산하는 장치
- 데이터의 덧셈, 뺄셈, 곱셈, 나눗셈 같은 산술 연산 수행
- AND, OR와 같은 논리 연산 수행
- CPU 명령어를 해석하여 제어신호를 보냄
- 데이터 연산을 위해 메인 메모리부터 데이터를 읽어와 저장하는 곳

- CPU는 연산에 필요한 데이터를 메모리로부터 레지스터로 가져와서 연산을 수행한 다음 연산 결과를 레지스터에 저장했다가 메모리로 옮김
- 사용자 프로그램에 의해 변경되는 레지스터
- 데이터 레지스터(DR)
메모리에서 가져온 데이터를 저장하는 레지스터
- 주소 레지스터(AR)
데이터의 메모리 주소를 저장하는 레지스터
- 사용자 프로그램에 의해 변경할 수 없는 레지스터
- 프로그램 카운터(PC, program counter)
다음에 실행할 명령어의 주소 또는 명령어의 코드 행 번호를 저장하고 있다가 제어장치에게 알려주는 레지스터
- 명령어 레지스터(IR, instruction regiser)
현재 실행중인 명령어를 저장하는 레지스터
- 메모리 주소 레지스터(MAR, memory address register)
메모리로부터 읽거나 메모리에 쓸 데이터의 메모리 주소를 저장하는 레지스터
- 메모리 버퍼 레지스터(MBR, memory buffer register)
메모리로부터 읽거나 메모리에 쓸 데이터를 저장하는 레지스터
- 프로그램 상태 레지스터(PSR, program state register)
산술논리 연산장치의 연산결과의 상태를 저장하는 레지스터
- CPU, 메모리, 입출력장치, 저장장치 간 데이터 통로
- CPU 내의 산술논리 연산장치, 제어장치, 레지스터를 연결하는 버스
- BSB(back-side bus)라고도 함
- 메인보드에서 CPU, 메모리, 주변 장치를 연결하는 버스
- FSB(front-side bus)라고도 함
| 종류 | 설명 |
|---|---|
| 제어 버스 | - 제어 장치와 연결된 버스 - CPU 명령어를 해석하여 제어신호를 주고 받기 위해 사용됨 (양방향 통신) |
| 주소 버스 | - 메모리 주소 레지스터와 연결된 버스 - 메모리 또는 주변장치에 데이터를 읽거나 쓸 때 데이터의 메모리 주소 또는 주변 장치 내의 위치 정보를 보내기 위해 사용됨 (단방향 통신) |
| 데이터 버스 | - 메모리 버퍼 레지스터와 연결된 버스 - 메모리 또는 주변장치에 데이터를 읽거나 쓸 때 데이터를 주고 받기 위해 사용됨 |

- 작업의 메모리 시작 주소를 경계 레지스터(boundary register)에 저장 후 작업
- 작업이 차지하고 있는 메모리의 크기를 한계 레지스터(limit register)에 저장
- 사용자의 작업이 진행되는 동안 이 두 레지스터의 주소 범위를 벗어나는지 하드웨어적으로 점검
- 두 레지스터의 값을 벗어 나면 메모리 오류와 관련된 인터럽트가 발생
- 메모리 영역을 벗어나서 발생한 인터럽트의 경우 운영체제가 해당 프로그램을 강제 종료

- 컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정
- 부팅 과정
1. 컴퓨터의 전원을 켬
2. ROM에 있는 BIOS 프로그램이 실행되어 하드웨어(CPU, 메모리, 주변장치)가 정상적으로 동작하는지 확인
3. BIOS 프로그램은 ROM에 있는 bootstrap 프로그램을 실행시켜서 하드디스크 내의 마스터 부트 레코드(master boot record, MBR)에 저장된 bootloader 프로그램을 메모리에 올림
4. Bootloader 프로그램이 실행되면 운영체제(OS)가 메모리에 올라감

- 두 장치 간의 속도 차이를 완화하기 위해 두 장치 간의 데이터 전송 시 데이터를 임시로 저장하는 장치
- CPU와 입출력 장치가 독립적으로 동작할 수 있도록 하는 기법
- CPU와 입출력 장치 간의 속도 차이를 완화 시킴

- CPU와 메모리 간의 속도 차이를 완화시키기 위해 메모리의 데이터를 임시로 저장하는 버퍼의 일종
- CPU는 메모리에 접근해야 할 때 캐시를 먼저 방문하여 원하는 데이터가 있는지 찾아봄
- 캐시 히트(cache hit) : 캐시에 원하는 데이터를 찾았을 때
- 캐시 미스(cache miss) : 캐시에 원하는 데이터가 없을 때
- 캐시 적중률(cache hit ratio) : 캐시 히트의 비율
- 캐시 적중률을 높이기 위한 방법
- 캐시 크기를 증가 시킴
- CPU가 앞으로 사용할 데이터를 메모리로부터 캐시로 미리 가져옴
지역성(locality)이론에 근거하여 현재 데이터와 가까운 데이터들이 사용될 확률이 높기 때문에 미리 가져옴


- 소프트웨어와 하드웨어에 의해 발생하는 이벤트
- 운영체제는 인터럽트가 발생하면 실행 중인 프로세스를 중단하고 인터럽트를 먼저 처리함
- 입출력(I/O) 작업이 완료되었을 때 CPU에게 알리기 위해 발생
- 숫자를 0으로 나눴을 때
- 사용자가 컴퓨터의 전원 버튼을 눌렀을 때
- 잘못된 메모리 주소를 참조(invalid memory access)하였을 때
- 인터럽트 발생
- OS는 실행 중인 프로세스를 중단하고 CPU의 상태를 보존함
- 인터럽트 처리
- 중단된 프로세스로 복귀하여 계속 수행
- CPU와 주변장치 (입출력장치, 저장장치) 간의 데이터 I/O 방법
- Polling I/O, interrupt driven I/O, DMA(direct memory access)
- 인터럽트 기반의 interrupt driven I/O, DMA 방법이 많이 사용됨
- CPU와 주변장치(입출력장치, 저장장치) 사이에 존재
- CPU가 직접 데이터 I/O 처리를 하지 않고 I/O controller에게 데이터 I/O 처리를 요청함
- I/O controller는 주변장치에 대한 데이터 I/O 처리

- CPU가 I/O controller에게 데이터 I/O 처리를 요청
- I/O controller는 입출력 장치로부터 요청 받은 데이터를 메모리로 옮기거나 메모리에 있는 데이터 입출력 장치로 옮김

- 입출력장치 (키보드, 마우스, 모니터, 프린터)에 대한 문자(byte) 단위 데이터 I/O 처리
- Polling 방식
- CPU가 I/O controller에게 데이터 I/O 처리를 요청한 다음 CPU는 주기적으로 I/O controller의 데이터 I/O가 완료되었는지 확인
- Synchronous I/O
- 입출력 장치 (키보드, 마우스, 모니터, 프린터)에 대한 문자(byte) 단위 데이터 I/O 처리
- Interrupt 방식
- CPU가 I/O controller에게 데이터 I/O 처리를 요청한 다음 다른 작업을 처리하여 CPU의 효율성을 높임
- I/O controller는 데이터 I/O가 완료되면 CPU에게 Interrupt를 보냄
- Asynchronous I/O- 한 문자당 하나의 interrupt 발생
- 따라서, 블록 단위 데이터 I/O를 처리하려면 수많은 interrupt가 발생함
- 저장장치(HDD, SSD, CD, USB 메모리)에 대한 블록(block)단위 데이터 I/O 처리
- 동작 과정
1. CPU가 I/O controller에게 블록 단위 데이터 I/O 처리를 요청할 때 메모리 상의 데이터의 시작주소와 데이터의 크기를 알려줌. 그 다음 CPU는 다른 작업을 처리 ⇨ CPU의 효율성을 높임
2. I/O controller는 블록 단위 데이터 I/O를 처리하는 동안 CPU의 간섭(명령)없이 메모리에 직접 접근하여 저장 장치로부터 요청 받은 데이터를 메모리로 옮기거나 메모리에 있는 데이터를 저장장치로 옮김
3. I/O controller는 데이터 I/O가 완료되면 CPU에게 Interrupt를 보냄- Asynchronous I/O
- 한 블록당 하나의 interrupt 발생

글이 많은 도움이 되었습니다, 감사합니다.