주기억장치의 종류에는 RAM과 ROM이 있고 메모리라는 용어는 자주 쓰는 RAM을 지칭하는 경우가 많음 RAM 실행할 프로그램의 명령어와 데이터가 저장되는 곳 휘발성 저장 장치 volatile memory ( 전원을 끄면 저장된 내용이 사라짐) (+ 전원을 꺼도 내용이 유지할 수 있는 것 -> 비휘발성 저장 장치 non volatile memory 하드 디스크, SSD, CD-ROM, USB메모리 등과 같은 보조 기억 장치가 대표적인 비휘발성 저장 장치) RAM 용량과 성능 CPU에서 실행하고 싶은 프로그램이 보조기억장치에 있고 RAM의 용량이 작다면 보조장치에서 실행할 프로그램을 가져오는 일이 잦아져 실행 시간이 길어짐 프로그램을 실행하기 위해서는 먼저 RAM에 데이터와 명령어가 올라와야함 RAM의 용..
파이프라이닝 하기 쉬운 명령어를 써야 CPU 성능이 좋아지는데 파이프라이닝 하기 쉬운 명령어란 무엇일까요? 명령어 집합 명령어는 연산 코드와 오퍼랜드로 이루어져 있는데 이 세상 모든 CPU들이 똑같은 명령어를 실행할까요? 그렇지 않음! 명령어의 세세한 생김새, 명령어로 할 수 있는 연산, 주소 지정 방식 등이 조금씩 차이 남 명령어 집합(명령어 집합 구조 ISA): CPU가 이해할 수 있는 명령어들의 모음 intel은 x86, x86-64 ISA를 이해할 수 있고, apple은 ARM ISA를 이해할 수 있음 그렇기에 intel에서 만든 실행 파일을 apple에서 하려면 실행이 안됨 ISA사 달라지면 CPU가 이해하는 명령어, 어셈블리어도 달라짐 CISC Complex Instruction Set Com..
빠른 CPU를 만들기 위해 높은 클럭 속도에 멀티코어, 멀티스레드를 지원하는 CPU를 만드는 것도 중요하지만 CPU가 놀지 않고 작동하게 만드는 것도 중요함 명령어 병렬 처리 기법 명령어를 동시에 처리하여 CPU를 한시도 쉬지 않고 작동시키는 기법 명령어 파이프, 라이닝, 슈퍼스칼라, 바순차적 명령어 처리가 있음 명령어 파이프 라인 공장 생산 라인과 같이 명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법 이를 이해하기 위해서는 하나의 명령어가 처리되는 전체 과정을 비슷한 시간 간격으로 나누어 보아야 함 명령어 인출 명령어 해석 명령어 실행 결과 저장 위의 단계가 정답은 아님 명령어 인출 -> 명령어 실행, 명령어 인출 -> 명령어 해석 -> 명령어 실행 -> 메모리 접근 -> 결과 저장 등으로 쓰..
https://school.programmers.co.kr/learn/courses/30/lessons/76502 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 s[1:] + s[:1]를 이용하여 문자열을 화전시키고 len(stack) = 0, '[' '{' '(' 상황에는 append ']'. '}', ')' 상황에는 stack[-1] 과 비교하여 쌍이 맞다면 stack.pop() 하여 없앰 나머지 상황은 괄호쌍이 맞지 않는 상황이니 break로 for문을 멈춤 def solution(s): ans = 0 for i in range(len(s..
클럭, 멀티코어, 멀티스레드라는 용어는 컴퓨터 구매, 프로그램 개발 시에 많이 들어본 단어이다 클럭 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위 학습했던 내용 컴퓨터 부품들은 클럭 신호에 맞춰 일사불란하게 움직임 CPU는 명령어 사이클이라는 흐름에 맞춰 명령어를 실행함 클럭 신호가 빠르다면 컴퓨터 부품은 그만큼 빠은 박자에 맞춰 움직임 클럭 속도가 높은 CPU가 성능이 좋은 CPU라고 볼 수 있음 클럭 속도 단위로 헤르츠(Hz)를 사용함 1초에 클럭이 한 번 반복되면 1Hz, 100번 반복되면 100Hz이다. intel i9 기준 평균 4.0GHz (1 GHz = 1,000,000,000Hz \(10^{9} \)) 평균이라는 단어를 사용한 이유는 클럭속도는 유지되는 것이 아니라 상황..
CPU가 하나의 명령어를 처리하는 과정에는 정해진 흐름이 있고 그 흐름을 반복하며 명령어들을 처리해 나감 하나의 명령어를 처리하는 정형화된 흐름을 명령어 사이클이라고 함 CPU는 정해진 흐름에 따라 명령어를 처리하지만, 간혹 흐름이 끊어질 때가 있음. 이를 인터럽트라고 함 명령어 사이클 프로그램 속 각각의 명령어들은 일정한 주기가 반복되며 실행되는데 이 주기를 명령어 사이클이라고 함 인출 사이클 메모리에 있는 명령어를 CPU로 가져오는 단계 실행 사이클 가져온 명령어를 실행하는 단계 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생시키는 단계 프로그램을 이루는 수많은 명령어는 일반적으로 인출과 실행 사이클을 반복하며 실행됨 간접 사이클은 간접 주소 지정 방식과 같이 명령어를 실행하기 위..
레지스터 프로그램 속 명령어와 데이터는 실행 전후로 반드시 레지스터에 저장됨 레지스터 속 값을 유심히 관찰하면 프로그램을 실행할 때 CPU내에 무슨 일이 벌어지고 있는지, 어떤 명령어가 어떻게 수행되는지 알 수 있음 반드시 알아야 할 레지스터 레지스터들은 저마다의 역할이 있고, 그에 걸맞는 내용을 저장함 프로그램 카운터 명령어 레지스터 메모리 주소 레지스터 메모리 버퍼 레지스터 플래그 레지스터 범용 레지스터 스택 포인터 베이스 레지스터 프로그램 카운터 Program Counter 메모리에서 가져올 명령어의 주소, 즉 메모리에서 읽어 들일 명령어의 주소를 저장함 명령어 포인터라고 부르는 CPU도 있음 명령어 레지스터 Instruction Register 메모리에서 읽어 들인 명령어를 저장하는 레지스터 제어..
CPU 메모리에 저장된 명령어를 읽어 들이고, 해석하고, 실행하는 장치 ALU, 제어장치, 레지스터로 구성됨 ALU CPU 내부에서 계산을 담당함 연산한 결괏값과 플래그를 내보냄 받아들이는 정보 피연산자와 수행할 연산 레지스터를 통해 피연산자를 받아들임 제어장치를 통해 제어 신호를 받아들임 내보내는 정보 연산 수행 결과는 특정 숫자, 문자, 메모리 주소 등이 될 수 있음 위의 결괏값은 바로 메모리에 저장하지 않고 일시적으로 레지스터에 저장함 CPU에서 메모리에 접근하는 것이 레지스터에 접근하는 것보다 훨씬 느리기 때문 플래그 (flag) 때때로 결괏값뿐만 아니라 연산 결과에 대한 추가적인 정보는 내보내야 할 때가 있음 ex) 음수와 양수를 구분하기 위해 플래그를 사용한다. ex) 연산 결과가 레지스터보다..