lecture 1 introduction - skku eslabnyx.skku.ac.kr/wp-content/uploads/2015/03/lecture_1.pdf ·...
TRANSCRIPT
26
3
Embedded Software Lab.
• https://www.vmware.com/ 접속
VMWare Player 설치
26
4
Embedded Software Lab.
• Odroid-U3
– 1.7GHz Quad-Core processor and 2GByte RAM
– 10/100Mbps Ethernet with RJ-45 LAN Jack
– 3 x High speed USB2.0 Host ports
– Audio codec with headphone jack on board
– GPIO/UART/I2C ports
디바이스
26
6
Embedded Software Lab.
• 1991년, Linus Torvalds에 의해 만들어진 Unix의 클론.
– Unix 스펙과 POSIX 표준을 준수 (POSIX : UNIX OS의 공통 API를 정리하여 유닉스 애플리케이션을 개발하기 위해 책정한 앱 인터페이스 규격)
– Multitasking, Virtual Memory, Shared Libraries, Demand Loading, Copy-on-write,
Networking 등 Unix가 지원하는 모든 요소들을 지원
• 오픈 소스 커널
– Linux Kernel을 포함하는 OS를 GNU/Linux (줄여서 Linux)라고 표현
– GNU = GNU is Not Unix
– GNU GPL (General Public License) 라이선스
누구나 다운로드하여 사용할 수 있으나 해당 라이선스의 코드를 사용한 코드는
공개되어야 함.
리눅스란?
26
7
Embedded Software Lab.
• 1991년, Linus Torvalds에 의해 만들어진 Unix의 클론.
– Unix 스펙과 POSIX 표준을 준수 (POSIX : UNIX OS의 공통 API를 정리하여 유닉스 애플리케이션을 개발하기 위해 책정한 앱 인터페이스 규격)
– Multitasking, Virtual Memory, Shared Libraries, Demand Loading, Copy-on-write,
Networking 등 Unix가 지원하는 모든 요소들을 지원
• 오픈 소스 커널
– Linux Kernel을 포함하는 OS를 GNU/Linux (줄여서 Linux)라고 표현
– GNU = GNU is Not Unix
– GNU GPL (General Public License) 라이선스
누구나 다운로드하여 사용할 수 있으나 해당 라이선스의 코드를 사용한 코드는
공개되어야 함.
리눅스란?
26
8
Embedded Software Lab.
• IEEE POSIX 표준을 준수
(Portable Operating Systems based on unIX)
– 유닉스 프로그램들은 리눅스에서 컴파일되고 실행될 수 있음.
• Monolithic Kernel기반의 운영체제
리눅스의 특징
26
9
Embedded Software Lab.
• Cost-free
• Fully customizable in all its components
• Powerful
• Kernel can be very small and compact
• Developers are excellent programmers
• Well supported
리눅스의 특징 (cont’)
26
10
Embedded Software Lab.
• 현업에서 가장 많이 쓰이는 OS
– 대형 서버, PC, 임베디드 시스템
– 안드로이드, 타이젠, 데이터 서버 등
• 공개된 오픈 소스*
– https://www.kernel.org/ 를 통해 커널 소스 공식 배포
– 다양한 보드 위에 자신만의 커널을 수정하여 포팅 가능
• 경쟁력 있는 시스템 프로그래머
– 누구나 쉽게 배울 수 있는 애플리케이션 개발과는 달리 OS, Computer Architecture, System Programming,
Algorithm, Mathematical Modeling 등 전문적 배경지식을 요하는 커널 개발은 전문가 수준의 기술력을 요함
• 수준 높은 코드
– 세계적인 프로그래머들에 의해 설계된 코드를 접해봄으로써 소프트웨어 개발의 노하우를 익힘
리눅스 실습
26
15
Embedded Software Lab.
• 코딩 스타일
– 커널 소스 참조
• Documentation/CondingStyle 문서에 기록되어 있음
– C로 쓰여졌으나, 객체 지향 프로그래밍 스타일
• 개발에 필요한 지식 습득
– 대부분의 코드가 문서화되어 있지 않으므로, 코드의 주석 혹은 코드 자
체가 가장 훌륭한 문서 (교재는 단순 참고용)
• Race Condition이나 Interrupt Context에 유의하여 개발할 것
커널 개발
26
16
Embedded Software Lab.
• Text Editor
– vi 혹은 vim에 익숙해지는 것을 추천
– nano, eclipse, gedit, or geany
• Ctags, cscope
– 방대한 코드들을 첫 번째 파일, 첫 번째 라인부터 볼 수는 없음.
– 각 Object들의 Symbol들을 통해 빠르게 코드 리뷰가 가능
– Ctags나 Cscope 사용법이 어렵다면 Source Insight 사용을 추천
• Git, svn
– 버전 관리 프로그램
– 자신의 소스를 잘 관리하는 것이야말로 프로그래머의 기초 소양
유용한 소프트웨어
26
18
Embedded Software Lab.
• 모든 컴퓨터 시스템에 있는 기본적인 프로그램 집합
– 이 중, 가장 중요한 프로그램을 커널(Kernel)이라고 한다.
– ex) 안드로이드
기본 애플리케이션, 플랫폼 (프레임워크 및 GUI 제공), 리눅스 커널
운영체제
26
19
Embedded Software Lab.
• 하드웨어를 직접 제어하는 운영체제의 한 레이어
– 운영체제를 종종 ‘커널’과 동의어로 사용하기도 한다.
• 하드웨어 구성 요소와의 상호 작용
– 하드웨어 플랫폼에 들어있는 모든 요소 서비스
• 사용자 애플리케이션을 위한 실행 환경 제공
• 프로그램이 하드웨어 자원을 이용하기 위해서는 커널에 요청
을 보내야 한다.
– 커널에서 관리함으로써 안정성 있는 컴퓨터 시스템을 구축
커널
26
20
Embedded Software Lab.
• 하드웨어를 직접 제어하는 운영체제의 한 레이어
– 운영체제를 종종 ‘커널’과 동의어로 사용하기도 한다.
• 하드웨어 구성 요소와의 상호 작용
– 하드웨어 플랫폼에 들어있는 모든 요소 서비스
• 사용자 애플리케이션을 위한 실행 환경 제공
• 프로그램이 하드웨어 자원을 이용하기 위해서는 커널에 요청
을 보내야 한다.
– 커널에서 관리함으로써 안정성 있는 컴퓨터 시스템을 구축
커널
Kernel Abstraction
26
21
Embedded Software Lab.
• 두 명 이상의 사용자가 각자 여러 애플리케이션을 동시에 사
용하고 서로 독립적으로 실행할 수 있는 시스템
• Concurrency & Independency
– Concurrency : 같은 시간에 여러 애플리케이션이 동작
– Independency : 각 앱이 다른 앱을 신경 쓰지 않고 작업을 수행
• 리눅스 멀티유저 시스템의 특징
– User와 User Group이 존재 (UID, GID로 구분)
– 각각의 User는 본인만의 디스크 공간의 일부분을 Namespace로 가지며
파일을 다른 사용자와 구분하여 저장한다.
멀티유저 시스템
26
22
Embedded Software Lab.
• 커널 코드는 여러 프로세스에 의해 공유
– 여러 커널 제어 경로(Control Path)가 특정 자료구조를 공유하는 상황
– 프로세스들을 어떻게 스케줄링 하느냐에 따라 결과 값이 달라짐
– Disabling Preemption, Disabling Interrupt, Semaphore, Spin Lock
– Dead Lock에 주의
동기화 (Synchronization)
26
23
Embedded Software Lab.
• Job vs Process
– Job : 실행될 코드와 관련 데이터들의 묶음
– Process : 실행을 위해 커널에 등록되고 커널에 의해 관리되는 개체
(실행 중인 프로그램의 실행 컨텍스트 혹은 실행 중인 프로그램 인스턴스)
• 멀티 유저 시스템에서는 각종 프로세스가 동시에 동작
– 선점형 커널 (프로세스 동작 중, 커널이 정기적으로 스케줄러를 호출하
여 프로세스의 실행을 제어)
– 프로세스들이 여러 시스템 자원을 차지하기 위해 경쟁하는 상황을 만
들고 관리. (Race Condition Management)
프로세스
26
24
Embedded Software Lab.
• 가상 메모리 (Virtual Memory) 개념 제공
– 사용할 수 있는 물리 메모리보다 많은 메모리를 필요로 하는 애플리케
이션을 실행 가능
– 프로그래머는 물리 메모리 구조를 신경 쓸 필요가 없음
– 여러 프로세스 동시 실행 가능
• 가상 메모리 관리는 MMU (Memory Management Unit) 이라
는 하드웨어 메모리 관리 유닛의 지원을 받아 수행
• Paging, Page Cache, Buddy, Process Address Space, Kernel
Memory Allocator, and Demand Paging
메모리 관리
26
25
Embedded Software Lab.
• 사용자 관점에서 일련의 디스크 블록들이 파일들의 트리 형
태로 보여지도록 추상화하는 시스템
• 파일들을 관리하는 다양한 기술이 존재하며, 이를 반영한 다
양한 파일 시스템이 존재 EXT4, NFS, F2FS, …
• 모든 파일시스템을 추상화하여 사용자에게 같은 뷰를 제공하
는 VFS (Virtual File System)이 존재
파일시스템
26
26
Embedded Software Lab.
• Textbook (Understanding Linux Kernel 3rd)
• http://csl.skku.edu 운영체제프로젝트, 이준원, 2014 봄학기
• https://github.com GitHub
• http://www.soscon.net/ 삼성 오픈소스 컨퍼런스
• http://www.hardkernel.com/ 하드 커널 (Odroid-U3)
• Kernel Reference Book (TextBook보다 비교적 쉬운 서적)
– Robert Love, Linux Kernel Development 3rd edition, Addision-Wesley.
– Wolfgang Mauerer, Professional Linux Kernel Architecture, Wrox.
References