본문 바로가기

전체 글

(118)
컴퓨터 구조 : CPU를 빠르게 설계하는 법 (클럭, 코어, 스레드) CPU의 속도에 영향을 미치는 것에 대해 알아보자 📗 클럭이란? 클럭은 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위이다. ✔ 그럼 클럭 신호가 빠르게 반복되면 컴퓨터의 부품들이 빠르게 움직일까? 꼭 그렇지는 않지만 일반적으로는 그렇다. 하지만 필요 이상으로 클럭 신호를 높인다면 발열이 심해질 수 있다. 💻 클럭 속도 헤르츠(Hz) 단위로 측정한다. 헤르츠는 1초에 클럭이 반복되는 횟수다. 클럭이 1초에 한번 반복되면 1Hz 클럭이 1초에 100번 반복되면 100Hz 이다. 위 i7-11700 CPU를 예시로 들면 클럭이 1초에 25억번 (2.5 x 109) 번 순간 최대 49억번 (4.9 x 109) 번 반복된다. 📗 코어란? 전통적으로 '명령어를 실행하는 부품'은 원칙적으로 하나만..
[JAVA] 백준 - 11659 구간 합 구하기 4 ✅ 핵심 풀이 수의 개수와 구해야 하는 횟수가 둘 다 10만 이므로 만약 문제에서 주어지는 데이터가 n과 m모두 10만인 최대치로 주어진다면 구해야하는 횟수 x 수의 범위 => 100억으로, 시간 제한인 1초(약1억)를 넘어가게 된다. 따라서 해당 문제는 a부터 b까지의 범위에 대한 합 정보, 다시 말해 구간 합의 정보를 미리 저장해두고 i번째와 j번째 수의 합을 출력해야 시간초과를 하지 않게 된다. import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStream..
컴퓨터 구조 : 명령어 사이클과 인터럽트 📗 명령어 사이클 프로그램 속 명령들은 일정한 주기를 반복하며 실행한다. 이 주기를 명령어 사이클이라고 한다. ✔ 메모리 속 명령어를 실행하려면? 메모리 속 프로그램을 CPU로 가져와야 한다. 이 과정을 '인출' 이라고 하고 이 인출하는 주기를 '인출 사이클' 이라고 한다. 가져온 프로그램을 실행하는 주기는 '실행 사이클' 이다. 인출 사이클과 실행 사이클을 계속해서 반복한다. 인출 이후 바로 실행을 할 수도 있지만 실행을 할 수 없는 경우도 있다. 이때는 메모리 접근이 더 필요한 경우로 간접 사이클에 돌입하게 된다. 이후 실행이 가능해 지면 실행 사이클에 돌입하게 된다. ✔ 간접 사이클이란? 데이터에 대한 연산을 수행하는 경우에 명령어에는 그 데이터를 읽어오기 위한 기억장치 주소가 포함되어있는데 어떤 ..
컴퓨터 구조 : 레지스터 📗 레지스터 프로그램 속 명령어와 데이터는 실행 전후로 레지스터에 저장된다. 레지스터의 종류는 다양하며 전부 역할이 다르다. 💻프로그램 카운터 (PC) 다음에 메모리에서 가져온 올 명령어의 주소를 저장하는 레지스터이다. 프로그램 카운터가 있기 때문에 프로그램이 순차적으로 실행할 수 있게 된다. 💻명령어 레지스터 방금 메모리에서 읽어들인 해석할 명령어가 저장되는 레지스터 이다. 💻메모리 주소 레지스터 메모리의 주소를 저장하고 CPU가 읽어들이고자 하는 주소를 주소버스로 보낼 때 거쳐가는 레지스터 이다. 💻메모리 버퍼 레지스터 메모리와 주고받을 데이터, 명령어가 저장되는 레지스터 이다. ✔ 왜 데이터나 명령어를 메모리에 바로 보내지 않고 메모리 버퍼 레지스터를 거치는 걸까? 메모리는 CPU보다 속도가 느리기..
컴퓨터 구조 : ALU와 제어 장치 📗 ALU ALU가 받아들이는 정보에는 피연산자와 제어신호가 있는데. 레지스터로부터 피연산자를 받고 제어장치로부터 제어신호(수행연산)를 받는다. 연산의 결과 값은 컴퓨터가 이해할 수 있는 0과 1로 표현된 정보로 구성된 문자, 숫자, 혹은 주소이다. 이 결과 값은 레지스터에 저장된다. ✔ 왜 결과값을 레지스터에 저장할까? CPU가 레지스터에 액세스하는 속도가 메모리에 엑세스하는 속도보다 빠르기 때문이다. 레지스터에 결과를 저장하고 메모리에 기록하거나 결과 값을 가지고 다른 레지스터에 저장된 연산을 수행한다. ✔ 플래그는 무엇인가? ALU가 내보내는 또다른 정보로는 플래그가 있는데 플래그란 컴퓨터에서 무언가를 기억하거나 또는 다른 프로그램에게 약속된 신호를 남기기 위한 용도로 프로그램에 사용되는 미리 정의..
컴퓨터 구조 : 소스코드와 명령어 그리고 명령어의 구조 📗 고급 언어와 저급 언어 고급 언어 : 개발자가 읽고 쓰기 편하도록 만든 언어 예) C, C++, JAVA, Python ... 저급 언어 : 컴퓨터가 이해하고 실행하기 위해 만든 언어 (=명령어) 고급 언어가 작성된 소스코드가 컴퓨터 내부에서 실행될 때는 저급언어로 변환된다. ✔ 저급 언어의 종류 - 기계어 : 0과 1로 이루어진 명령어로 구성된 저급 언어 - 어셈블리어 : 기계어를 읽기 편한 형태로 번역한 저급 언어 ✔ 고급 언어의 종류 - 컴파일 언어 - 인터프리터 언어 💻 컴파일 언어 - 컴파일 언어는 소스 코드를 저급 언어로 변환하는 컴파일러를 사용하여 프로그램을 먼저 컴파일 한 뒤 실행한다. - 컴파일러가 소스 코드를 전부 훑어 본 뒤 컴파일을 진행하기 때문에 실행 파일을 생성하며 개발자는 ..
컴퓨터 구조 : 0과 1로 문자를 표현하는 방법 📗 문자 집합 문자 집합 : 컴퓨터가 이해할 수 있는 문자의 모음 인코딩 : 문자를 0과 1로 이루어진 문자코드로 변환하는 과정을 말함 (문자 -> 코드) 디코딩 : 0과 1로 표현된 문자코드를 문자로 변환하는 과정을 말함 (코드 -> 문자) 📗 아스키 코드 아스키 코드 : 초기 문자 집합 중 하나이다. 알파벳, 아라비아 숫자, 일부 특수문자와 제어문자를 나타낸다. 아스키코드는 7비트로 하나의 문자를 표현한다. 8비트 중 1비트는 오류 검출을 위해 사용되는 '패리티 비트' 이다. 7비트로 하나의 문자를 표현하기 때문에 최대 2^7 = 128 개의 문자 표현이 가능하다. ✔ 아스키 코드의 한계 아스키 코드는 인코딩이 간단하지만 한글을 포함해서 다른 언어나 특수문자를 표현할 수 없다. 7비트로 하나의 문자를..
컴퓨터 구조 : 0과 1로 숫자를 표현하는 방법 📗 정보의 단위 비트 : 0과 1을 표현하는 가장 작은 정보 단위 - n 비트는 2^n 가지의 정보를 표현 가능하다. (4비트 = 16가지 정보 표현) - 비트 외에도 키로바이트, 메가바이트, 기가바이트.. 등이 있다 ✔ 이전 단위를 1000개씩 묶는 곳도 있고 1024개씩 묶는곳도 있는데 어떤게 맞는건지? 이전 단위를 1024개씩 묶은 단위는 kiB, MiB, GiB 와 같이 단위가 따로 있기 때문에 1000개의 묶음으로 생각하자. 혹은 그냥 상황에 맞춰서 쓰면 될거같다. 워드 : CPU가 한번에 처리할 수 있는 정보의 크기 단위 - CPU가 한번에 32bit를 처리할 수 있으면 1워드 = 32bit 파생 단위로 하프워드 (워드의 절반크기) , 풀 워드 (워드 크기), 더블 워드(워드의 두배 크기) 가..

반응형