전체 글
-
ARM64 리눅스 부팅 초기 어셈블리 코드 분석(head.S) (1/2)개발/컴퓨터사이언스 2018. 1. 17. 23:54
최근에 ARM 64bit 리눅스의 초기 부팅 어셈블리 코드(arch/arm64/kernel/head.S)를 분석할 일이 있었다. 학교 다닐 때 x86 어셈블리로 코딩을 해본적도 있고 예전에 ARM 32bit miniOS 초기 부분도 분석해본 경험이 있어서 금방 할 줄 알았는데... ldr 같은 기본적인 명령어도 오랜만에 보니 생소했고 ARM 64bit만의 고유한 레지스터가 있어 레퍼런스를 뒤적거리면서 찾게 되다 보니 생각보다 오랜 시간이 소요됐다. ARM32와 ARM64가 원래 겹치는 영역이 별로 없는건지 아니면 내 머릿속에 남아 있는게 별로 없어서 겹칠게 없어진건지. 고생한 만큼 쉽게 잊혀질 수 있기 때문에(응?) 포스트로 이번에 공부한 내용들을 짧게나마 정리해보려한다. 1. ENTRY(stext) E..
-
이기적인 총무 - 리팩토링 계획사이드 프로젝트/이기적인 총무 2018. 1. 7. 23:25
단순히 기능적 요구사항만 만족하는 소프트웨어가 아니라 변경 용이성, 성능, 사용 편의성과 같은 품질 요소와 객체 지향적인 관점을 고려해서 구현하는 것이 구조적으로 튼튼한 소프트웨어를 만드는 일이다. 이기적인 총무를 처음 만들때는 빠르게 출시 해보는것이 목적이어서 기능 구현과 UX 디자인 이외의 것들을 생각하지 못했다. 그러다보니 몇몇 기기에서는 정상적으로 작동하지 않고 있고 수정 하려고 해도 어디서 부터 손대야 할지 엄두가 나지 않는다. 이미 출시 된지 꽤 많은 시간이 흘러 조금 늦은 감이 있지만 앞으로 두달 간은 그동안 놓쳐 왔던 것들을 계획을 세워서 보완해 볼 생각이다. 1. 구조설계서 작성 가장 중요한 일임에도 불구하고 빠르게 개발하는데 급급해 문서 남기는 일을 생략했다. 그 결과 마지막으로 업데이..
-
KVM - ARM개발/가상화 2018. 1. 1. 11:41
아주아주 먼 옛날 가상화 기술이 핫 할때 Intel과 ARM 같은 제조사들은 자사의 칩에서 동작하는 가상화 소프트웨어의 성능을 높이고자 하드웨어단에서 여러 옵션을 추가 했다. 소프트웨어 개발자들은 제조사들이 제공하는 옵션을 활용해 하이퍼바이저를 만들었는데 KVM 또한 이때 만들어진 하이퍼바이저중 하나다. 좀더 구체적으로 말하면 QEMU같은 Type2 소프트웨어가 하드웨어의 가상화 확장 기능을 쉽게 사용 할 수 있도록 인터페이스의 역할을 하는 커널의 모듈이다. 그런데 제조사들은 가상화 기술의 성능을 높이기 위해 어떤 기능을 제공하고 있을까? 여러 OS를 동작하는 작업인 만큼 매우 오버헤드가 심할텐데 어떤 옵션이 있었기에 VMware로 리눅스가 쌩쌩 잘 돌아가는거지? 그리고 KVM은 하드웨어의 기능을 어떻게..
-
말하기와 듣기 - 개발자로서 갖춰야할 기본 덕목카테고리 없음 2017. 11. 18. 16:56
대학교 1학년 이었던 것 같습니다. 학창시절 리눅스는 커녕 윈도우 커맨드 창 한번 두들겨 본 적이 없을 정도로 개발에 무관심 했던 저는 오로지 취업 안정성 하나만을 바라보고 컴퓨터 공학부에 입학 했습니다. 전공 선택의 목적이 컴퓨터에 대한 흥미나 학문의 대한 열망 보단 먹고 사는 문제를 해결하는 것이었고 당시 신문과 뉴스에선 대기업 개발자들의 희망 퇴직, 사오정 같은 고용불안정에 대한 기사를 쏟아냈기 때문에 자연스럽게 저의 학부 시절의 목표는 '뛰어난 개발자가 되어 이 직업으로 오래오래 먹고 사는 것'이 됐습니다. 다소 엉뚱하고 현실적인 목표를 세우면서도 철학적인 질문이 들었습니다. 뛰어난 개발자'란 어떤 사람을 일컫는 것일까요? 참 속시원하게 답하기 힘든 질문인 것 같습니다. 도대체 어떤 기준으로 개발..
-
QEMU와 KVM - 2개발/가상화 2017. 11. 11. 11:03
KVM(Kernel-based Virtual Machine) 그림1. KVM 공식 로고다. 펭귄이 던지고 있는 공은 VM을 의미하는 것 같다. "KVM은 리눅스 커널을 하이퍼바이저로 변환하기 위한 가상화 인프라스트럭처의 하나이다"라고 위키 백과에선 설명하는데 이것만 가지곤 KVM의 제공하는 기능을 이해하긴 힘들다. KVM을 공부하기 전에 같이 사용되는 하이퍼바이저, QEMU에 대해 먼저 공부해보면 KVM의 사용 목적에 대해서 더 쉽게 이해할 수 있다. QEMU 포스트 읽어보기 Intel과 ARM같은 하드웨어 개발 회사들은 컴퓨터 내에서 가상화 기술을 지원하기 위한 장치들(Intel VT 또는 AMD-V )을 넣어뒀다. 이런 장치들은 가상화 기술의 고질적인 성능 저하 문제를 해결 하기 위해 만들어졌는데 이..
-
QEMU와 KVM - 1개발/가상화 2017. 11. 1. 00:59
QEMU 'Quick Emulator' 풀네임 만으로는 와닿지 않지만 QEMU는 현재 PC에 설치된 운영체제와 다른 여러 개의 다른 운영체제를 구동 할 수 있는, 전가상화(Full Virtualization)를 지원하는 가상화 소프트웨어중 하나다. 전가상화 소프트웨어로는 VirtualBox나 VMware가 대중적으로 알려져있지만 가상화 기술 개발자들 사이에선 QEMU는 빼놓을 수 없는 가상화 소프트웨어중 하나다. 거의 가상화 기술 초창기를 주도 했던 소프트웨어이며 이때 만들어진 개념들도 상용화된 가상화 소프트웨어에서 사용되고 있다. 실제로 VirtualBox에선 상당부분을 QEMU 소스를 사용했다고 한다. QEMU는 다른 가상화 소프트웨어와는 다르게 오픈소스로 개발됐다(물론 VirtualBox도 오픈소스..
-
폴리페이스 - 데이터 학습시키기사이드 프로젝트/폴리페이스 2017. 10. 12. 21:21
데이터 구하고 가공하기에서 한 작업은 정치인들의 사진을 인터넷에서 크롤링 한 후 정확도 향상을 위해 사진에서 얼굴 부분만 추려낸 후 이 것을 Tensorflow서 사용 할 수 있는 파일 형식인 tfrecord로 변환하는 작업이었다. 이제는 변환된 데이터를 이용해서 학습을 시키는 일만 남았다. 이번 포스팅에서는 데이터를 학습시키는 과정들을 쭉 살펴보려고 한다. 1. Tensorflow 설치하기 (feat, 그래픽 카드 없이는 못쓴다) Tensorflow는 내 데스크탑에 그래픽 카드가 있느냐 아니면 없느냐에 따라서 설치 명령어가 달라진다. (tensorflow)$ pip install --upgrade tensorflow # for Python 2.7 (tensorflow)$ pip3 install --up..
-
폴리페이스 - 데이터 구하고 가공하기사이드 프로젝트/폴리페이스 2017. 9. 12. 22:41
인공지능 개발시 훌륭한 학습 알고리즘도 중요하지만 양질의 데이터를 구하는 작업 또한 중요하다. 데이터는 되도록 많을 수록 그리고 정확할 수록 학습에 도움이 된다. 이번 포스팅에서는 폴리페이스에서 어떤 방식으로 데이터를 구했고 가공했는지를 정리해보려 한다. 1. 학습에 사용할 데이터 모으기 학습에 사용할 전혀 손때 묻지 않는 RAW 데이터를 구하는 것이 첫번째 과정이다. 폴리페이스의 서비스는 정치인 얼굴 닮은 정도를 측정하는 것이므로 이때 필요한 RAW 데이터는 인터넷 상에 떠도는 정치인의 얼굴이 담긴 사진이다. 가장 간단한 방법은 정치인의 이름으로 구글 이미지 검색을 해서 나오는 이미지들을 다운 받는 것이다. 그런데 한 명당 몇장이나 필요한가가 의문이었다. 딥마인드는 알파고를 학습시키려고 10만기보를 준..