이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제)를 수행하는 글입니다. 해외에서는 nand2tetris라는 이름의 프로젝트로 알려져 있습니다! 동일한 내용으로 구성되어 있으니, nand2tetris를 공부할 때 참고바랍니다 프로젝트 수행을 위한 언어로 C#을 사용하였습니다. Chapter 6의 프로젝트에 대한 글 보러가기 The Elements of Computing System - Ch.6 PJ (1) Ch. 6 Project - 1 이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제..
6장-12장은 컴퓨터의 SW적 측면에 초점을 맞춘다. 컴파일러, 간단한 객체 프로그래밍 언어, 기본적인 운영체제를 만들어보자. 여기에서 가장 기본이 되는것이 어셈블러 _assembler이다. 어셈블리어로 작성한 프로그램을 어셈블러를 이용해 2진 코드로 번역하는 과정을 배우고, Hack 어셈블러를 만들자. 기호로 된 어셈블리 명령 (ADD, JUMP)과 2진코드는 1대1 대응이므로 어셈블러 작성은 어렵지 않다. 기호를 이용해 메모리를 참조하도록 기능을 추가하는 것이 까다롭다. 기호테이블 _symbol table을 통해 사용자 정의 기호를 물리적 주소에 연결하고 관리한다. Hack의 어셈블러를 구현해보면서 다른 어셈블러를 만들 때 사용되는 핵심 소프트웨어 공학의 원리를 맛볼 수 있다. 배경 기계어는 기호형 ..
이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제)를 수행하는 글입니다. 해외에서는 nand2tetris라는 이름의 프로젝트로 알려져 있습니다! 동일한 내용으로 구성되어 있으니, nand2tetris를 공부할 때 참고바랍니다. Chapter 5의 Project에 대한 글 보러가기 HW에 대한 내용을 소개한다. 앞서 배운 개념들과 함께 Hack 컴퓨터의 플랫폼을 구현해보자. ( 최적화따위는 개에게 던져주자. 작동방식에 대한 공부니깐 부담없이!) 배경 내장식 프로그램 Stored Program 컴퓨터의 유연성 (다양한 프로그램의 구동)은 내장식 프로그램 덕분에 가능하다. 프로그램은 HW에 내장되지 ..
이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제) 를 수행하는 글입니다. 해외에서는 Nand2Tetris라는 이름의 프로젝트로 잘 알려져 있습니다. 내용은 동일하니, 공부할 때 참고하세요! Chapter 4 Project에 대한 글 보러가기 기계어 프로그램을 살펴보면 HW가 왜 그렇게 설계되었는지 알 수 있다. 기계어는 프로세서에서 산술/논리 연산을 하고, 메모리에서 값을 Save/Load하고, 레지스터끼리 데이터를 교환하고, 조건 검사를 하는 등의 여러가지 작업을 수행할 수 있다. 이는 HW에게 직접 명령을 내리는 것이므로, 기계어 역시 HW플랫폼의 구성요소라고 볼 수 있다. 배경 기계어 M..
이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제) 를 수행하는 글입니다. 과제 수행을 위한 언어로 C#을 선택했지만, Java와 거의 유사하여 Java를 알면 쉽게 이해할만한 코드들이예요. 해외에서는 Nand2Tetris라는 이름으로 더 잘 알려져있는 프로젝트입니다. 내용은 동일하니 참고해주세요! Chapter 3 Project에 대한 글 보러가기 그림을 아이패드가 아니라 갤럭시노트로 그려서 넣는게 쉽지가 않네요!! ㅋㅋㅋㅋ 엉성하게 보이는 그림들 ㅠㅠ 얼른 필기노트를 스캔해서 올리고싶슴당! 앞 장에서 공부한 칩들은 입력값의 조합에 의존하는 조합 칩 (Combinational Chip)이다. ..
이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제) 를 수행하는 글입니다. 해외에서는 Nand2Tetris라는 이름으로 잘 알려져있는 프로젝트입니다. 내용은 동일하니 참고해주세요! Chapter 2의 Project 글 보러가기 목표는 ALU 완성하기 - CPU에 대한 이해 2진코드 불연산으로 더하기 → 가산기 칩에 대한 이해 (Adder) → 구현해보기 배경 2진수 컴퓨터는 수를 2진수로 다룬다. 19라는 수를 나타내고자 하면 10011(2진수) = 2^4×1 + 2^3×0 + 2^2×0 + 2^1×1 + 2^0×1 으로 나타날 것이다. 더 정확히, 64비트 컴퓨터의 레지스터에는 00000000..
이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제) 를 수행하는 글입니다. 해외에서는 nand2tetris라는 이름의 프로젝트로 알려져 있습니다! 동일한 내용으로 구성되어 있으니, nand2tetris를 공부할 때 참고바랍니다. Chapter 1의 프로젝트 보러가기 현재 군대내에 있어서 촬영이나 스캔이 힘든 관계로 ㅜㅜ 회로설계나 그림은 추후 업로드 하겠씀당. 앞쪽이 유난히 게이트가 많아서 그림이 많이 필요하네용 Boolean Logic 아래의 순서로 공부하면서 불 논리에 대해 알아보자. Bool 대수 → Bool 함수 → Bool 게이트 → 칩과 게이트 → 실제 HW 설계 배경 불 대수 - B..
공군 특기학교에서 시간을 보내면서 공부나 하려고 책을 고르려 시내 서점에 갔습니당. 재미있어보이면서 코드를 짜지 않아도 공부할 수 있는 컴퓨터 책을 찾다가 아래 책을 발견할 수 있었습니다. 「The Elements of Computing systems - 밑바닥부터 만드는 컴퓨팅 시스템」 고려대학교에서 컴퓨터 시스템 설계 과목을 들으면서 공부를 해보니 컴퓨터가 어떻게 돌아가는지를 알 수 있어서 되게 재미있고 저랑 잘 맞더라고요. 그래서 한번 더 공부해보려고 이 책을 골랐습니다. 실제로 읽어보니까 되게 프로젝트도 재미있게 구성되어있어요. 불 논리에서 게이트를 배우고, ALU랑 CPU를 디자인해보고, 어셈블리어를 기계어로 바꾸기, VM언어를 어셈블리어로 바꾸기, 객체지향 언어를 VM언어로 바꾸기, 운영체제 ..
TLB Virtual Memory의 작동이 내 생각에는 Cache Memory의 작동방식과 거의 일치하는 것 같다. ( Direct Mapped 방식, N-way SA 방식 ) 이 방식들을 이용하기 위해서는 Page Table을 먼저 작성해야 한다. Virtual Address는 [ Virtual Page Number + Page Offset ] 으로 구성되어있다. 앞의 VP#는 tag와 index로 또 나눌 수 있고, 이를 이용해 Virtual Page Table을 작성할 수 있다. ( Virtual Address -> TLB -> Physical Address ) TLB Hit Virtual Page Table에 유효한 주소가 있다면 TLB Hit! Virtual Address를 Physical Ad..