전체 글

개발은 좋은데 뭘로 개발할까
CS/컴퓨터 구조

[컴퓨터 구조] 10. Single Cycle MIPS - 개요

Microarchitecture 컴퓨터 시스템은 위와 같은 계층으로 구성된다. 지금까지는 MIPS 명령어 체계를 정리하면서 3번째에 있는 Architecture 계층에 대해 고민했었다. 이제는 그보다 한단계 아래로 내려가서 마이크로 아키텍쳐를 보려고한다. 마이크로 아키텍쳐라는 말은 기계어로 된 명령어를 이해하고, 실행할 수 있는 CPU의 내부 하드웨어 구조를 의미한다. MIPS의 ISA를 구현하는 마이크로아키텍쳐는 다양하게 있다. 같은 ISA여도 구현은 얼마든지 바뀔 수 있다. (마치 x86을 구현한 AMD 와 Intel 의 CPU가 다른 것처럼) 대표적인 구현 방법으로 한 사이클에 하나의 명령어를 처리하는 Single Cycle 방식이 있다. 하나의 명령어를 실행하고, 그 명령어의 실행이 끝나면 그 다..

CS/컴퓨터 네트워크

[컴퓨터 네트워크] 12. Application Layer (5) : DNS

DNS Domain Name System 인터넷 상에서 컴퓨터(호스트) 를 식별할 때 IP Address 를 이용한다. (정확히는 포트까지 이용한다.) 현재 가장 널리 쓰이는 체계는 32bit 주소 체계인 IPv4 이다. IP주소는 dotted decimal (점으로 구분한 십진수 4개) 으로서 사용되기 때문에 사람들이 이를 직접 기억하기 힘들다. 그래서 사람들이 기억하기 쉽게 문자열로 된 도메인 네임을 부여하였다. 하지만 실제 컴퓨터가 네트워크 상에서 통신을 하려면 결국 숫자로 된 IP주소를 이용해 통신해야해서, 이 도메인 네임을 아이피 주소로 변환할 필요가 있다. DNS 는 도메인 이름을 IP주소로 변환해주는 서비스를 일컫는다. (경우에 따라 그 반대를 할 수도 있다.) 그래서 결국 DNS는 도메인주..

CS/프로그래밍언어론

[프로그래밍언어론] 6. C언어의 BNF 문법과 파싱 예제

BNF 따라가기 BNF 문법은 나중에 YACC 라는 프로그램에 들어가 Parser 를 만든다. (야크는 파서 제너레이터이다.) 이번 글에서는 BNF 문법을 보고 주어진 C 코드를 파서가 어떻게 파싱하게 될 지 파싱트리를 그리는 과정을 직접해보고자 한다. 이 과정을 수행하려면 우선 lexical analyzer 에 의해 소스코드가 각각의 렉시컬 토큰 조각들로 구분이 되어있어야 한다. 소스코드에서 렉시컬 토큰을 추출하는 과정은 아래의 lex 코드를 참고하자. // 강의록에서 ANSI C grammer, Lex specification.pdf 에 있는 코드입니다. D [0-9] L [a-zA-Z_] H [a-fA-F0-9] E [Ee][+-]?{D}+ FS (f|F|l|L) IS (u|U|l|L)* %{ #i..

CS/컴퓨터 구조

[컴퓨터 구조] 9. 곱셈, 부동 소수점

곱셈 초등학교때 배운 곱셈 방식을 이용하면 이렇게 곱셈을 한다. 컴퓨터에서도 같은 방식으로 곱셈한다. 위에 곱하는 1000 을 곱해지는 수 ( = 피승수, multiplicand ) 라고 하고 아래에 곱하는 1001을 곱하는 수 ( = 승수, multiplier ) 라고 한다. 곱셈은 그 특성상, n bit 수와 m bit 수를 곱했을 때, 최대 n + m bit 수가 나올 수 있다. MIPS 의 경우, 32bit 수와 32bit 수를 곱해 최대 64 bit 수가 결과로 나올 수 있다. 이 수는 레지스터 하나에 저장할 수 없기 때문에 2개 레지스터를 사용하여 저장한다. 그래서 곱셈과 관련된 명령어는 위와 같이 사용한다. mult 는 r, s 레지스터의 값을 곱한다. 결과는 hi, low 라는 별도 공간에..

CS/프로그래밍언어론

[프로그래밍언어론] 5. Lexical and Syntax Analysis

만약 우리가 컴파일러를 만든다면, 첫번째로 할 일은 문자열 덩어리인 소스코드를 분석해서 렉심을 추출하는 (렉시컬 토큰을 추출) lexical analysis 과정을 먼저 거쳐야 한다. 다음으론 추출한 렉시컬 토큰들을 기반으로 문법이 올바른지 검사하는 syntax analysis 를 해야한다. 이때 문법을 표현하는 기법의 하나로 BNF를 사용했다. 이를 다시말하면, syntax analysis 를 할 때는 lexical analyzer 를 이용해 렉시컬 토큰을 추출하는 과정을 먼저 거쳐야 한다. 이 과정을 low-level part 라고도 한다. 이 과정을 수행할 땐 정규 표현식을 이용하거나, 제대로 하려면 오토마타 개념을 이용하여 추출해야 한다. 다음으론 high-level part 인 syntax an..

