2-1 하드웨어의 구성
: CPU(중앙 처리 장치), 메모리(주기억장치 / 보조 기억 장치), 입출력 장치
2-2 폰노이만 구조
: CPU, 메모리, IO장치가 버스로 연결된 구조
: 프로그램이 HDD같은 저장 장치에 담겨있지마, 저장장치에서 바로 실행할 수 없고
메모리로 가지고 와야지만 실행이 됨
⇒ 메인메모리가 유일한 작업공간!!
⇒ 메모리 관리가 중요해짐,,
- CPU? ALU(산술연산 장치), CU(control unit - 제어 장치), Register(임시 보관)
2-3 Register(레지스터)
- 사용자 가시 레지스터
- 데이터 레지스터(DR) - CPU가 명령어를 처리하는데 필요한
데이터를 임시저장
하는 범용 RS
- 주소 레지스터(AR) - 데이터나 명령어가 저장된
메모리 주소를 저장
하는 공간
- 사용자 불가시 레지스터
- 프로그램 카운터(PC) - 다음 실행할 명령어의 위치 정보 저장
- 명령어 레지스터(IR) - 현재 실행 중인 명령어 저장
- 메모리 주소 레지스터(MAR) - 메모리 관리자가 접근해야 할 메모리 주소 저장
- 메모리 버퍼 레지스터(MBR) - 메모리 관리자가 메모리에서 가져온 데이터 임시 저장
- 프로그램 상태 레지스터(PSR)- 연산 결과 저장
2-4 버스 종류와 특징

- 제어 버스(↔) : 제어장치와 연결. CPU가 메모리와 주변 장치에 제어신호를 보내기 위해 사용 (주변 장치에서도 제어신호를 보내므로 양방향)
- 주소 버스(➡️) : MAR와 연결. 메모리나 주변 장치에 데이터를 읽거나 쓸 때 위치 정보 보낼 때 사용 (단방향)
- 데이터 버스(↔) : MBR와 연결. 데이터 이동이 이루어짐 (양방향)
2-5 메모리의 종류

2-6 메모리 보호의 필요성
A 작업이 B 작업 영역에 침범하여 프로그램을 파괴하거나 데이터를 지울 수도 있고, OS 영역을 침범하면 시스템이 멈출 수도 있기 때문임
2-7 메모리 보호 방법
- 작업의 메모리 시작 주소를
경계 레지스터
에 저장 후 작업
- 작업이 차지하고 있는 메모리의 크기(마지막 주소까지의 차이)를
한계 레지스터
에 저장
- 작업이 진행되는 동안 두 레지스터의 주소를 벗어나는지 하드웨어적으로 점검
- 두 레지스터 값을 벗어나면 메모리 오류 관련 인터럽트 발생
- 메모리 영역을 벗어나서 발생한 인터럽트의 경우, OS가 해당 프로그램을 강제 종료
2-8 부팅
컴퓨터를 켰을 때 OS를 메모리에 올리는 과정
2-9 버퍼
- 속도 차이가 있는 두 장치 사이에서 그 차이를 완화하는 역할하는 장치
- 일정량의 데이터를 모아 옮겨서 속도 차이 완화
2-10 스풀 (버퍼의 예)
CPU와 I/O장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼
- ex) 스풀러
: 인쇄 내용을 순차적으로 출력하는 sw로, 출력 명령을 내린 프로그램과 독립적으로 동작
: 인쇄물이 완료될 때 까지 다른 인쇄물이 끼어들 수 없음 ⇒ 프로그램 간에 배타적임

2-11 캐시 (버퍼의 일종)
- CPU와 메모리 간 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해두는 임시장소
- CPU가 앞으로 사용할 것으로 예상되는 데이터를 미리 가져다 놓음
2-12 저장 장치의 계층 구조
속도가 빠르고, 값이 높은 저장장치를 CPU와 가까이,
용량이 크고, 값은 낮은 저장장치를 반대쪽에 배치
👉 적당한 가격으로 속도는 빠르고, 대용량
을 동시에 얻는 법

2-13 인터럽트
입출력 관리자가 CPU에 보내는 완료 신호
- 폴링 방식
: CPU가 직접 입출력 장치에서 데이터를 가져오거나 내보내는 방식
⇒ CPU가 명령어 해석/실행의 본래 역할을 하고 I/O도 관여해야 하므로 작업 효율 떨어짐,,
- 인터럽트 방식
: 입출력 관리자가 대신 입출력 해주는 방식
⇒ 데이터 입출력이 이루어지는 동안 CPU가 다른 작업이 가능
2-14 병렬 처리
: 동시에 여러 개의 명령을 처리하여 작업의 능률을 높이는 방식
💡 CPU에서 명령어가 실행되는 과정
1. 명령어 패치(IF) : 다음에 실행할 명령어를 IR(Instruction Register)에 저장
2. 명령어 해석(ID) : 명령어를 해석함
3. 실행(EX) : 해석한 결과대로 명령어를 실행
4. 쓰기(WB) : 실행 결과를 메모리에 저장

2-14-1 파이프라인 기법
: CPU 사용을 극대화 하기 위해 명령을 겹쳐서 실행하는 기법
: 1, 2번 명령어에 데이터가 겹치는 경우, 앞의 명령어가 끝날 때 까지 두 번째 명령어가 실행되면 안 됨 (데이터 의존성 문제 - 데이터 위험)

2-14-2 슈퍼스칼라 기법
: 파이프라인을 처리할 수 있는 코어를 여러 개 구성하여 복수의 명령어가 동시에 실행되도록 하는 방식
: 파이프라인과 동일하지만 코어 2개 / 각 단계마다 동시 실행 명령어가 2개
라는 점이 다름

2-14-3 슈퍼파이프라인 기법
- 파이프라인의 각 단계를 세분하여 한 클록 내에 여러 명령어를 처리
- 한 클록 내에 다양한 명령어를 실행하면
다음 명령어가 빠른 시간 안에 시작될 수 있어 병렬 처리 능력이 향상

2-14-4 슈퍼파이프라인 슈퍼스칼라 기법
: 슈퍼파이프라인 기법을 여러 개의 코어에서 동시에 수행
