③ Runtime System (종류)
01 command (명령어)
- file related : ls, cat, more, cp, mkdir, cd, …
- task related : ps, kill, jobs, …
- utility : vi, gcc, as, make, tar, patch, debugger, …
- management : adduser, passwd, ifconfig, mount, fsck, shutdown, … (은행관련)
- others : man, file, readelf, grep, wc, …
02 shell
- command interpreter (명령어 해석기)
- pipe, redirection, background processing
- shell script programming에서는 if, for 같은 프로그래밍을 지원한다.
- 사용자가 command를 주면 shell이 명령어를 해석해서 실제 처리를 한다.
03 library
사용자들에 의해 자주 호출되는 함수들의 집합이다. 라이브러리의 함수들은 재배치 가능한 오브젝트로 만들어져 있다. 즉 번역 시스템에서 어셈블러를 거쳐 기계어로 만들어져 있지만 링킹되기 전인 상태(.o)이다. 대부분의 언어는 표준 라이브러리를 가지고 있고, 개발자들이 직접 자기 고유의 라이브러리를 만들 수도 있다.
종류
1. static (정적)
.a (확장자)
statically linked (compile time) : 정적으로 링킹돼서 compile time에 링킹될 수 있다.
simple : 심플하게 만들 수 있지만, 메모리 낭비가 있다.
2. shared (공유)
.so (확장자)
dynamically linked (compile time) : 동적으로 링킹돼서 runtime에 링킹된다.
memory efficient : 메모리를 효율적으로 사용한다.
< C를 위한 표준 라이브러리 >
libc.a → static
libc.so → shared
< library와 system call >
둘 다 api 함수들의 집합이다.
- library : user mode에서 동작한다.
- system call : kernel mode에서 동작한다. OS가 자신의 서비스를 user에게 제공할 때 쓰는 api이다.
04 Framework (=Platform)
기능들의 집합으로 대규모 소프트웨어를 필요할 때 필요한 여러가지 기능들을 묶어놓은 것이다. 기능에는 windows, databases, graphics, multimedia, web, RPC, protocol 등이 있다. 최근 컴퓨터의 사용 범위가 넓어짐에 따라 Framework도 많이 활용되는 추세이다.
종류
1. Mobile Framework (e.g. Android)
2. Machine learning (e.g. Tensorflow)
3. Bigdata Framework (e.g. MapReduce or Hadoop)
예시1 : Android Framework
- 안드로이드라는 모바일 환경에서 쉽게 애플리케이션을 개발할 수 있는 여러 기능들을 모아서 제공한다.
예시2 : MapReduce Framework
- 대규모 데이터를 빠르게 처리(분산병렬처리)할 수 있는 Framework으로 input 데이터를 여러 곳으로 나눠서 각각의 단어 수를 센다(mapping). shuffling과 reducer를 거쳐 input에 있는 키워드들이 몇 번 나오는지 word count한다.
05 Virtual machine과 Docker
독립적인 가상화된 computing 환경을 제공해주는 대표적인 런타임 시스템이다.
Virtual machine
Hypervisor나 Host OS에서 virtual devices를 만드며, virtual devices 위에서 GusetOS를 수행한다.
GusetOS (new) ↔ HostOS (origin)
Docker
namespace와 cgroup 기능을 사용해 container(독립적인 환경)을 만드며, Docker의 명령어는 리눅스(유닉스) 명령어와 꽤 비슷하다.
06 Key-Value Store
빅데이터 시대가 도래하면서 비정형 데이터들이 많아졌다. 이 데이터들은 기존의 테이블 형태의 데이터베이스로는 관리하기 쉽지 않아 새로운 데이터베이스를 만들 필요성이 생겼다. 그러한 데이터베이스 중에 가장 성공한 것이 Key-Value Store이다. 이외에도 key들을 모아두는 Document store, key-value, key-value가 체인으로 연결되어 있는 graph store가 있다. 유명한 회사는 대부분 Key-Value Store를 가지고 있다.
- Key data structure (자료구조) : LSM-tree, Skipped-list, Bloom filter, ..
- ex) 구글의 LevelDB, 페이스북의 RockDB, 아마존의 Aynamo