1. 레지스터란? CPU 내부에 위치한 일시적인 메모리 공간이다. 외부 저장소도 있는데 굳이 CPU 내부에 왜 필요할까? CPU가 명령을 수행할 때 외부 저장소까지 접근하려면 시스템 버스와 접속하기 위해 너무 오랜 시간이 걸리기 때문에, 빠른 접근을 위해 CPU 내에 레지스터라는 기억장치를 사용한다. 하지만, CPU는 작기 때문에 내부에 포함할 수 있는 레지스터들의 수가 제한될 수 밖에 없다. 2. CPU의 내부 레지스터의 종류 PC (Program Counter) 다음에 인출할 명령어의 주소를 가지고 있는 레지스터 명령어 인출 후에는 자동으로 주소를 증가시킴 분기 명령어가 실행되면 목적지 주소로 갱신 AC (Accumulator) 데이터를 일시적으로 저장하는 레지스터 CPU가 한 번에 처리할 수 있는 ..
스택이란? 영어 Stack의 의미인 쌓다의 말 그대로 데이터를 밑에서부터 위로 차곡 차곡 쌓아 올리는 자료구조를 뜻합니다. 쉽게 설명하자면, 한번에 블럭 한 개만 넣을 수 있는 기다란 통이 있다고 가정해봅시다. 그러면 블럭을 추가 할 수록 제일 먼저 넣은 블록은 가장 바닥 쪽에 위치하게 되겠죠? 또한 블럭을 꺼내고 싶다면 가장 위에 있는 블럭부터 꺼낼 수 있겠죠? 그래서 스택의 가장 큰 특징은 가장 나중에 넣은 데이터를 가장 먼저 꺼낼 수 있다는 의미의 '후입선출(LIFO)' 입니다. 스택을 관리하기 위해 필요한 연산 그럼 이러한 자료구조를 구성한다면 어떤 연산이 필요할까요? 자료를 넣는 연산인 push()와 자료를 꺼내는 연산인 pop() 가장 최근 자료를 엿보는 peek() 등의 연산이 필요하게 됩니..
리버싱(리버스 엔지니어링)이란? 완성된 제품을 해체하고 분석하여 구조와 기능, 디자인을 파악하는 행위입니다. 대부분의 공학 분야에는 리버싱이 있습니다. 필자가 배우게 될 리버싱은 컴퓨터 공학의 SW 리버싱입니다. 리버싱이 사용되는 이유 좋은 예시👍 나쁜 예시👎 - 오랫동안 개발 중단된 프로그램을 패치해야 할 때 - 각종 프로그램의 보안성을 평가할 때 - 악성코드를 분석할 때 - 상용 프로그램 무료로 이용하기 위해 불법 프로그램을 만들 때 - 게임의 핵을 만들 때 하지만 리버싱을 하면서 프로그램의 전체적인 작동 원리를 알아낼 수 있으므로, 상용 프로그램의 지적 재산권을 침해할 수 있습니다. 따라서 리버싱은 저작권을 침해하지 않는 선에서 제한적으로 허용됩니다. Binary 자연어 -- 어셈블리어 --어셈블러..
1. 문제 요약 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. (단, n은 11보다 작은 양의 정수) 2. 문제 풀이 처음에는 재귀적으로 풀려고 했는데 점화식으로 정리가 되길래 아주 간단하게 반복문을 사용해서 N[10]까지 구해주었다 #define _CRT_SECURE_NO_WARNINGS #include int main(void) { int n, x; int N[11] = { 0 }; scanf("%d", &n); // 입력 값의 수 N[1] = 1; N[2]..
1. CPU의 기능 명령어 인출 명령어 해독 >> 모든 명령어들에 대하여 공통적으로 수행 데이터 인출 데이터 처리 데이터 쓰기 >> 명령어에 따라 필요한 경우에만 수행 2. CPU의 기본 구조 산술논리연산장치(ALU): +-*/, AND, OR, NOT, XOR 등 레지스터(Register): 액세스 속도가 가장 빠른 기억장치, 개수 제한 있음 (16개정도) 제어 유니트: 명령어를 해석하고, 그에 따른 제어신호들을 순차적으로 발생시킴 CPU 내부 버스(CPU internal bus): 데이터 선(ALU-레지스터), 제어 신호 선(제어 유니트)로 구성 ** 외부의 시스템 버스들과는 반드시 버퍼레지스터들 혹은 시스템 버스 인터페이스 회로를 통하여 접속 3. 명령어 실행 명령어 사이클은 두 개의 부 사이클들로..
1. 문제 요약 정수 X에 적용할 수 있는 연산은 세가지 인데 1. 3의 배수이면 3으로 나누기 2. 2의 배수이면 2로 나누기 3. 1을 빼기 X를 1로 만들 수 있는 최소한의 연산 횟수를 구하는 것이 목표 2. 첫번째 풀이 처음부터 최소 값을 구할 수 있는 방법이 없을까 부터 생각해봤다 어떻게 10을 입력했는데 2를 먼저 나누지 않고 1을 먼저 뺐을까? 그래서 X-1의 값이 3의 배수라면 빼고 3으로 나누는 것이 그냥 2를 나눴을 때 보다 연산횟수가 더 작아진다는 것을 알게 되었다 그래서 반복문 안에서 조건문을 사용해서 3의 배수인지 판단하기 - 1을 뺐을 때 3의 배수가 되는지 판단하기 - 2의 배수인지 판단하기 의 순서로 X를 판단하게 했고 그 마저도 안된다면 1을 빼도록 했다 #define _C..
Java의 자료형만약의 자료형이 참조형일 경우에는," == " 는 주소를 비교(동등비교)하는 것이고.equals() 는 값을 비교하는 것이다 그렇다면 이러한 상황에서String s = scan.next(); // 'A' 입력String t = scan.next(); // 'A' 입력String v = t;System.out.println(s == t); // 1번System.out.println(s.equals(t)); // 2번System.out.println(t == v); // 3번System.out.println(t.equals(v)); // 4번이 코드들의 출력 값은 어떨까?1번 라인과 3번 라인은 동등 비교이고,2번 라인과 4번 라인은 값을 비교하는 것이기 때문..
OSI Reference Model 네트워크에 연결된 다수의 호스트들이 서로 통신하기 위해서 국제 표준화 단체 ISO(International Standard Organization)에서 OSI를 정의해 놓았다 7개의 층으로 이루어져 있고, 네트워크의 확장을 용이하게 하는 것이 목적이다 보통 OSI 7 계층 이라고 불린다 Application, Presentation, Session 층은 소프트 웨어, Network, Data Link, Physical 층은 하드웨어와 관련있다 (여기서 Presentation, Session 계층은 현재 표준 계층형태로 구현되어있지 않음) 각 계층에서는 프로토콜이 정의되어 있는데, 여기서 프로토콜이란 ? 둘 이상의 통신 개체 사이에 교환되는 메시지 포맷과메시지의 송수신과..