목록Computer/CS (50)
Machineboy空

방법 1)클럭(clock) 속도 컴퓨터 부품들은 '클럭 신호'에 맞춰 일사불란하게 움직인다. CPU는 '명령어 사이클'이라는 정해진 흐름에 맞춰 명령어들을 실행한다. → 빠른 CPU를 위해 클럭신호를 빨리 만들어볼까? → 클럭 신호가 빠르게 반복되면 (= 클럭 속도가 빨라지면 ) CPU를 비롯한 컴퓨터 부품들은 그만큼 빠른 박자에 맞춰 움직이겠지? 꼭 그런 것은 아니지만 일반적으로는 맞다. 그래서 클럭 속도가 CPU 속도로 측정되기도 함. 클럭 속도는 일정한 것이 아니라 필요에 따라 느려졌다 빨라졌다 한다. → 클럭 속도를 무조건 높인다고 좋을까? 필요 이상으로 클럭 높이면 발열이 심각해짐! 방법 2)코어(core) 수를 늘리기 전통적으론 단일한 코어가 즉 CPU였지만 멀티코어가 가능하며 다양한 부품..

CPU는 메모리로부터 명령어나 데이터를 가져와서 실행하기도 하고 필요하면 메모리에 값을 저장하기도 한다. 명령어 사이클 ? CPU가 메모리의 실행 프로그램을 실행하는데 일정한 패턴이 있고, 정해진 패턴 흐름에 따라 명령어를 처리한다. 인터럽트 ? 정해진 흐름을 방해받기도 한다. 정해진 흐름을 끊는 신호. 1) 명령어 사이클 (Instruction cycle) 프로그램 속 명령어들은 일정한 주기가 반복되며 실행되고 이 주기를 명령어 사이클(Instruction cycle)이라고 한다. 인출 사이클 (Fetch Cycle) 메모리에 저장된 명령어를 실행하려면 가장 먼저 CPU로 가져와야 한다. 실행 사이클 (Execution Cycle) 가져 와서 실행 하지만 CPU로 명령어를 가지고 와도 바로 실행이 불가..

CPU 구성품 중 레지스터 시스템, 임베디드, 해킹 분야의 경우 레지스터 안에 어떤 값이 담겼는지 관찰하게 되는 경우가 많다. ALU나 제어장치에 비해 좀 더 중요하게 살펴 볼 필요가 있다! 반드시 알아야 하는 레지스터 종류 * CPU 종류마다 레지스터의 갯수, 종류가 다르다 * 하지만 공통적으로 포함하는 레지스터들. 이름 저장하는 내용과 용도 1 프로그램 카운터 메모리에서 가져올 명령어의 주소 = 메모리에서 읽어들일 명령어의 주소 *타 CPU에서는 명령어 포인터( Instruction Pointer)라고 부르기도 함 2 명령어 레지스터 해석할 명령어 = 방금 메모리에서 읽어 들인 명령어 제어장치가 해석 3 메모리 주소 레지스터 메모리의 주소 CPU가 읽어 들이고자 하는 주소를 주소 버스로 보낼 때 거치..

CPU의 구성품 중 ALU(Arithmetic Logic Unit)와 제어 장치(Control Unit) 1) ALU(Arithmetic Logic Unit) = 계산기 ALU가 받아들이는 정보: 계산을 하기 위해 필요한 정보 피연산자 (from 레지스터) 수행할 연산 (from 제어장치의 제어 신호) ALU가 내보내는 정보: 계산한 결과값 계산한 결과값을 레지스터에 저장한다. *메모리가 아닌 레지스터에 저장하는 이유: CPU가 메모리에 접근하는 속도보다 레지스터에 접근하는 속도가 더 빠르기 때문 플래그값을 플래그 레지스터에 저장한다. *플래그: 연산 결과에 대한 부가 정보 연산결과가 결과를 담을 레지스터에 비해 너무 클 때도 플래그 래지스터에 담는다. *오버플로우(overflow) 2) 제어 장치(Co..

다음과 같은 과정을 거쳐 실행파일이 된다 1 전처리기 (preprocessor) 본격적으로 컴파일 하기 전에 처리할 작업들 외부에서 선언된 다양한 소스 코드, 라이브러리 포함 (c의 #include) 프로그래밍의 편의를 위해 작성된 매크로 변환 (c의 #define) 컴파일할 영역 명시 (c의 #if, #ifdef ...) 2 컴파일러 (compiler) 전처리가 완료되어도 여전히 소스 코드이다. 이것을 컴퓨터가 이해할 수 있는 저급 언어(어셈블리 언어)로 변환하는 것 3 어셈블러 (assembler) 어셈블리어를 (0과 1로 이루어진)기계어로 변환하는 과정. 목적코드(object file)를 포함하는 목적 파일이 된다. *목적 파일과 실행 파일은 둘 다 기계어로 이루어졌지만 다르다! *목적 파일: 링킹..

저급 언어(명령어)는 어떻게 생겼고 어떻게 동작할까? 사람들의 일반적 명령어 컴퓨터의 명령어 명령어의 구조 연산 코드 (operation code) 오퍼랜드(operand) 수행할 연산 수행할 대상 *연산 코드의 종류와 생김새는 CPU마다 다르지만 공통적인 4가지 연산에 사용될 데이터 혹은 연산에 사용될 데이터가 저장된 위치 ( = 주소 필드 ) *훨씬 더 자주 담기는 것은 주소 필드 공통적 연산 코드 종류 *오퍼랜드는 없을 수도 여러 개일 수도 있다. * call: 함수를 호출하는 명령어 * stack: 한 쪽 끝이 막혀있는 저장 공간, 자료 구조 * queue: 양 쪽 끝이 열려있는 저장 공간, 자료 구조 주소 필드 왜 데이터 값이 아닌 저장된 위치를 사용하는 걸까? 명령어 내에서 저장할 수 있는 데..

우리가 작성한 소스 코드가 어떻게 컴퓨터를 동작시키는 명령어로 변환되는지 고급 언어 High-Level Language 저급 언어 (명령어) Low-Level Language 개발자가 읽고 쓰기 편하게 만들어진 언어 (c++, python, java 등) 컴퓨터가 이해하고 실행하기 위해 만들어진 언어 1) 저급 언어의 종류 기계어 (Machine language) 어셈블리어 (Assembly language) 0과 1로 이루어진 명령어 0과 1로 이루어진 기계어를 사람이 읽기 편한 형태로 번역한 저급 언어 어셈블리어는 소스코드에 명시를 하며 직접 사용하기도 한다. 2) 고급 언어의 종류 컴파일 언어 (Compiled Language) 인터프리터 언어 (Interpreted Language) by 컴파..