Operating System 3주차 - About Linux -

Slides:



Advertisements
Similar presentations
Apr. 25, 2013 Laboratory of Systems Medicine BASIC LINUX COMMANDS.
Advertisements

프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
Android 프로그램개발 환경. 학습 목표 ■ 교육 목표  JDK 설치  JDK 환경 설정  Eclipse 설치  Android SDK 설치  ADT Plug-in 설치  Android Virtual Device(AVD) 설치  Android 예제 프로그램.
Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
OpenCV 안드로이드 연동 환경설정 OpenCV-Android 를 다운 받습니다.
시작부터 끝까지 진지한 궁서체로 진행하는 완벽한 주입식의 하드코어한 리눅스/장난감 세미나
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Image & Video processing
1장 리눅스의 기본 개념과 프로그램 작성 리눅스의 기본 개념 시스템에 접속하기 리눅스의 프로그래밍 환경
Cross Compiler를이용한 커널 컴파일 및 포팅
Cross Compiler를이용한 커널 컴파일 및 포팅 1
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
리눅스 기본 명령어 및 Vi 명령어 정리 2015/1, 컴퓨터의 개념 및 실습.
Linux/UNIX Programming
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
임베디드 시스템 개론 크로스 플랫폼 설치 2일차 강의 자료 Embedded System Lab.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
Root Filesystem Porting
C / C++ Programming in multi platform
Chapter 06 프로세스와 예약작업 관리 Solaris 1. 프로세스 관리
Communication and Information Systems Lab. 황재철
1. C++ 시작하기.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Root Filesystem Porting
Linux Master 김희승 임승한 OneScore 임승한.
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
Cross Compiler 설치.
DK-128 개발환경 설정 아이티즌 기술연구소 김태성 연구원
Cross Compiler를이용한 커널 컴파일 및 포팅
Linux/UNIX Programming
솔라리스10 3장. 솔라리스 패키지 관리.
㈜시스원이 제공하는 시스템 관리 통합 솔루션 SysmanagerOne Agent설치 안내서
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
Device Driver 임베디드 시스템 I.
영상처리 실습 인공지능연구실.
Linux/UNIX Programming
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
툴 설치 가이드 PrimeTime SynopsysMentor.
툴 설치 가이드 Formality SynopsysMentor.
Linux/UNIX Programming
학기 C/C++ 프로그래밍 실습 1주차.
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
Linux/UNIX Programming
Linux/UNIX Programming
Kernel, Ramdisk, JFFS2 Porting
( Windows Service Application Debugging )
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
제 6 강 Getting started.
OpenCV 설정 2.21 만든이 딩딩.
DK-128 개발환경 설정 아이티즌 기술연구소 김태성 연구원
DK-128 개발환경 설정 아이티즌 기술연구소
시스템 인터페이스 Lab#5 쉡 실습.
Linux 기본 사용법.
Tensorboard in Windows
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
시스템 인터페이스 Lab1 X-window 및 명령어 사용.
4. 셸을 이용한 명령어 입력. Unix 시스템 쉘 간단한 셸 명령 명령 매개변수(Command arguments)
과제 4: Thread (5월 9일까지) 4장 연습문제 풀이
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
Homework #7 (1/3) 1. 다음 순서에 따라 수행하고, 그 과정의 화면을 캡쳐한다.
Docker Study 6~7.
Linux/UNIX Programming
1. 실습 시간에 수행한 avd 생성 및 실행, adb shell 접속 및 명령어 수행 결과를 제출한다.
Presentation transcript:

Operating System 3주차 - About Linux - Real-Time Computing and Communications Lab. Hanyang University yjuly0708@hanyang.ac.kr rooterby@gmail.com

Contents Linux Shell Command Foreground & Background gcc compiler Makefile Quiz 과제1 설명 Kernel Source Download

Linux Shell Command man – Linux Programmer’s Manual 보기 Usage : man [name] Ex> $ man ls $ man fork 다양한 명령어와 시스템 콜 등에 대한 자세한 정보를 찾아 볼 수 있다.

