Computer

이 글의 목표는 여기에 가면 건강에 좋고 맛있는 칼국수 집이 있다. 가서 칼국수 맛을 한 번 보라고 얘기해주는 약도를 그리는 것이다. 가서 먹고 싶다는 마음이 생기고 찾아가는데 도움이 될 수 있으면 좋겠다. 구체적이고 실질적으로 도움이 되는 정보는 스스로 찾아 읽고 시도해 보아야 한다. 내가 해 본 정보만 제공해 두었다. 다른 정보와 경험을 나와 나누어 주면 고맙겠다.

교육은 그 사람의 삶에 있어 가장 중요한 바탕이다.

어떠한 교육을 받느냐에 따라 그 사람은 삶의 가치를 판단하는 기준을 갖게 된다. 교육을 통하여 스스로 수용하고 해석하는 것이지 외부의 것을 그대로 받아들이지 않는다. 입력은 우리의 신비한 뇌 속에서 여러 과정을 거쳐 출력은 예측할 수 없다.

먹음직스러운 음식으로 유혹할 수는 있다. 하지만 입에 넣어 씹고 소화를 시키는 것은 자신의 몫이다.

어린아이가 있다면 컴퓨터 교육을 시키고 싶다. 기초적인 영어 단어만 이해할 수 있으면 시작할 수 있다.

누구나 하나의 언어는 소통하기 위하여 배우고 있다. second language로 컴퓨터 언어를 배우는 것도 좋을 것이다. 컴퓨터와 대화하며 혼자서 배우는 것이 가능하다. 논리적인 생각을 배울 수 있다. output에서 발생하는 모든 가능성을 항상 고려해야 한다. error가 발생하면 수정할 수 있는 방법을 찾는 것을 배울 수 있다. 우리 주변의 대부분 사용하는 생활용품이 컴퓨터 logic으로 작동하니 사용법을 익히는데 도움이 된다.

windows system보다 linux system을 추천한다. 사용하지 않는 구형 컴퓨터에 설치하여도 사용하는데 불편함이 없다. virus등으로 os가 망가져도 쉽게 복구가 가능하다.

처음 시작하는 컴퓨터 언어로는 python이 좋을 것이다. 어떤 사람은 1주일이면 기초적인 것을 배우는데 충분하다고 하였다. 기초적인 문법과 단어들을 익히고 문장을 만들고 컴퓨터와 소통할 수 있다. 즉 output을 만들어 볼 수 있다.

첫 번째로 jupyter.org에서 jupyter를 설치하여 사용할 수 있다.
다른 하나는 microsoft visual code view를 설치하여 사용하는 것이다.

더 깊이 들어가게 되면 자신만의 function library를 만들고 싶을 것이다. library는 c/c++로 만들어져 있으니 이런 언어를 공부 할 수 있다.

다양하고 많은 컴퓨터 언어가 있지만 c/c++는 오래된 언어로 다양한 소스코드가 있다. operating system과 compiler를 한 번 만들어 보는 것도 쓸모가 있을 것이다. 한 번 발명한 바퀴를 다시 발명할 필요는 없다고 하지만 만들어지는 과정을 재현해 보는 것도 깊이 있는 이해를 위하여 도움이 된다.

cpu는 bit값을 변화시킬 수 있는 alu(arithmetic logic unit)와 저장할 수 있는 registers로 구성되어 있다. 이 단위를 core라고 부르고 8-core cpu는 이런 단위의 구조가 8개다. 각 core는 두 개의 thread를 처리할 수 있다. 두 가지 기능 즉 64-bit cpu는 한꺼번에 64-bit 단위로 불러오고 변화시키고 저장한다. 계산 작업과 전달 작업의 두 부분은 core의 각기 다른 부분을 사용하기 때문에 병열 작업이 가능하다. 이렇게 두 개의 thread를 각 core가 처리할 수 있기 때문에 8-core 16-thread라고 한다.

다른 숫자는 clock과 bus다. 한꺼번에 전달할 수 있는 bit수로 물리적으로 연결되어 있다. 32-bit-bus는 한꺼번에 옮길 수 있는 bit수다. clock은 bit를 전달하는 속도다.

Operating System

많은 online 강좌를 보았지만 이 사이트가 가장 잘 설명하고 있었다. 실제로 ubuntu 환경에서 따라하며 해 볼 수가 있다.

https://github.com/nanobyte-dev/physical-allocators

컴퓨터를 켜고 필요한 icon을 click하면 프로그램이 시작된다. 이때 os는 이 icon과 연결된 ram memory에 올려진 binary code를 찾아서 cpu가 실행할 수 있게 한다. 이 binary code를 때로는 image라고 부르기도 한다.

booting 과정에서 이 image를 외부 disk(ex: c-drive)에서 ram에 저장하여 cpu가 필요한 binary code를 찾아 실행할 수 있도록 지정된 장소에 주소 값과 함께 저장한다.

직접 하드웨어를 작동하게 하는 kernel code와 이 코드를 이용하여 실행하는 application code가 있다. os programming은 kernel code를 작성하고 ram에 옮겨 cpu가 실행할 수 있도록 만드는 것이다.

