710 likes | 900 Views
Embedded Linux. Network package. vi, emacs,… . Compiler. ls, who, … . Kernel. Device Driver. X window system. RDBMS. Hardware. 운영체제. 운영체제란? 자원 관리자 ( Resource Manager) 응용에게 자원에 대한 서비스 제공 ( Computing Environment) 자원의 종류 물리적인 자원 : 처리기, 메모리, 디스크, 터미널, 네트웍, ...
E N D
Network package vi, emacs,… Compiler ls, who, … Kernel Device Driver X window system RDBMS Hardware 운영체제 • 운영체제란? • 자원 관리자 (Resource Manager) • 응용에게 자원에 대한 서비스 제공 (Computing Environment) • 자원의 종류 • 물리적인 자원 : 처리기, 메모리, 디스크, 터미널, 네트웍, ... • 추상적인 자원 : 태스크, 세그먼트/페이지, 파일, 드라이버, 통신 프로토콜, 패킷, 보안, ...
운영체제 종류 • RTOS(Real-Time OS) • VxWorks, pSOS, LEX, uITRON, EPOCH, Nucleus • UNIX • Linux • Windows System • MacOS
임베디드 (실시간) OS의 주요 개념 • 태스크 • 수행중인 프로그램 (an instance of a running program) • 스케줄링 단위 (scheduling entity) • 제어 흐름과 주소 공간의 집합 (a control flow and address space) • 멀티 태스킹 • 여러 개의 태스크를 동시에 실행시키는 것 • 일반 OS 에서의 태스크 • 각 태스크들은 대분분 무관한 프로그램임 • 임베디드 시스템에서의 태스크 • 하나의 큰 응용 프로그램을 논리적으로 나눈 것 • 기능상 매우 밀접한 관계 • 태스크 사이에 이루어지는 작업들이 많다. • 응용 프로그램을 실행을 위해 여러 기능들이 동시 실행 요구 • 순차적이 아닌 동시 실행의 필요성이 있다.
임베디드 (실시간) OS의 주요 개념 • 스케쥴러(Scheduler) • OS의 핵심기능 • 다음 번에 어떤 태스크를 실행해야 하는 지를 결정하는 코드 부분 • 태스크 선택 정책 : 우선순위 기반의 스케쥴링 • FIFO(First In First Out), Round-robin 등 • 선점(Preemptive) • 어떤 태스크가 수행되고 있을 때 커널이 중간에 그 태스크의 수행을 중지 시키고 다른 태스크의 기능을 수행시키는 기능 • 선점형 커널 / 비선점형 커널 • 다른 태스크로 실행이 넘어갈 때 문맥전환(context switching) 발생 • Context switching • 일단 현재 수행 중인 태스크 상황 하에서의 시스템상태(문맥)를 TCB(Task Control Block)이라는 특정한 자료구조에 저장하고, 다음에 새로운 태스크의 문맥을 가져와 시스템 상태를 복원한 후에 실행하는 것 • Context switching은 overhead이기 때문에 짧을 수록 효율적 임 • thread의 개념을 통해 이를 보완하는 방법
임베디드 (실시간) OS의 주요 개념 • Mutual exclusion • 두개의 태스크가 동시에 하나의 공유자원에 접근하려고 할 때 한 태스크에게 자원 사용에 대한 배타적 권리를 보장하는 것 • Critical section : 공유자원을 access하는 일련의 코드부분 • 다른 태스크에 의해서 중단되어서는 안 되는 일련의 명령 혹은 코드 블록 • 상호배제 기법 • 인터럽트 발생을 방지 • Critical section에 들어가기 전에 인터럽트를 disable시키고 (CLI) 빠져 나오면서 인터럽트를 다시 enable 시키는 방법 (STI) • 단일 CPU의 경우 단순하게 사용 가능 • semaphore 이용 • semaphore를 얻지 못하면 공유자원을 얻을 수 없으며 일단 semaphore를 얻으면 공유자원을 마음 놓고 쓸 수 있다. • 다른 태스크를 위해서 공유자원을 다 쓰면 semaphore를 풀어야 한다. • Semaphore가 0 이면 waiting한다.
임베디드 (실시간) OS의 주요 개념 • Semaphore • 공유변수 사용 • mutual exclusion을 만들어 공유자원을 제어 • 태스크 사이의 동기화에 사용 가능 • 사용 방법 • 공유자원에 해당하는 semaphore를 만든다. • 공유자원을 사용하기 직전에 해당 semaphore 얻는다. • 변수 값이 0이 아닌 경우 그 변수 값을 1 감소 시킨다. • 0이면 양수가 될 때까지 기다린다. (SLEEP상태) • 공유자원을 다 쓰면 그 값을 1 증가 시킨다. • 종류 • Binary semaphore : 공유자원의 변수가 0,1인 경우 • Counting semaphore : 1이상의 값
임베디드 (실시간) OS의 주요 개념 • Task communication • 태스크간에 통신하는 방법 • Global variable을 쓰는 방법 / message passing 방법 • Global variable • exclusive access를 해야 하며, ISR이 포함된 인터럽트를 disable해야 한다. • Task 사이에서는 인터럽트를 disable하는 방법 외에 semaphore를 사용할 수 있다. • message passing • Mailbox, queue, pipe – message의 크기에 따라 결정됨 • Task synchronization • 태스크 간의 동기화 기능 • Semaphore/event flag/signal 등을 사용
임베디드 (실시간) OS의 주요 개념 • Interrupt service • Asynchronous event를 CPU에 알리는 방법 • Interrupt는 외부에서 들어오는 중요한 신호로서 시간에 민감한 경우가 있기 때문에 interrupt latency가 짧은 것이 좋음. • ISR자체도 짧은 것이 좋은데 그 이유는 ISR 자체가 길어지면 interrupt nesting이 되기 쉽기 때문. • ISR에서는 보통 그에 상응하는 태스크 수준의 service routine을 부르고(HISR) 끝나도록 구성. • HISR에서는 마치 태스크처럼 존재해서 수행이 된다.
리눅스 역사(history) • Linux 역사 • 핀란드 대학원생 Linus B. Torvalds • 1991 version 0.01 발표 • 1994년에는 리눅스 커널 버전 1.0 • 1996년 2.0 • 1999년 2.2 버전의 발표로, 엔터프라이즈 환경에 진입할 수 있는 초석 마련 • 최근 2.4 버전이 주로 사용되고 2.6 발표 상태 • A. Tanenbaum 교수의 Minix 기반 (http://www.cs.vu.nl/~ast/minix.html) • Philosophy of COPYLEFT(open source) • GNU support • Various Distributions : Redhat, Ubuntu, Fedora, Debian, Slackware, Alzza, …
Linux/GNU를 만들어가는 사람들 • 리누스 토발즈(Linus Torvalds) • 최초의 리눅스 커널을 만듦 • 리눅스 소스코드를 GNU의 GPL에 따라 인터넷에 공개 • 리차드 스톨만(Richard Stollman) • GNU 프로젝트의 리더로 FSF를 설립 • 카피레프트(CopyLeft) 주장 • 래리 월(Larry Wall) • 펄의 제작자 • 오픈 소스 프로그램과 여러 가지 게임 만듦 • 밥 영 (Bob Young) • RedHat의 공동 창립자, 오픈소스 운동의 선구자
process 1 process 2 process 3 process n User Space System Call Interface Filesystem Manager Process Manager Task Management Scheduler Signaling IPC Memory Manager Ext2fs proc xiafs nfs msdos ntfs Paging/Segmentation Kernel Space Buffer Cache Device Manager Network Manager character block socket Ipv6 IrDA Bluetooth Console KBD SCSI CD-ROM PCI ethernet Hardware Interface dev1 dev2 dev3 dev4 devn 리눅스 운영체제 구조 (Source : Linux Kernel Internals)
리눅스와 GNU • GNU (GNU’s not Unix) • 80년대 초반 리차드 스톨만(Richard Stallman)에 의하여 시작 • GPL (General Public License) • GPL에 의거한 모든 소프트웨어는 무료 • 변경 사항을 포함해서 재판매 하는 것은 허용하나 소스는 공개해야 함 • 프로그래머는 자신의 소프트웨어로 발생하는 어떤 위험이나 손해에 대한 법률적 책임이 없음 • Linux에 gcc, emacs 등을 이식 • BSD의 많은 유용한 유틸리티를 포함하게 하는 계기가 됨 • 리눅스는 GPL에 의거하여 배포
리눅스 커널 버전의 선택 • 커널 버전 • 역사 : http://www.kernel.org • 버전 숫자 : X.Y.ZZ • X : 커널의 버전 • Y : 릴리즈 번호, 홀수->개발 중, 짝수->안정된 버전 • ZZ : Modifications, 사소한 변화를 의미 • 최신 버전 : 3.0.4 • 새로운 다양한 기능이 이미 추가되어 있음 • 크기가 매우 크다는 단점이 있음 • 커널 버전의 선택 • 임베디드 시스템의 크기를 고려 • 필요한 기능을 고려 • 확장성을 고려
왜 Linux를 사용하는가 ? • 풍부하고 다양한 하드웨어를 효과적으로 지원 • 대부분의 하드웨어를 지원하는 추세임 • 인터넷에 맞는 강력한 네트워크 구축 • 윈도우와 통신 가능 (삼바) • 놀라운 성능 및 안정성 • Pentium으로도 충분히 빠르며 안전하게 수행 • 다양한 응용 프로그램 • 무료이기 때문 • 배포판 : RedHat 9.0, …
Embedded Linux • 임베디드 리눅스 출현 배경 • H/W의 발전 • 32/64bit 고성능 CPU • S/W의 많은 기능 요구 • OS의 기능이 중요, 안정된 운영체제의 제공(멀티 태스킹의 제공) • 강력하고 다양한 네트워크 환경의 제공 • 다양한 형태의 파일시스템과 실행파일 포맷 지원 • 확장성의 다양함과 용이함의 제공 • Free Software
Embedded Linux (cont’d) • 임베디드 리눅스 장점 • 기능성과 확장성이 우수 (리눅스 이용에 따른 장점) • PowerPC, ARM, MIPS 등 다양한 CPU Platform지원함 • 로열티가 없으므로 가격 경쟁력이 우수 • 사용자 층이 넓어 오류 수정이 빠르고 안정성이 우수 • 기존의 데스크 탑 개발 환경과 동일하여 개발이 용이함 • 임베디드 리눅스 단점 • 기존의 RTOS보다 많은 메모리를 요구함 • 범용 OS로 설계되어 Real-Time을 지원하지 못함 • 개발 환경이 Text 기반의 환경임으로 개발에 어려움이 있음 • GUI 환경을 개발하기 어려움 • 제품화하기 위한 솔루션 구성이 어려움 • 많은 업체들과 개발자들이 독자적으로 개발하고 있어 표준화가 어려움
리눅스 사용을 위한 준비 • Linux 배포판설치 • 2.1 linux 설치 파일 참조 • 에디터 • SHELL 이해 • 리눅스 명령어 이해 • 시스템 관리 명령어 • 네트웍 관리 명령어 • 파일 관리를 포함한 다양한 리눅스 명령어 • 에디터, 컴파일러 이해
에디터 • vi • 대표적인 텍스트 에디터 • 텍스트 모드로 동작 • gedit • WordPad 정도의 기능을 가진 그래픽 에디터 • 파일 편집, 저장, 자르기, 복사, 붙이기, 찾기 등의 기능 • kate • KDE Advanced Text Editor • Editing Text documents
개요 • 쉘이란 무엇인가? • 명령어 해석기(command interpreter) • 사용자와 os 사이에 창구 역할 • 쉘의 종류 • Bourne shell • Bash(Bourne Again shell) • Korn shell • C shell • … Korn shell C shell Bourne shell core core
쉘의 핵심 기능 쉘 내장명령어 스크립트 변수 리다이렉션 대표문자 파이프 명령열 서브쉘 후면처리 명령어처리 지역 환경 조건부 무조건부
쉘 선택 • 쉘 선택 • 시스템 관리자가 설정 /etc/passwd • 쉘의 절대 경로명 Bourne /bin/sh , /bin/bash Korn /bin/ksh C shell /bin/csh
쉘 선택 • 사용자가 쉘 선택 %chsh Changing login shell for chang Old shell : /bin/csh New shell : /bin/ksh %logout login : chang passwd: $
쉘의 절차 read a startup file in the user's home directory display a prompt and waits for a user command execute the user's command Control-D Terminate
시작 파일(Startup file) • Bourne shell : /bin/sh • .profile • .login • Bourne again shell : /bin/bash • .bashrc • .login • C shell : /bin/csh • .cshrc • .login
실행 파일 vs. 내장 명령어 • Shell내장 명령어 % echo -n {arg}* % cd directory • 유틸리티 프로그램(utility program) • 실행 허용 파일(a file with execute permission) • 디렉토리에 저장되어 있음 • 쉘 변수$PATH에 있는 순서대로 찾아서 실행 /bin, /usr/bin, /usr/local/bin, /usr/ucb, /etc, /usr/bin/X11 % ls ... /bin/ls
출력 리디렉션 • 출력을 파일에 저장 %command > fileName %ls > sample.txt • 출력을 파일에 첨부(append) %command >> fileName %cat >> sample.txt
입력 리디렉션 • 입력 리디렉션 • 파일을 표준입력으로 받아서 실행 %command < fileName %elm chang < sample.txt • Here documents %command << word … word
파이프(Pipe) • Command1의 표준 출력을command2의 표준 입력으로 만든다. %command1 |command2 %ls | wc -w
명령어 대치 • backquote(`)로 둘러 쌓인 명령어는 그 표준출력으로 대치된다. %echo the date today is `date`
Shell Script Programming • shell script • Shell 명령들을 포함하는 실행 가능 상태의 파일 • Shell script 예제 프로그램 • 파일 확장자 바꾸기 shell script의 첫 줄에 사용 shell 명시 #!/bin/bash # rfe old_extension new_extension # 예제: # 현재 디렉토리의 모든 *.gif 파일을 *.jpg로 바꾸기 # rfe gif jpg if [ $# -ne 2 ] then echo "사용법: `basename $0` old_file_suffix new_file_suffix" exit 1 fi for filename in *.$1 # 첫 번째 인자로 끝나는 파일들을 찾아서 do mv $filename ${filename%$1}$2 # 파일 이름에서 첫 번째 인자 부분을 떼어내고 두 번째 인자를 붙인다. done
명령 실행 • Shell • UNIX의 명령어 해석기(command line interpreter) • Bourne shell, Korn shell, C shell • date [yymmddhhmm [.ss]] • display or set current date and time • 온라인 매뉴얼 • man [chapter] word • man -k keyword • $man -k mode • $man chmod • $man 2 chmod
특수 문자 • 특수 문자 • $stty all • erase kill werase rprnt flush lnext susp • intr quit stop eof • 프로세스 종료 • Control-C • standard way to interrupt the foreground job • 출력 멈춤/계속 • Control-S/Control-Q • 입력 끝 • Control-D
파일 시스템 bin usr dev home chang
파일 시스템 • 홈 디렉토리(home directory) • 로그인하면 홈 디렉토리에서 작업 시작 • 시스템 관리자가 설정 • 현재 작업 디렉토리(current working directory) • Shell이 현재 작업 중인 디렉토리 • 로그인 하면 홈 디렉토리가 현재 작업 디렉토리 • cwd 변경 • 디렉토리 이동 • cd [directoryName]
경로명(pathname) • 절대 경로명(Absolute path name) • 루트 디렉토리로부터 파일이나 디렉토리의 경로 이름 • /home/chang • 상대 경로명(Relative path name) • 파일이나 디렉토리의 경로이름을 cwd을 기준으로 기술 • . : 현재 디렉토리 • .. : 부모 드렉토리
파일 명령어 • 디렉토리 내용 리스트 ls -adglsFR {fileName}* {directoryName}* -a : hidden files starting with . -l : long listing including permission, owner, modification time -d : directory not files -g : file's group -s : size -F : file type ( *, /) -R : recursively
파일 명령어 • ls
파일 명령어 • 파일 내용 리스트 cat [option] {fileName}* more [option] {fileName}* page [option] {fileName}* head [option] {fileName}* tail [option] {fileName}*
파일 명령어 • 파일 이름 변경 • mv[option]oldFileName newFileName • mv[option] {fileName}* directoryName • mv[option]oldDirectoryName newDirectoryName • 디렉토리 만들기 • mkdir[option]newDirectoryName • 새 디렉토리 생성
파일 명령어 • 파일 복사 • cp -i {fileName}* directoryName • cp -r directoryName1 directoryName2 • cp -i oldFileName newFileName • 파일 혹은 디렉토리 제거 • rmdir {directoryName}+ • rm -fir {fileName}+ • 파일의 단어 수 세기 • wc -lwc {fileName}*
파일 특성(file attribute) • 파일 이름 • 파일 크기 • 파일을 구성하는 블록 수 • 파일 갱신 시간 • 최후 갱신 시간 • 파일 소유자/그룹 • 파일 소유자 • 각 프로세스는 소유자가 있다. • 로그인 사용자 아이디(login user id) • 프로세스가 생성한 파일의 소유자 • 그 프로세스의 소유자로 설정된다.
파일 특성(file attribute) • 파일 타입
파일 특성(file attribute) • 허용 모드(permission mode)
파일 비교 • diff : 파일간의 모든 차이점과 비슷한 점을 보여줌 • diff [ -i -Dflag ] fileName1 fileName2 -i ; 대소문자의 구분을 무시한다(ignore) -Dflag ; C preprocessor를 위한 출력을 생성
파일 탐색 • find pathList expression • pathList 파일을 탐색할 경로의 리스트 (recursive search) • expression find . -name "*.txt" -print -name pattern 파일 이름이 pattern과 일치하면 참(*, [, ], ? 포함 가능) -perm oct permission의 8진수 표현이 oct와 일치하면 참 -type ch 파일의 유형이 ch이면 참 (ch: b=block, c=char) -user userId 파일의 소유자가 userId이면 참 -group groupId 파일의 그룹이 groupId이면 참 -atime count 접근(access)한 날 수가 count 이내이면 참 -mtime count 수정(modify)한 날 수가 count 이내이면 참 -ctime count 수정되고 화일의 속성이 바뀐 날수가 count이내이면 참 -exec command 수행 중인 command의 종료값이 0이면 참. \;로 끝남 command의 argument가 {}이면, 현재 화일의 이름으로 치환 -print 현재 파일명을 프린트하고 참 값을 반환 -ls 현재 파일의 속성을 보여주고 참 값을 반환 -cpio device 현재의 파일을 cpio 형식(5120 byte records)으로 device에 쓰고 참 값 반환 !expression expression의 논리 부정 \( expr1 [-a] expr2 \) 두 expression의 and \( expr1 [-o] expr2 \) 두 expression의 or