Linux Shell Command ls – 현대 폴더의 파일과 폴더 목록을 출력 Option : -a (숨김 파일도 모두 표시), -l (파일 상세정보 표시) Ex> $ ls $ ls –a $ ls –l $ ls –al $ ls ../ $ ls /usr 그 밖의 Option은 $ man ls를 통해서 확인할 수 있다.

Linux Shell Command cd – 디렉터리 이동 Usage : cd (target directory) 1. 현재 디렉터리기준, 다운로드 디렉터리로 이동 2. 상위 디렉터리로 이동 3. /usr/src/linux 디렉터리로 이동 4. 현재 디렉터리기준, kernel 디렉터리로 이동 . : 현재디렉터리, .. : 상위 디렉터리 의미

Linux Shell Command rmdir – 디렉터리 삭제 touch – 빈 파일 생성 rm – 파일 삭제 mkdir – 디렉터리 생성 Usage : mkdir [directory name] rmdir – 디렉터리 삭제 Usage : rmdir [directory name] touch – 빈 파일 생성 Usage : touch [file name] rm – 파일 삭제 Usage : rm [fime name] rm –rf [directory name] (해당 폴더와 하위 파일까지 모두 지우는 명령)

Linux Shell Command

Linux Shell Command cp – 파일복사 mv – 파일위치 변경 Usage : cp [original filename] [target filename] mv – 파일위치 변경 Usage : mv [original filename] [target filename / target location]

Linux Shell Command find – 파일검색 Usage : find [path] [option] [target filename] …등 다양한 포맷 가능 자세한 옵션은 $ man find를 통해서 확인하고 사용한다. Ex> $ find [path] –name [filename]

Linux Shell Command ps – 프로세스 목록 출력 Usage : ps [options]

Linux Shell Command jobs – 실행중인 작업 출력 sudo – 일반 사용자가 루트 권한이 부분적으로 필요할 때 사용 Usage : sudo [option] [command] jobs – 실행중인 작업 출력

Linux Shell Command top – 시스템 사용량 확인

Linux Shell Command Top Table 필드 정보 PID : 프로세스 ID (PID) USER : 프로세스를 실행시킨 사용자 ID PRI : 프로세스 우선순위 (nice value + 20) NI : task의 Nice value VIRT : 가상 메모리 사용량 RES : 현재 Page가 상주하고 있는 크기 (Resident Size) S : 프로세스 상태 (S : sleeping, R : running, W : swapped out process, Z : zombies) %CPU : 프로세스가 사용하는 CPU 사용률 %MEM : 프로세스가 사용하는 메모리 사용률 COMMAND : 실행된 명령어

Foreground & Background 프로세스를 실행하는 방법은 크게 2가지가 있다. Foreground 기본적으로 모든 프로세스는 foreground로 실행된다. 키보드와 연결되어 있으며 결과를 직접적으로 스크린 혹은 터미널 창에 출력한다. 꽤 긴 시간 동안 동작하는 프로그램을 실행시켰을 경우에는 그 시간 동안 터미널을 이용할 수 없게 되므로, 곤란한 경우가 생기게 된다. Background 키보드와 연결되지 않은 상태로 실행된다. 만약 이 프로세스가 키보드 입력을 필요로 할 경우에는, 입력을 기다린다. Background로 프로세스를 실행하는 것의 장점은 한 프로세스가 동작하고 있는 동안에도 다른 프로세스를 실행시킬 수 있다는 점이다. $ ./a.out & 를 통해 백그라운드로 실행할 수 있다.

Foreground & Background Example> matrix source code 단순하게 100 x 100 행렬을 10^5 제곱하는 함수. 참고로 아래 프로그램은 input_matrix의 초기화가 생략되어 있습니다.

Foreground & Background Example> Foreground & Background Foreground 실행 -> 프로세스가 종료할 때 까지 다른 작업 못함 Background 실행 -> 다른 작업 가능 “ctrl + z” 프로세스 중지 -> foreground 프로세스 중지

