2주차의 부팅 순서(부트로더 → 커널 → 루트 파일 시스템)가 크기만 줄어 그대로 들어 있다.
구성
임베디드에서 흔한 것
하는 일
부트로더
U-Boot
전원이 들어오면 커널을 메모리에 올린다 (PC의 GRUB 자리)
커널
필요한 기능만 남긴 리눅스 커널
그 기기에 없는 장치의 드라이버는 빼고 빌드한다
루트 파일 시스템
BusyBox
ls·cp·sh 같은 기본 명령 수백 개를 실행 파일 하나에 담은 도구
"소스 공개"가 임베디드에 중요한 이유가 여기서 드러난다. 커널을 직접 줄여 다시 빌드해야 작은 기기에 들어가는데, 소스가 없으면 불가능하다.
임베디드 기기는 자기 안에서 프로그램을 빌드하기엔 너무 약하다. 그래서 개발용 PC(x86)에서 대상 기기(ARM)용 실행 파일을 만드는 크로스 컴파일을 한다.
개발 PC (호스트, x86) 임베디드 보드 (타깃, ARM) ┌─────────────────────┐ 옮겨 싣는다 ┌──────────────────────┐ │ 크로스 컴파일러로 │ ───────────► │ ARM용 실행 파일을 실행 │ │ ARM용 실행 파일 생성 │ │ (여기서는 빌드하지 않는다)│ └─────────────────────┘ └──────────────────────┘
⚠️ iOS와 macOS는 리눅스 커널이 아니다. 애플의 Darwin(BSD 계열) 커널을 쓴다. 윈도도 당연히 아니다. "리눅스 커널 기반 운영체제가 아닌 것"이라는 문제에 이 이름들이 오답으로 나온다.
안드로이드는 리눅스 커널 위에 자체 프레임워크를 얹은 것이다. 커널은 공유하지만 GNU 도구 모음은 쓰지 않는다.
┌──────────────────────────────────────┐ │ 앱 전화 · 카메라 · 내려받은 앱 │ ├──────────────────────────────────────┤ │ 애플리케이션 프레임워크 앱이 부르는 자바 API │ ├──────────────────────────────────────┤ │ 네이티브 라이브러리 · 안드로이드 런타임(ART) │ ← 구글이 만든 층 ├──────────────────────────────────────┤ │ 리눅스 커널 드라이버 · 메모리 · 프로세스 │ ← 리눅스와 공유하는 층 └──────────────────────────────────────┘
층
일반 리눅스 배포판
안드로이드
커널
리눅스 커널
리눅스 커널 (같다)
C 라이브러리
GNU의 glibc
구글의 Bionic
기본 명령·도구
GNU 도구 모음
자체 도구
앱 실행 방식
실행 파일을 직접 실행
런타임(ART, 옛 이름은 Dalvik) 위에서 실행
라이선스
GPL 중심
커널은 GPL, 그 위는 대부분 Apache 2.0
안드로이드는 구글이 2005년 인수한 회사의 운영체제이고, 제조사·통신사 연합인 OHA(Open Handset Alliance)와 함께 공개했다.
1주차에서 "안드로이드는 리눅스 배포판이 아니다"라고 한 근거가 위 표다. 커널 한 층만 같고 나머지가 다르다.
보기에 섞여 나오는 이름을 두 칸으로 갈라 둔다.
리눅스 커널 기반 이다
리눅스 커널 기반이 아니다
안드로이드 (구글)
iOS · macOS (애플, Darwin)
Tizen (삼성·인텔)
윈도 · 윈도 모바일 (마이크로소프트)
webOS (팜 → LG)
심비안 (노키아 등)
ChromeOS (구글)
QNX · VxWorks (RTOS)
MeeGo (노키아·인텔)
FreeBSD · 솔라리스 (유닉스)
Firefox OS (모질라)
왼쪽 칸은 만든 회사가 제각각이라는 점이 중요하다. 리눅스 커널이 GPL로 공개되어 있어 누구든 가져다 자기 운영체제의 바닥으로 쓸 수 있다.
Tizen과 webOS는 스마트폰보다 TV·가전에서 살아남았다. "스마트TV의 운영체제"라는 지문이면 이 둘이다.
빅데이터의 특징을 3V — Volume(양) · Velocity(속도) · Variety(다양성) 로 설명한다.
하둡과 스파크 모두 리눅스 위에서 동작한다.
하둡은 저장(HDFS) 과 처리(MapReduce) 두 부분으로 읽는다.
HDFS — 큰 파일을 블록으로 잘라 여러 서버에 복제해 둔다 네임노드 (어느 블록이 어디 있는지 기억 — 목록만 가진다) │ ┌──┴─────────┬────────────┐ 데이터노드1 데이터노드2 데이터노드3 ← 실제 데이터를 저장 블록 A 블록 A 블록 A 같은 블록을 기본 3벌
이름
역할
네임노드(NameNode)
파일이 어떤 블록으로 나뉘어 어디에 있는지를 관리
데이터노드(DataNode)
블록을 실제로 저장
복제
같은 블록을 기본 3벌 둔다. 서버 한 대가 고장 나도 데이터가 남는다
MapReduce는 "단어 세기"로 따라가 보면 이름의 뜻이 풀린다.
입력 서버1: linux unix linux 서버2: unix linux Map (linux,1) (unix,1) (linux,1) (unix,1) (linux,1) ← 각자 쪼개어 표시 모으기 linux → 1,1,1 unix → 1,1 ← 같은 단어끼리 Reduce linux 3 unix 2 ← 합친다
Map은 흩어서 각자 처리, Reduce는 모아서 합산이다. 데이터가 있는 서버에서 바로 계산하므로 큰 데이터를 한곳으로 옮길 필요가 없다.
하둡은 아파치 재단의 오픈소스이고 자바로 작성되었다. 값싼 서버 여러 대를 묶는다는 점에서 첫날의 클러스터와 뿌리가 같다.
하둡과 고계산용 클러스터는 둘 다 "나눠서 처리"하지만 대상이 다르다. 고계산용은 큰 계산, 하둡은 큰 데이터다.
빅데이터의 V
뜻
Volume
양이 많다
Velocity
생기고 처리되는 속도가 빠르다
Variety
형태가 다양하다 (글·사진·로그 등)
Veracity · Value
정확성 · 가치 — 넷째·다섯째로 덧붙이는 V
기본은 3V(양·속도·다양성)다. 보기에 Virtual·Visual 같은 그럴듯한 V가 섞여 나온다.