[혼자 공부하는 컴퓨터구조 + 운영체제] - 명령어 집합 구조, CICS & RISC
·
CS
명령어 집합 : CPU가 이해할 수 있는 명령어들의 모음, CPU의 언어인 셈 명령어의 세세한 생김새, 연산, 주소 지정 방식 등은 CPU마다 다르다 (인텔 CPU 컴퓨터에서 만든 실행 파일을 그대로 아이폰에 옮겨 특별한 설정 없이 바로 실행하면 실행이 안된다. 이해할 수 있는 명령어가 아니기 때문. ) 명령어가 달라지면 그에 대한 나비효과로 많은 것들이 달라진다. (명령어 해석 방식, 레지스터의 종류와 개수, 파이프라이닝의 용이성 등등 ) 명령어 집합의 두 축 : CISC & RISC CISC(Complex Instruction Set Computer) 복잡한 명령어 집합을 활용하는 컴퓨터 - x86, x86-64는 CISC 기반 명령어 집합 구조 - 명령어의 형태와 크기가 다양한 가변 길이 명령어를 ..
[혼자 공부하는 컴퓨터구조 + 운영체제] - 명령어 병렬 처리 기법
·
CS
지난 시간엔 멀티코어와 멀티스레드를 배웠음 씨피유를 빠르게 처리할 수 있도록 설계하는 것도 중요하지만 시간을 알뜰하게 쓰면서 명령어들을 처리하는 방법도 중요함 이번 글에서는 이와 관련하여 명령어 병렬 처리 기법을 알아볼 것 명령어 파이프라인 명령어가 처리되는 과정을 비슷한 시간 간격으로 나누면? 1. 명령어 인출 (Instruction Fetch) 2. 명령어 해석 (Instruction Decode) 3. 명령어 실행 (Execute Instruction) 4. 결과 저장 (Write Back) 여기서 같은 단계가 겹치지만 않는다면 CPU는 '각 단계를 동시에 실행할 수 있다' 4개의 명령어를 동시에 실행하는 중.. 명령어 파이프라이닝은 동시에 여러 개의 명령어를 겹쳐 실행하는 기법 파이프라인 위험: ..
[혼자 공부하는 컴퓨터구조 + 운영체제] - 빠른 CPU를 위한 설계 기법
·
CS
오늘 배울 것 - 클럭 - 코어 & 멀티 코어 - 스레드 & 멀티 스레드 CPU의 속도를 빠르게 만들어보자 1. 컴퓨터 부품들은 '클럭 신호'에 맞춰 일사불란하게 움직인다 2. CPU는 '명령어 사이클' 이라는 정해진 흐름에 맞춰 명령어들을 실행한다 그럼 클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 그만큼 빠르게 움직일까? -> 예스. 꼭 그렇지만은 않지만 일반적으로 그럼 클럭 속도 - 클럭 속도는 헤르츠라는 단위로 측정됨 - 헤르츠(Hz): 1초에 클럭이 반복되는 횟수 - 클럭이 똑-딱 하고 1초에 한 번 반복되면 1Hz - 클럭이 1초에 100번 반복되면 100Hz - 그럼 클럭속도만 올리면 씨피유 빨라지겠네요? .. 꼭 그런건 아님.. 필요 이상으로 클럭을 높이면 발열이 심각해짐 -..
[혼자 공부하는 컴퓨터구조 + 운영체제] - 명령어 사이클과 인터럽트
·
CS
명령어 사이클 프로그램 속 명령어들은 일정한 주기가 반복되며 실행 이 주기를 명령어 사이클이라고 함 인출 사이클 : 가장 먼저 CPU로 갖고 와야 한다 실행 사이클 : 갖고 왔으면 실행해야 한다 일반적으로 CPU는 인출-실행-인출-실행-....... 과정이 반복됨 그런데 CPU로 명령어를 가지고 와도 바로 실행이 불가능한 경우도 있다 (추가적으로 메모리에 접근해야 하는 방식도 있다) 여기서 인터럽트라는 개념이 생김 인터럽트는 정해진 흐름대로 실행되는 것을 끊어버리는 것임 .. 인터럽트(interrupt) : 방해하다, 중단시키다 'CPU가 꼭 주목해야 할 때', 'CPU가 얼른 처리해야 할 다른 작업이 생겼을 때' 발생 동기 인터럽트 (예외) : CPU가 예기치 못한 상황을 접했을 때 발생 종류 : 폴트..
[혼자 공부하는 컴퓨터구조 + 운영체제] - 레지스터
·
CS
레지스터는 CPU 내부의 작은 임시저장장치 프로그램 속 명령어와 데이터는 실행 전후로 레지스터에 저장된다 CPU 내부에는 다양한 레지스터들이 있고, 각기 다른 역할을 가진다 반드시 알아야 할 레지스터 1. 프로그램 카운터 : 메모리에서 가져올 명령어의 주소 (메모리에서 읽어 들일 명령어의 주소) 2. 명령어 레지스터 : 해석할 명령어 (방금 메모리에서 읽어 들인 명령어) _ 제어장치가 해석 3. 메모리 주소 레지스터 : 메모리의 주소 _ CPU가 읽어 들이고자 하는 주소를 주소 버스로 보낼 때 거치는 레지스터 4. 메모리 버퍼 레지스터 : 메모리와 주고 받을 값, 즉 데이터와 명령어를 저장함 5. 플래그 레지스터 : 연산 결과 또는 CPU 상태에 대한 부가적인 정보 6. 범용 레지스터 : 다양하고 일반적..
[혼자 공부하는 컴퓨터구조 + 운영체제] - ALU와 제어 장치
·
CS
ALU는 계산하는 장치 제어장치는 제어 신호를 발생시키고 명령어를 해석하는 장치 ALU가 내보내는 정보 to Register from ALU ALU는 레지스터로부터 피연산자를 받아들이고 제어장치로부터 제어 신호를 받아들입니다. 그 결과값을 레지스터에 담는다. 레지스터에 저장하는 이유? 씨피유가 레지스터에 접근하는 속도가 메모리에 접근하는 속도보다 빠르기 때문에 임시적으로 레지스터에 담는 것. to Flag Register from ALU 플래그는 연산 결과에 대한 부가 정보. ALU에서 내보내는 플래그를 플래그레지스터에 담음 위와 같은 플래그들이 플래그 레지스터에 저장되는 것 클럭 : 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위 제어장치에서는 해석할 명령어를 받아 들이는데 명령어 ..
[혼자 공부하는 컴퓨터구조 + 운영체제] - 명령어의 구조
·
CS
명령어의 구조는 무엇을 대상으로, 무엇을 수행하라 라는 구조로 되어 있음 연산코드 : 수행할 연산 오퍼랜드 : 연산에 사용될 데이터 혹은 연산에 사용될 데이터가 저장된 위치 오퍼랜드가 저장되는 공간인 오퍼랜드필드를 주소필드 라고 부르기도 한다 연산코드 (연산 코드의 종류와 생김새는 CPU마다 다름 / 아래는 공통적인 연산코드 종류임 ) 1. 데이터 전송 2. 산술/논리 연산 3. 제어 흐름 변경 4. 입출력 제어 왜 굳이 메모리의 특정 위치에 명령어의 주소를 저장할까? 주소 명령어에서 표현할 수 있는 데이터 크기가 제한되어 있기 때문 ! 명령어 주소 지정 방식 유효 주소 연산에 사용할 데이터가 저장된 위치 명령어 주소 지정 방식 연산에 사용할 데이터가 저장된 위치를 찾는 방법 유효 주소를 찾는 방법 다양..
[혼자 공부하는 컴퓨터구조 + 운영체제] - 소스 코드와 명령어
·
CS
03-1 소스 코드와 명령어 고급언어와 저급언어 고급언어 : 개발자가 읽고 쓰기 편하게 만들어진 언어 저급언어 : 컴퓨터가 이해하고 실행하기 위해 만들어진 언어 저급언어에는 기계어와 어셈블리어가 있다 어셈블리어는 기계어를 읽기 편한 형태로 번역한 것 어셈블리어는 기계어와 다르게 소스코드에 직접적으로 명시하면서 개발하기도 함. (어셈블리어를 알면 좋은 개발직군도 있다) 고급언어는 파이썬 자바 등 우리 프로그래머들이 프로그램을 개발할 때 사용하는 언어 고급언어가 저급언어로 전환될 때 사용되는 방식에는 컴파일 방식과 인터프리터 방식이 있다 컴파일 언어 고급언어로 작성된 소소코드를 컴파일러라는 특수한 프로그램에 의해서 컴파일이 됨. 그러면 0과 1로 이뤄진 저급언어로 변환되는데 그걸 목적코드라고 함 정리하면 컴..
[혼자 공부하는 컴퓨터구조 + 운영체제] - 0과 1로 숫자를 표현하는 방법
·
CS
컴퓨터는 0과 1 밖에 이해하지 못한다 0과 1 밖에 모르는 컴퓨터가 1보다 큰 수를 이해할 수 있을까? 비트(bit) 0과 1을 표현하는 가장 작은 정보 단위 컴퓨터가 이해하는 정보 단위 n비트로 2n가지의 정보 표현 가능 프로그램은 수많은 비트로 이루어져 있음 다만 평소 "이 파일은 3900 비트야" 라고 표현하진 않음 그래서 비트보다 더 큰 다위를 사용 바이트, 킬로바이트, 메가바이트, 기가바이트. 테라바이트 등등 정보단위 워드(word) CPU가 한 번에 처리할 수 있는 정보의 크기 단위 하프 워드 : 워드의 절반 크기 풀 워드 : 워드 크기 더블 워드 : 워드의 두 배 크기 이진법: 0과 1로 숫자 표현하기 이진법(binary) 0과 1로 수를 표현하는 방법 숫자가 1을 넘어가는 시점에 자리올림..
[혼자 공부하는 컴퓨터구조 + 운영체제] - 컴퓨터 구조 시작하기1
·
CS
학습영상 ↓ https://www.youtube.com/watch?v=kFWP6sFKyp0&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC [ 컴퓨터 구조 시작하기 ] 좋은 개발자가 되기 위해서는 프로그래밍 언어의 문법과 함께 컴퓨터의 근간을 알아야 한다 1. 컴퓨터 구조를 알아야 하는 이유 1. 문제해결능력을 기를 수 있고 2. 성능, 용량, 비용을 고려한 개발을 할 수 있다 컴퓨터 구조를 알면 문법에 맞는 소스 코드를 컴퓨터에 입력만 하는 개발자에서 컴퓨터를 내려다보며 문제를 해결할 수 있는 개발자가 될 수 있다 2. 컴퓨터 구조의 큰 그림 컴퓨터가 이해하는 정보 - 데이터 , 명령어 컴퓨터의 네 가지 핵심 부품 켬퓨터가 이해하는 두 가지 정보 1. 데이터 숫자, 문자와 같이 ..