26
26 1 Embedded Software Lab. OS 실습 Embedded Software Lab. 박은수 Lecture 1 Introduction

Lecture 1 Introduction - SKKU ESLABnyx.skku.ac.kr/wp-content/uploads/2015/03/Lecture_1.pdf · (posix : unix os의 공통 api를 정리하여 유닉스 애플리케이션을 개발하기

  • Upload
    vodat

  • View
    227

  • Download
    3

Embed Size (px)

Citation preview

26

1

Embedded Software Lab.

OS 실습

Embedded Software Lab.

박은수

Lecture 1 Introduction

26

2

Embedded Software Lab.

OS 실습

Embedded Software Lab.

박은수

실습 환경

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

5

Embedded Software Lab.

OS 실습

Embedded Software Lab.

박은수

리눅스 소개

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

11

Embedded Software Lab.

오픈 소스

26

12

Embedded Software Lab.

오픈 소스

26

13

Embedded Software Lab.

오픈 소스

26

14

Embedded Software Lab.

Linux Versions

2.6.11.12

Version Number

Release

patched versions

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

17

Embedded Software Lab.

OS 실습

Embedded Software Lab.

박은수

운영체제의 기초 개념

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