일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 거품정렬
- 코테
- 코딩테스트
- 코테준비
- 15552번
- collections.sort
- 퀵정렬
- stack
- 이진트리탐색
- 선택정렬
- 백준
- 팀정렬
- divide and conquer
- 삽입정렬
- MSA
- 자료구조
- 큐
- 연결리스트
- 스터디
- 트라이
- Timsort
- 힙
- heap
- 프로그래머스
- 스택
- 분할정복
- 우선순위 큐
- 파싱
- 해시함수
- LinkedList
- Today
- Total
Little bIT awesome
[1주차] Computer Architecture(1/2) 본문
컴퓨터의 구성
- 하드웨어 : 컴퓨터를 구성하는 기계적 장치
- 소프트웨어 : 하드웨어의 동작을 지시하고 제어하는 명령어 집합
하드웨어
- 중앙처리장치(CPU)
- 기억장치(RAM, HDD(하드 디스크 드라이브) 등)
- 입출력 장치(마우스, 프린터 등)
소프트웨어
- 시스템 소프트웨어(운영체제, 컴파일러)
- 응용 소프트웨어(워드 프로세서, 스프레드시트 등)
하드웨어는 크게 중앙처리장치, 기억장치, 입출력 장치로 구성됨
이들은 시스템 버스로 연결되어 있음
* 시스템 버스 : 데이터와 명령 제어 신호를 각 장치로 실어나르는 역할을 함
중앙 처리 장치
인간으로 따지면 두뇌에 해당하는 부분
주기억장치에서 명령어와 데이터를 읽어와 처리하고, 명령어의 수행 순서를 제어함
중앙처리장치는 비교와 연산을 담당하는 산술논리연산장치(ALU)와 명령어의 해석과 실행을 담당하는 제어장치, 속도가 빠른 데이터 기억장소인 레지스터로 구성되어 있음.
개인용 컴퓨터와 같은 소형 컴퓨터에서는 CPU를 마이크로프로세서라고도 부름
기억장치
프로그램, 데이터, 연산의 중간 결과를 저장하는 장치
주기억장치와 보조기억장치로 나누어짐
주기억장치 : RAM, ROM. 실행중인 프로그램과 같은 프로그램에 필요한 데이터를 일시적으로 저장한다.
보조기억장치 : 하드디스크 등, 주기억장치에 비해 속도는 느리지만 많은 자료를 영구적으로 보관할 수 있다는 장점이 있다.
* RAM(Random Access Memory) : 휘발성 메모리, 데이터 처리가 매우 빠름, CPU와 HDD의 처리 속도 차이를 보완
* ROM(Read Only Memory) : 비휘발성 메모리,
내장형 ROM에는 BIOS 프로그램이 설치되어있음(컴퓨터를 구동하기 위한 기본적인 정보가 담겨있음)
* BIOS(Basic Input/Output System) : 펌웨어. 메모리, 디스크, 모니터와 같은 주변기기 사이의 정보 전송을 관장하는 프로그램. 컴퓨터의 하드웨어에 접근하기 쉬운 함수들의 집합
입출력장치
입력과 출력 장치로 나누어짐
입력 장치 : 컴퓨터 내부로 자료를 입력하는 장치 (키보드, 마우스 등)
출력 장치 : 컴퓨터에서 외부로 표현하는 장치 (프린터, 모니터, 스피커 등)
시스템 버스
하드웨어 구성 요소를 물리적으로 연결하는 선
각 구성요소가 다른 구성요소로 데이터를 보낼 수 있도록 통로가 되어줌
용도에 따라 데이터 버스, 주소 버스, 제어 버스로 나누어짐
데이터 버스
중앙처리장치(CPU)와 기타 장치(기억, 입출력) 사이에서 데이터를 전달하는 통로
기억장치와 입출력장치의 명령어와 데이터를 중앙처리장치로 보내거나, 중앙처리장치의 연산 결과를 기억장치와 입출력장치로 보내는 '양방향' 버스
데이터 버스의 크기는 CPU가 한 번에 전송 가능한 데이터의 크기와 같음
주소 버스
데이터를 정확히 실어나르기 위해서는 기억장치 '주소'를 정해주어야 함
주소버스는 중앙처리장치가 주기억장치나 입출력장치로 기억장치 주소를 전달하는 통로이기 때문에 '단방향' 버스임
(CPU -> 기타 장치)
주소 버스의 비트 수는 기억장치의 주소 수를 결정함
제어 버스
주소 버스와 데이터 버스는 모든 장치에 공유되기 때문에 이를 제어할 수단이 필요함
제어 버스는 중앙처리장치가 기억장치나 입출력장치에 제어 신호를 전달하는 통로
제어 신호 종류 : 기억장치 읽기 및 쓰기, I/O 읽기 및 승인, 버스 요청 및 승인, 인터럽트 요청 및 승인, 클락, 리셋 등
제어 버스는 읽기 동작과 쓰기 동작을 모두 수행하기 때문에 '양방향' 버스임
버스 대역폭
버스의 클럭 주파수 X 데이터 버스의 폭
대역폭 : 데이터가 이동하는 버스를 통해 단위 시간당 전송하는 데이터의 크기
버스 클럭 주기 : 버스 동작들의 시작 시간을 일치시키기 위하여 제공되는 공통 클럭 신호(버스 대역폭을 결정한다)
컴퓨터는 기본적으로 읽고 처리한 뒤 저장하는 과정으로 이루어짐 (Read -> Process -> Write)
이 과정을 진행하면서 끊임없이 주기억장치(RAM)과 소통
이 때, 운영체제가 64bit라면, CPU는 RAM으로부터 테이터를 한 번에 64bit씩 읽어온다.
중앙처리장치(CPU)의 작동 원리
CPU는 컴퓨터에서 가장 핵심적인 역할을 수행하는 부분으로 '인간의 두뇌'에 해당함
연산장치, 제어장치, 레지스터로 구성됨
1. 연산장치
산술연산과 논리연산을 수행 (산술논리연산장치라고도 불림)
연산에 필요한 데이터를 레지스터에서 가져오고, 연산 결과를 다시 레지스터로 보냄
2. 제어장치
명령어를 순서대로 실행할 수 있도록 제어하는 장치
주기억장치에서 프로그램명령어를 꺼내 해독하고, 그 결과에 따라 명령어 실행에 필요하는 제어 신호를 기억장치, 연산장치, 입출력장치로 보냄
또한 이들 장치가 보낸 신호를 받아, 다음에 수행할 동작을 결정함
3. 레지스터
고속 기억장치
명령어 주소, 코드, 연산에 필요한 데이터, 연산 결과 등을 임시로 저장
용도에 따라 범용 레지스터와 특수목적 레지스터로 구분됨
중앙처리장치 종류에 따라 사용할 수 있는 레지스터 개수와 크기가 다름
- 범용 레지스터 : 연산에 필요한 데이터나 연산 결과를 임시로 저장
- 특수목적 레지스터 : 특별한 용도로 사용하는 레지스터
특수 목적 레지스터 중 중요한 것들
- MAR(메모리 주소 레지스터) : 읽기와 쓰기 연산을 수행할 주기억장치 주소 저장
- PC(프로그램 카운터) : 다음에 수행할 명령어 주소 저장
- IR(명령어 레지스터) : 현재 실행 중인 명령어 저장
- MBR(메모리 버퍼 레지스터) : 주기억장치에서 읽어온 데이터 or 저장할 데이터를 임시로 저장
- AC(누산기) : 연산 결과 임시 저장
CPU의 동작 과정
1. 주기억장치는 입력장치에서 입력받은 데이터 또는 보조기억장치에 저장된 프로그램을 읽어옴
2. CPU는 프로그램을 실행하기 위해 주기억장치에 저장된 프로그램 명령어와 데이터를 읽어와 처리하고 결과를 다시 주기억장치에 저장
3. 주기억장치는 처리 결과를 보조기억장치에 저장하거나 출력장치로 보냄
4. 제어장치는 1~3 과정에서 명령어가 순서대로 실행되도록 각 장치를 제어
※ 명령어 세트?
CPU가 실행할 명령어의 집합
연산 코드(Operation Code) + 피연산자(Operand)로 이루어짐
연산 코드 : 실행할 연산. 연산, 제어, 데이터 전달, 입출력 기능을 가짐
피연산자 : 필요한 데이터 or 저장 위치. 주소, 숫자/문자, 논리 데이터 등을 저장
CPU는 프로그램을 실행하기 위해 주기억장치에서 명령어를 순차적으로 인출하여 해독하고 실행하는 과정을 반복함.
CPU가 주기억장치에서 한번의 하나의 명령어를 인출하여 실행하는데 필요한 일련의 활동을 '명령어 사이클'이라고 말함
명령어 사이클은 인출/실행/간접/인터럽트 사이클로 이루어짐
각 사이클의 명령어 처리 과정
인출 사이클(Fetch Cycle)
주기억장치에서 명령어를 인출하고, 다음 명령어를 인출하기 위해 PC값을 증가시킨다.
인출 사이클의 작동 순서 (※ 이런 작은 사이클 내에서의 작동 과정을 마이크로 연산이라고 한다.)
- t_0 : PC에 저장된 주소를 MAR로 전달
- t_1 : MAR의 내용을 토대로 주기억장치의 해당 주소에서 명령어 인출하고 인출한 명령어를 MBR에 저장함.
다음 명령어를 인출하기 위해 PC값 증가 - t_2 : MBR에 저장된 내용을 IR에 전달
실행 사이클(Execute Cycle)
인출한 명령어를 해독하고 그 결과에 따라 제어 신호를 발생시켜 명령어를 실행한다. 인출 사이클은 명령어를 인출해오는 과정이기 때문에 동일한 마이크로 연산이 반복되지만, 실행 사이클은 명령어의 연산 코드마다 수행되는 마이크로 연산이 달라진다.
연산 코드 종류
- 데이터 이동 : CPU와 기억 장치/입출력 장치 간의 데이터를 이동
- 데이터의 저장
- 데이터 처리 : 데이터에 대한 산술 혹은 논리 연산 수행
- 프로그램 제어 : 프로그램의 실행 순서를 결정
명령어 작동 과정
데이터 이동(LOAD)
- t_0 : IR에 있는 명령어의 주소 부분을 MAR로 전송
- t_1 : MAR에 저장된 해당 주소의 기억 장치로부터 데이터를 인출하여 MBR로 전송
- t_2 : MBR에 저장된 데이터를 AC에 적재
데이터 저장(STA)
- t_0 : IR에서 데이터를 저장할 기억장치의 주소를 MAR으로 전송
- t_1 : AC의 데이터를 MBR로 이동
- t_2 : MBR의 내용을 MAR이 지정하는 기억장소에 저장
데이터 처리(ADD)
- IR에서 데이터를 읽어올 기억장치의 주소를 읽어 MAR으로 전송
- MAR에 저장된 주소에서 데이터를 인출하여 MBR로 전송
- 기존의 AC값과 MBR의 값을 연산하여 AC에 저장
프로그램 제어
- t_0 : IR의 명령어의 오퍼랜드(분기할 목적지 주소)를 PC에 저장. 다음 명령어 인출 사이클에서 그 주소의 명령어가 인출됨.
https://blog.naver.com/PostView.naver?blogId=ben4109&logNo=222284380523
컴퓨터 구조 - 명령어 실행
명령어 실행에 대해서 자세하게 알아보겠습니다. . . . 명령어의 실행 명령어의 실행은 전 포스트에서 명령...
blog.naver.com
연산 과정 상세 설명 블로그 참고
간접 사이클(Indirect cycle)
간접 사이클은 Fetch와 execute 사이클의 중간단계라고 할 수 있다.
이 사이클은 fetch 단계에서 해석한 주소를 읽어왔는데, 그 주소가 간접 주소인 경우에 유효주소를 계산하기 위해서 거치는 사이클이다.
굳이 간접 주소 지정을 하는 이유는, 명령어의 비트 공간을 확보하기 위해서 주소 길이가 제한되는데 참조를 2번 하는 방식으로 마치 주소 공간을 2배로 가질 수 있도록하는 것이다.
인터럽트 사이클(Interrupt cycle)
CPU가 프로그램을 수행하는 동안 컴퓨터 시스템의 내부와 외부에서 발생하는 예기치 못한 사건이 있을 때 실행되는 사이클이다. CPU는 항상 인터럽트 요구가 있는지 검사한다. 만약 인터럽트 요구가 있다면 현재 수행 중인 프로그램의 주소 값인 PC 값을 특정 영역에 저장한 뒤, 인터럽트 프로세스를 진행한다. 인터럽트 요구가 끝나면, PC에 저장된 원래 진행하던 프로그램의 처리를 계속해서 수행한다.
캐시 메모리 (Cache Memory)
속도가 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리
(CPU 코어와 메모리 사이, 하드디스크와 웹페이지 사이)
CPU가 주기억 장치에서 저장된 데이터를 읽어올 때, 자주 사용하는 데이터를 캐시 메모리에 저장한 뒤, 다음에 이용할 때 주기억장치가 아닌 캐시 메모리에서 먼저 가져오면서 속도를 향상시킨다.
속도라는 장점을 얻지만, 용량이 적기도 하고 비용이 비싸다는 단점이 있음. (SRAM 가격이 매우 비싸기 때문)
CPU에는 이러한 캐시 메모리가 2~3개 정도 사용된다 (L1, L2, L3)
속도와 크기에 따라 분류한 것으로, 일반적으로 L1 캐시부터 먼저 사용됨.
듀얼 코어 프로세서의 캐시 메모리 : 각 코어마다 독립된 L1 캐시 메모리를 가지고, 두 코어가 공유하는 L2 캐시 메모리가 내장됨
만약 L1 캐시가 128kb면, 64/64로 나누어 64kb에 명령어를 처리하기 직전의 명령어를 임시 저장하고, 나머지에는 실행 후 명령어를 임시저장한다. (명령어 세트로 구성, I-Cache - D-cache)
L1 : CPU 내부에 존재
L2 : CPU와 RAM 사이에 존재
L3 : 보통 메인보드에 존재
※ 디스크 캐시 : 주기억장치(RAM)와 보조기억장치(하드디스크)사이에 존재하는 캐시
캐시 메모리 작동 원리
- 시간 지역성
for 나 while 같은 반복문에 사용하는 조건 변수처럼 한 번 참조된 데이터는 잠시 후 또 참조될 가능성이 높음 - 공간 지역성
A[0], A[1]과 같은 연속 접근 시, 참조된 데이터 근처에 있는 데이터가 잠시 후 또 사용될 가능성이 높음
캐시에 데이터를 저장할 때는, 이러한 참조 지역성을 최대한 활용하기 위해 해당 데이터뿐만 아니라, 옆 주소의 데이터도 같이 가져와 미래에 쓰일 것을 대비한다.
CPU가 요청한 데이터가 캐시에 있으면 'Cache Hit', 없어서 DRAM에서 가져오면 'Cache Miss'
캐시 미스 경우 3가지
- Cold miss
해당 메모리 주소를 처음 불러서 나는 미스 - Conflict miss
캐시 메모리에 A와 B 데이터를 저장해야 하는데, A와 B가 같은 캐시 메모리 주소에 할당되어 있어서 나는 미스 - Capacity miss
캐시 메모리의 공간이 부족해서 나는 미스
캐시 크기를 키워서 문제를 해결하려면, 캐시 접근 속도가 느려지고 파워를 많이 먹는 단점이 생김
구조 및 작동 방식
1. Direct Mapped Cache
가장 기본적인 구조, DRAM의 여러 주소가 캐시 메모리의 한 주소에 대응되는 다대일 방식
메모리 주소의 하위 비트를 사용하는 것. 하위 비트(index)가 블록 넘버가 됨.
상위비트를 태그 비트로 두고 해당 블록 넘버에서 가져온 캐시 태그와 비교할 때 사용(일치하면 hit)
1. 먼저 세트 인덱스에 따른 캐시 엔트리에 엑세스한다.
2. 해당 캐시 엔트리의 유효 비트가 1인지 확인한다.
3. 유효 비트가 1이라면, 메모리 주소의 태그 필드와 캐시 엔트리의 태그 필드가 동일한지 비교한다.
두 개의 태그가 동일하다면, 유효비트와 AND 연산한다.
유효 비트가 1이라는 것은 캐시 블록에 올바른 데이터가 존재한다는 것을 의미한다. 또한 메모리 주소의 태그와 캐시 엔트리의 태그가 같으므로 올바른 메모리 주소에 액세스 되었음을 확인할 수 있다. 이것이 캐시 히트
만약 유효비트가 0이라면 캐시 미스. 이는 캐시 블록이 비었거나 올바르지 않은 데이터가 있다는 의미.
상위 캐시 메모리나 주기억장치에서 데이터를 다시 가져와 유효비트를 1로 변경한다.
유효 비트가 1이라도 태그가 서로 일치하지 않으면 캐시미스.
이 경우 메모리의 교체 정책에 따라 조치가 이루어진다. FIFO 정책이라면, 가장 오래된 데이터가 교체됨. 캐시 엔트리의 태그 필드를 메모리 주소의 태그로 변경하고, 상위 캐시 메모리나 주기억장치에서 데이터를 가져와 변경한다.
https://blog.naver.com/techref/222290234374
캐시 메모리의 구조(Cache Structure)와 캐시 히트(Cache Hit), 캐시 미스(Cache Miss)
Cache Temporary Storage 캐시 메모리(Cache Memory)는 CPU 프로세서가 빠른 속도로 데이터를 주고...
blog.naver.com
블록 오프셋은 캐시 블록 내의 특정 바이트 위치에 엑세스하기 위한 필드(내가 필요한 데이터를 구분해준다.)
https://hi-guten-tag.tistory.com/282
[컴퓨터 구조] Direct Mapping
앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.11.22 - [Computer Science/컴퓨터 구조] - [컴퓨터 구조] The Basic of Cache [컴퓨터 구조] The Basic of Cache 앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.11.22 -
hi-guten-tag.tistory.com
Direct Mapping의 단점 중 하나는 빈 공간이 존재한다는 것
하나의 block은 하나의 공간에만 들어갈 수 있고, 사용하지 않는 공간은 빈 공간으로 남아있기 때문
이를 해결하기 위한 방식이 Associative Cache
2. Fully Associative Cache
비어있는 캐시 메모리가 있으면, 마음대로 주소를 저장하는 방식
저장할 때는 매우 간단하지만, 찾는 것이 까다로움
조건이나 규칙이 없어서, 특정 캐시 Set안에 있는 모든 블럭을 한 번에 찾아 원하는 데이터가 있는지 검색해야 한다.
CAM이라는 특수한 메모리 구조를 사용해야 하지만 가격이 매우 비싸다.
3. Set Associative Cache
Direct + Fully 방식이다.
Direct에 비해 검색 속도는 느리지만 저장이 빠르고, Fully에 비해 저장이 느린 대신 검색이 빠른 중간형
Cache를 n개의 블락으로 구성된 set로 나눔(n-way set-associative cache)
해당 set 안의 아무 위치에 들어갈 수 있음
(아래의 예시는 8개의 블락을 2개의 블락으로 구성된 4개의 set으로 나눈 것)
https://hi-guten-tag.tistory.com/289
[컴퓨터 구조] Mapping 방식의 비교
앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.11.22 - [Computer Science/컴퓨터 구조] - [컴퓨터 구조] The Basic of Cache [컴퓨터 구조] The Basic of Cache 앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.11.22 -
hi-guten-tag.tistory.com
'CS 공부 > Computer Science' 카테고리의 다른 글
[네트워크] DNS 동작방식 (0) | 2024.10.29 |
---|---|
[2주차] Computer Architecture(2/2) (1) | 2023.10.08 |