CS/HCI 윈도우즈프로그래밍

[OpenGL] 13. Transformation (1) - 변환의 기본 개념

Trnasformation 객체의 위치를 옮기거나 모습을 변형하는 것 (이동, 회전, 크기 변경) 변환을 할 때는 행렬을 사용하는 것이 효율적이다. OpenGL 에서 사용할 때는 Shader 의 input vertex 를 변환하는 것으로 적용한다. 다음이 OpenGL 에서 사용하는 변환의 큰 과정이다. 대문자 V 는 vertex 정점을 의미하고, M 은 matrix 행렬을 의미한다. V clip 이라는 정점을 얻기 위해 V local 이라는 정점에 model 행렬, view 행렬, projection 행렬 순으로 변환을 적용한다는 의미이다. 이를 OpenGL 방식 코드로 보면 이렇게 된다. 입력 정점으로 V local 이 들어오면, 여기에 model 행렬을 곱해 변환하고, view 행렬을 곱해 변환하고,..

CS/컴퓨터 구조

[컴퓨터 구조] 8. Computer Performance

컴퓨터 성능의 측정 지표1. Response Time ( Execution time, Latency)특정한 작업을 시작해서 끝낼 때까지 걸린 시간을 측정한다.개개인의 유저가 중요하게 생각하는 지표이며, 임베디드 컴퓨터와 개인용 컴퓨터는 response time 을 중요하게 생각한다. 2. Throughput정해진 시간동안 처리하는 일의 양을 측정한다.데이터센터나 슈퍼컴퓨터 관리자들이 중요하게 생각하며, '서버' 는 스루풋을 중요하게 여긴다. 컴퓨터 머신의 종류와 사용처에 따라 중요하게 생각하는 지표가 다르다.(쓰루풋을 단순히 response time 의 역수로 생각할 수는 없다.) Example한번 다음과 같은 과정을 거쳐 빨래를 한다고 해보자.세탁기는 30분, 건조기는 40분, 빨래를 개는데 20분이 ..

CS/컴퓨터 구조

[컴퓨터 구조] 7. MIPS 명령어 총 정리

산술 명령어 (Arithemtic Instructions) R - Format add, sub add rd, rs, rt => rd = rs + rt sub rd, rs, rt => rd = rs - rt mult $r, $s => r * s, 곱셈의 경우, 연산 결과는 따로 어딘가에 저장됨 mfhi $d => set hi to $d 연산 결과의 상위 32bit를 $d 레지스터에 이동 mflo $d => set lo to $d 연산 결과의 하위 32bit를 $d 레지스터에 이동 div I - Format addi / addiu addi rt, rs, imm => rt = rs + imm (rd 가 없으니 rt 를 대신 목적지로 사용한다. addiu 는imm 값을 zero extend 한다.) 논리 명령어..

CS/컴퓨터 네트워크

[컴퓨터 네트워크] 11. Application Layer (4) : HTTP/2

HTTP/2 지난 글에서 HTTP/1 과 HTTP/1.1 에 대해서 정리했었다. 간단히 말해서 HTTP/1 은 base HTML 에 대해서도 TCP Connection을 만들고, 이 HTML 을 구성하는데 필요한 referenced object 들에 대해서도 매번 TCP connection 을 만들어서 데이터를 가져오는 방식이었다. 각 오브젝트 하나를 가져오는데 2RTT 의 시간이 필요했다. HTTP/1.1 은 이를 약간 개선해서, 한번 TCP Connection 을 만들면 이 연결로 base HTML 과 referenced object 까지 한번에 가져와서 오브젝트를 가져오는 시간을 거의 반으로 줄이는 개선된 프로토콜이었다. HTTP/2 는 여기에서 한 단계 더 발전한 프로토콜이다. HTTP/2 의 목..

CS/컴퓨터 네트워크

[컴퓨터 네트워크] 10. Application Layer (3) : Web Cache

Web Cache (web proxy / proxy server) 웹 브라우저의 역할은 웹 서버로부터 웹 오브젝을 가져오는 것이다. 그런데 만약 서버가 클라이언트로부터 멀리 떨어져 있거나, 대역폭이 넓지 않아서 오브젝을 가져오는데 시간이 오래 걸린다면, 서버까지 가지 않고도 데이터를 얻어올 수 있는 웹 캐시 기법을 사용할 수 있다. 웹 캐시 기법은 클라이언트가 자주 요청할 법한 오브젝을 클라이언트 가까이에 두는 기법이다. 그래서 만약 사용자가 로컬 웹 캐시에 먼저 접근하도록 설정하면, 오브젝을 가져올 때 서버에 바로 요청을 보내는 것이 아니라, 웹 캐시에 데이터를 요청해서 받아온다. 만약 웹 캐시에 오브젝이 없다면 그때 서버에 오브젝을 요청해서 오브젝을 가져온 뒤, 캐시가 그 오브젝의 카피를 따로 저장해..

에버듀
Blog. 에버듀