Linux

LKM3_2048.png
Linux Kernel Map
Shell
쉘(shell): 사용자와 컴퓨터 하드웨어 또는 운영체제간 인터페이스
    사용자의 명령을 해석해서, 커널에 명령을 요청해주는 역할
    관련된 시스템콜을 사용해서, 프로그래밍이 작성 되어 있다.
쉘 종류
    Bourne-Again Shell(bash): GNU 프로젝트의 일환으로 개발됨, 리눅스 거의 딜폴트 shell
    Bourne Shell(sh)
    C Shell(csh)
    Korn Shell(ksh): 유닉스에서 가장 많이 사용된다.
실제 운영체제의 이해(총정리)

- process management
    응용 프로그램은 여러개의 process로 관리됨
    process scheduler
        process 실행, 종료 관리
        인터럽트 처리 관리

- memory management
    가상메모리
        page 기반 메모리 관리

- IO device management
    VFS(Virtual File System)
    file, Device drivers, Network 관리

- 시스템 프로그램
    핵심은 쉘(shell)
        bash(Bourne-again shell)
        내부는 시스템콜을 호출하도록 구현
    각 프로그래밍 언어(운영체제별로 구현), 시스템콜도 프로그래밍 별로 API가 필요함
        필요시 해당 운영체제의 시스템콜 호출
            라이브러리/시스템콜과의 관계
Android
안드로이드의 구조 | 찰스의 안드로이드
기본적으로 리눅스 kernel이 설치 되어 있기 때문에 shell(터미널) 등 사용가능
안드로이드는 Java 기반이기 때문에 Java VM등이 필요

Application Framework가 Android의 형태를 갖추게 함

안드로이드는 OS가 아닌 Linux위에 구현되는 Framwork이다.
참고) IoT
IoT(사물인터넷, Internet of Things)
    각종 사물에 센서와 통신 기능을 내장하여 인터넷에 연결하는 기술

RasberryPi 와 같은 초소형 CPU는 OS 기능을 최소화 해야 한다.(Linux도 버거움)
간단한 업무만 처리하면 되기 때문에 OS의 모든 기능을 구현할 필요가 없다.

TinyOS
2. Simplified TinyOS Architecture. | Download Scientific Diagram
multitasking, protection ring, virtual memory, virtual file system 등 모두 필요없다.