Foreground & Background Example> Foreground & Background command “jobs” 현재 실행되고 있는 프로세스들의 상태와, job 번호를 알 수 있다. Background -> Foreground $ fg %job번호 (ex> fg %2)

Foreground & Background $ bg %job번호 foreground 에서 background로 바꾸려면, 먼저 foreground로 실행되고 있는 프로세스를 ctrl + z로 중지 시킨 후 해야 한다.

gcc compiler 먼저 컴파일이란 인간이 이해할 수 있는 형식 언어(C, C++ 등)로 작성된 소스 코드를 CPU가 이해할 수 있는 기계어로 번역하는 과정 Linux에서는 기본적으로 gcc (GNU C Compiler)을 사용하여 작성된 코드를 컴파일하고 사용 gcc에도 다양한 옵션이 존재하며, 이번 시간에서는 아래의 3가지 경우만 설명하고 추가적으로 강의를 진행하면서 필요한 옵션들에 대해서 강의자료를 통해 보강할 예정 (더 궁금한 사람은 $ man gcc) $ gcc [target file name] Ex > gcc test.c a.out 이라는 실행 파일이 생김. $ gcc –o [executable file name] [target file name] Ex> gcc –o test test.c test 라는 실행 파일이 생김. 여러 개의 target file을 링킹할 수도 있음. $ gcc –c [target file name] Ex> gcc –c test.c test.o 라는 object 파일을 만듭니다.

Make 프로젝트가 커지면서 소스 파일의 개수가 많아지고, 각 파일에 대해 서로 다른 컴파일러와 어셈블러를 사용하고, 각기 다른 옵션을 적용해야 한다면 그것을 일일이 gcc 명령으로 처리하기에 문제 발생 따라서 이런 문제점들을 해결하기 위해 Make라는 유틸리티를 사용 Make는 파일 관련 유틸리티로 각 파일간의 종속 관계를 파악해 기술 파일(Makefile)에 기술된 대로 컴파일 혹은 쉘 명령을 순차적으로 내릴 수 있다. 프로젝트에 Make를 도입하면 컴파일 시간을 절약할 수 있고, 프로그램의 종속 구조를 파악하는데 용이하다.

Makefile 사용법 기본 구조 Target : Command에 의해서 수행되어 나온 결과 파일을 지정, 일반적으로 목적 파일이나 실행 파일 Dependent files : 생성되는 파일인 대상(Target)과 의존하는 파일들의 관계 Command : Dependent files의 내용이 바뀌거나 Target file이 존재하지 않을 경우 Command 부분이 실행됨 (Shell Command)

Makefile 사용법 간단한 Makefile 만들기 $gcc -c read.c $gcc -c write.c Shell 상에서 실행 파일 만들기 Ex) “test” program main.c, read.c, write.c로 구성되고, 모두 io.h을 사용 read.c는 defs.h라는 헤더 파일 사용 write.c는 buffer.h라는 헤더 파일을 사용  $gcc -c main.c  $gcc -c read.c  $gcc -c write.c  $gcc -o test main.o read.o write.o

Makefile 사용법 간단한 Makefile 만들기 Makefile 작성 test: main.o read.o write.o gcc -o test main.o read.o write.o   main.o : io.h main.c gcc -c main.c read.o : io.h defs.h read.c gcc -c read.c write.o : io.h buffer.h write.c gcc -c write.c clean : rm –rf *.o test

Makefile 사용법 변수 사용 Objects = main.o read.o write.o 주석 : #으로 시작   test: $(Objects) gcc -o test $(Objects) main.o : io.h main.c gcc -c main.c read.o : io.h defs.h read.c gcc -c read.c write.o : io.h buffer.h write.c gcc -c write.c clean : rm –rf *.o test 주석 : #으로 시작 변수: 값을 대입하기 위해서는 “=“을 사용 $(변수), ${변수} 형식을 통해 변수 사용