우리는 입체적인 모양으로 저장하는 것을 좋아한다. 파일 구조도 root directory로 시작하여 folder가 나열되어 있고 그 속에 파일들이 있다. 컴퓨터는 이것을 하나의 binary number 가닥으로 생각하고 순서를 매기고 그 순서로 위치를 찾아간다.

hard drive는 cylinder와 track으로 되어 있고 이것을 sector단위로 쪼개어 사용한다. 컴퓨터가 구별하는 것은 이 sector number이다.

파일 구조를 정하고 매체에서 필요한 데이터를 컴퓨터 메모리로 옮기기 위해서는 이 물리적 위치에서 sector number로 지정된 memory block으로 옮기는 작업을 해야 한다. 이것이 FAT(file allocation table)을 만드는 과정이다.

메모리 구성에서 자주 보는 cluster fat track은 사용하기 편리하게 sector의 묶음으로 만들어진 것이다.

컴퓨터 언어를 공부하는데 도움이 될 수 있는 정보

nasm
python
c/c++
rust
php
javascript

혼자서 공부하면 operating system에 대한 공부를 하지 않는 경우가 많다. 하지만 꼭 필요한 분야다. 여러 이론 강좌도 많지만 실제 코딩을 ubuntu platform에서 gcc와 nasm로 만드는 과정을 가장 자세하게 보여주는 사이트다. makefile을 공부하는데 많은 도움이 되었다.

사용하고 있는 컴퓨터는 windows 10과 ubuntu 23.04를 사용하고 있다. hardware:

windows 10

CPU AMD Ryzen 7 5800X 8-Core Processor
GPU NVIDIA GeForce RTX 3060
RAM Corsair VENGEANCE LPX DDR4 32GB (2x16GB – total 64GB)
Samsung 990 EVO SSD 1TB
one 27 inch LG monitor
one 26 inch lenovo monitor

ubuntu 23.04

CPU AMD Ryzen 7 5700G 8-Core Processor
GPU GIGABYTE GeForce GTX 1650
RAM Corsair VENGEANCE LPX DDR4 32GB (2x16GB – total 64GB)
Samsung 990 EVO SSD 1TB
one 27 inch LG monitor
one 26 inch lenovo monitor

dual monitor를 사용하면 작업할 때 편리하다. 참고 자료를 다른 창에 열어놓고 볼 수 있다.

소프트웨어는 대부분 free softwares을 사용한다.

cherrytree – download

download from github
$ sudo git clone https://github.com/giuspen/cherrytree

unreal engine 5.4.0 – download

blender – download

gimp – download

stable diffusion – download

kdenlive – download

visual studio for linux – download

가상환경:

QEMU
VMware player – download
Oracle VirtualBox

사용된 software는 여기에서 download 받을 수 있다.

blender에서는 직접 모델을 만들어 사용할 수 있지만 여기서는 다른 software에서 만들어진 모델을 이용한다. 필요한 모델을 구입할 수 있는 online market도 형성되어 있다.

다른 software로는 VaM2가 있다. 설치하여 작동하는 것은 확인하였지만 실제 사용해 보지는 못했다.

이런 graphic program은 개인적인 생각으로 photoshop 이나 gimp에 비하여 user interface가 복잡하다. 많은 시간의 훈련이 필요하다.

Reverse Engineering

ollydbg
ghidra
ida
x32dbg
radare2
binary ninja

Graphic Programming

항상 편리하게 사용하고 있는 image 용량을 줄이는 프로그램에 많은 사람들의 노력이 들어있다. 다양한 algorism과 수식이 이용되었다. 이런 사람들의 노력 덕분에 우리는 많은 것을 즐길 수 있다.

처음 시작한 graphic programming은 xlib을 사용한 것이었다. 환경 setup을 쉬웠지만 처음 hello world 창을 띠우는 것은 쉽지 않았다.

linux에서 tested codes:

github site

openGL을 배우는 데 좋은 참고 자료

강원대학교 컴퓨터 그래픽스 수업 강의 영상

https://www.youtube.com/@rinthel

linux platform에서 tested codes – c++ using cmake

github site

전북대학교 컴퓨터공학부 컴퓨터 그래픽스 강의 영상입니다.

ogldev

linux platform에서 tested codes – c++ using makefile

github site

openGL with rust

github site

Deep Learning

언제나 linux에서 deep learning 환경을 setup 하는 것은 쉽지 않았다.

venv에서 시도하여 보았고 docker에서도 시도하여 보았다.

GPT(generative pre-trained transformer)에서 keyword는 transformer이고 중요한 개념이 attention이라고 하였다. diagram과 수식으로 설명했는데 이해하는 것이 쉽지 않았다. 이 영상이 이해하는데 많은 도움이 되었다.

뇌과학 입문 – 북툰 사이언스
Visualizing transformers and attention
트랜스포머를 넘어 MoE와 SSM까지, 미래 AI의 방향은? | AGI 구현 위한 요구 컴퓨팅 량 너무 높아 | MoE, Mamba, Jamba 등 AI 아키텍처 등장