func1.c func2.c main.c func.h Example 다음의 간단한 함수를 앞에서 배운 예제를 참고하여 컴파일 후 실행시켜 보겠습니다. func1.c func2.c main.c func.h Include .h 함수 구현

func.h func1.c func2.c main.c Example 위의 예제 파일은 다음과 같이 간단하게 구성되어 있습니다. func.h func1.c func2.c main.c

Example GCC 위의 예제를 gcc를 이용해 컴파일 했습니다. 컴파일을 위해 명령어를 많이 쳐야 함을 확인할 수 있습니다.

Example Makefile 같은 예제를 Makefile을 만들어 컴파일하였습니다. $vim Makefile 을 통해 작성합니다. Makefile을 작성할 때 공백과 위의 제시된 문법에 주의해서 작성해야합니다.

Example Makefile $make 명령어를 입력하면, Makefile에 구현된 gcc 명령어가 한번에 입력되고 똑같은 결과를 얻을 수 있습니다.

memo.c calendar.c main.c diary.h memo.o calendar.o main.o diary Quiz 아래의 관계를 갖고, 다음과 같이 출력되는 프로그램을 구현하고 기술 파일(Makefile)을 이용해 컴파일 하시오. memo.c calendar.c main.c diary.h memo.o calendar.o main.o diary

Quiz 출력 예시 Makefile 내에는 clean 부분이 정의되어 있어야 한다.

과제1 (Makefile Implementation) Sorting Program Implementation Input.txt file의 내용을 읽어 3개의 sorting algorithms(bubble, insertion, selection)을 통해 정렬하는 Program을 구현한다. 2가지의 용도(I/O, Sorting)에 따라 각각 code를 구현한 뒤, Makefile을 통해 각 파일들을 Linking 시켜 sorting program을 구현 해야 함 global.h : 기본적인 헤더파일 include와 input.txt의 자료를 저장할 수 있는 Integer array buffer 정의 File I/O (global.h, io.h, io.c) io.h : read_file, write_file 함수의 프로토타입을 정의 io.c : input.txt의 내용을 읽어 Integer array로 저장하는 read_file 함수와 정렬된 내용을 output.txt file에 쓰는 write_file 함수의 동작을 구현 Sorting : 3가지의 sorting algorithms을 구현 (global.h, sort.h, sort.c) sort.h : bubbleSort, insertionSort, selectionSort 함수의 프로토타입을 정의 sort.c : Integer array에 대한 3가지의 sorting algorithms (bubble sort, insertion sort, selection sort)의 동작을 구현 Main : File pointer를 이용하여 input.txt file을 연 뒤, 내용을 읽어 정렬을 수행 (global.h, io.h, sort.h, main.c)

과제1 (Makefile Implementation) 전체 Linking 관계 global.h io.h sort.h Include Include io.c sort.c main.c I/O 관련 함수 구현 Sorting 함수 구현

과제1 (Makefile Implementation) 입출력 화면 Input.txt output.txt

과제1 (Makefile Implementation) Due : 2015/03/27 실습 수업시간 제출물 앞에 슬라이드의 전체 Linking 관계에 표시 된 각 파일 소스 보고서 맨 뒤에 첨부 보고서 표지 Makefile 사용법에 대한 요약 정리 과제 내용 요약 구현한 Makefile 설명 결과 및 분석 (결과 화면 첨부할 것) 후기 (느낀 점, 조교에게 바라는 점)

과제1 (Makefile Implementation) 문의사항 이름 : 김연준 E-Mail : yjuly0708@hanyang.ac.kr 이름 : 하태욱 E-Mail : rooterby@gmail.com 실습관련 질문 시 제목을 아래의 양식에 맞춰서 메일을 보내주세요. ex> [운영체제] 학번_이름 지연제출에 대해서는 감점이 있을 수 있음.

Kernel Source Download http://www.kernel.org 로 접속

Kernel Source Download Download kernel source Copy kernel URL link Kernel version : 3.18.9 (longterm)

Kernel Source Download Download kernel source “wget”을 통해 URL link로 kernel source code를 다운로드 $ sudo wget [URL address]