Real-Time Computing and Communications Lab., Hanyang University Real-Time Computing and Communications Lab., Hanyang University Operating System 3 주차 - About Linux - Real-Time Computing and Communications Lab. Hanyang University
2 Real-Time Computing and Communications Lab., Hanyang University 2 Real-Time Computing and Communications Lab., Hanyang University Contents Linux Shell Command Foreground & Background gcc compiler Makefile Quiz 과제 1 설명 Kernel Source Download
3 Real-Time Computing and Communications Lab., Hanyang University 3 Real-Time Computing and Communications Lab., Hanyang University Linux Shell Command man – Linux Programmer’s Manual 보기 Usage : man [name] Ex> $ man ls $ man fork 다양한 명령어와 시스템 콜 등에 대한 자세한 정보를 찾아 볼 수 있다.
4 Real-Time Computing and Communications Lab., Hanyang University 4 Real-Time Computing and Communications Lab., Hanyang University Linux Shell Command ls – 현대 폴더의 파일과 폴더 목록을 출력 Option : -a ( 숨김 파일도 모두 표시 ), -l ( 파일 상세정보 표시 ) Ex> $ ls $ ls –a $ ls –l $ ls –al $ ls../ $ ls /usr 그 밖의 Option 은 $ man ls 를 통해서 확인할 수 있다.
5 Real-Time Computing and Communications Lab., Hanyang University 5 Real-Time Computing and Communications Lab., Hanyang University Linux Shell Command cd – 디렉터리 이동 Usage : cd (target directory) 1. 현재 디렉터리기준, 다운로드 디렉터리로 이동 2. 상위 디렉터리로 이동 3. /usr/src/linux 디렉터리로 이동 4. 현재 디렉터리기준, kernel 디렉터리로 이동 . : 현재디렉터리,.. : 상위 디렉터리 의미
6 Real-Time Computing and Communications Lab., Hanyang University 6 Real-Time Computing and Communications Lab., Hanyang University Linux Shell Command mkdir – 디렉터리 생성 Usage : mkdir [directory name] rmdir – 디렉터리 삭제 Usage : rmdir [directory name] touch – 빈 파일 생성 Usage : touch [file name] rm – 파일 삭제 Usage : rm [fime name] rm –rf [directory name] ( 해당 폴더와 하위 파일까지 모두 지우는 명령 )
7 Real-Time Computing and Communications Lab., Hanyang University 7 Real-Time Computing and Communications Lab., Hanyang University Linux Shell Command
8 Real-Time Computing and Communications Lab., Hanyang University 8 Real-Time Computing and Communications Lab., Hanyang University Linux Shell Command cp – 파일복사 Usage : cp [original filename] [target filename] mv – 파일위치 변경 Usage : mv [original filename] [target filename / target location]
9 Real-Time Computing and Communications Lab., Hanyang University 9 Real-Time Computing and Communications Lab., Hanyang University Linux Shell Command find – 파일검색 Usage : find [path] [option] [target filename] … 등 다양한 포맷 가능 자세한 옵션은 $ man find 를 통해서 확인하고 사용한다. Ex> $ find [path] –name [filename]
10 Real-Time Computing and Communications Lab., Hanyang University 10 Real-Time Computing and Communications Lab., Hanyang University Linux Shell Command ps – 프로세스 목록 출력 Usage : ps [options]
11 Real-Time Computing and Communications Lab., Hanyang University 11 Real-Time Computing and Communications Lab., Hanyang University Linux Shell Command sudo – 일반 사용자가 루트 권한이 부분적으로 필요할 때 사용 Usage : sudo [option] [command] jobs – 실행중인 작업 출력
12 Real-Time Computing and Communications Lab., Hanyang University 12 Real-Time Computing and Communications Lab., Hanyang University Linux Shell Command top – 시스템 사용량 확인
13 Real-Time Computing and Communications Lab., Hanyang University 13 Real-Time Computing and Communications Lab., Hanyang University 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 : 실행된 명령어
14 Real-Time Computing and Communications Lab., Hanyang University 14 Real-Time Computing and Communications Lab., Hanyang University Foreground & Background 프로세스를 실행하는 방법은 크게 2 가지가 있다. Foreground 기본적으로 모든 프로세스는 foreground 로 실행된다. 키보드와 연결되어 있으며 결과를 직접적으로 스크린 혹은 터미널 창에 출 력한다. 꽤 긴 시간 동안 동작하는 프로그램을 실행시켰을 경우에는 그 시간 동안 터미널을 이용할 수 없게 되므로, 곤란한 경우가 생기게 된다. Background 키보드와 연결되지 않은 상태로 실행된다. 만약 이 프로세스가 키보드 입력을 필요로 할 경우에는, 입력을 기다린다. Background 로 프로세스를 실행하는 것의 장점은 한 프로세스가 동작하 고 있는 동안에도 다른 프로세스를 실행시킬 수 있다는 점이다. $./a.out & 를 통해 백그라운드로 실행할 수 있다.
15 Real-Time Computing and Communications Lab., Hanyang University 15 Real-Time Computing and Communications Lab., Hanyang University Foreground & Background Example> matrix source code 단순하게 100 x 100 행렬을 10^5 제곱하는 함수. 참고로 아래 프로그램은 input_matrix 의 초기화가 생략되어 있습니다.
16 Real-Time Computing and Communications Lab., Hanyang University 16 Real-Time Computing and Communications Lab., Hanyang University Foreground & Background Example> Foreground & Background Foreground 실행 -> 프로세스가 종료할 때 까지 다른 작업 못함 Background 실행 -> 다른 작업 가능 “ctrl + z” 프로세스 중지 -> foreground 프로세스 중지
17 Real-Time Computing and Communications Lab., Hanyang University 17 Real-Time Computing and Communications Lab., Hanyang University Foreground & Background Example> Foreground & Background command “jobs” 현재 실행되고 있는 프로세스들의 상태와, job 번호를 알 수 있다. Background -> Foreground $ fg %job 번호 (ex> fg %2)
18 Real-Time Computing and Communications Lab., Hanyang University 18 Real-Time Computing and Communications Lab., Hanyang University Foreground & Background Foreground -> Background $ bg %job 번호 foreground 에서 background 로 바꾸려면, 먼저 foreground 로 실행되고 있는 프로세스를 ctrl + z 로 중지 시킨 후 해야 한다.
19 Real-Time Computing and Communications Lab., Hanyang University 19 Real-Time Computing and Communications Lab., Hanyang University 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 파일을 만듭니다.
20 Real-Time Computing and Communications Lab., Hanyang University 20 Real-Time Computing and Communications Lab., Hanyang University Make 프로젝트가 커지면서 소스 파일의 개수가 많아지고, 각 파일에 대해 서 로 다른 컴파일러와 어셈블러를 사용하고, 각기 다른 옵션을 적용해야 한다면 그것을 일일이 gcc 명령으로 처리하기에 문제 발생 따라서 이런 문제점들을 해결하기 위해 Make 라는 유틸리티를 사용 Make 는 파일 관련 유틸리티로 각 파일간의 종속 관계를 파악해 기술 파일 (Makefile) 에 기술된 대로 컴파일 혹은 쉘 명령을 순차적으로 내릴 수 있다. 프로젝트에 Make 를 도입하면 컴파일 시간을 절약할 수 있고, 프로그 램의 종속 구조를 파악하는데 용이하다.
21 Real-Time Computing and Communications Lab., Hanyang University 21 Real-Time Computing and Communications Lab., Hanyang University Makefile 사용법 기본 구조 Target : Command 에 의해서 수행되어 나온 결과 파일을 지정, 일반적으로 목적 파일이나 실행 파일 Dependent files : 생성되는 파일인 대상 (Target) 과 의존하는 파일들의 관계 Command : Dependent files 의 내용이 바뀌거나 Target file 이 존재하지 않 을 경우 Command 부분이 실행됨 (Shell Command)
22 Real-Time Computing and Communications Lab., Hanyang University 22 Real-Time Computing and Communications Lab., Hanyang University 간단한 Makefile 만들기 Shell 상에서 실행 파일 만들기 Ex) “test” program main.c, read.c, write.c 로 구성되고, 모두 io.h 을 사용 read.c 는 defs.h 라는 헤더 파일 사용 write.c 는 buffer.h 라는 헤더 파일을 사용 Makefile 사용법 $gcc -c main.c $gcc -c read.c $gcc -c write.c $gcc -o test main.o read.o write.o
23 Real-Time Computing and Communications Lab., Hanyang University 23 Real-Time Computing and Communications Lab., Hanyang University 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
24 Real-Time Computing and Communications Lab., Hanyang University 24 Real-Time Computing and Communications Lab., Hanyang University 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
25 Real-Time Computing and Communications Lab., Hanyang University 25 Real-Time Computing and Communications Lab., Hanyang University Example 다음의 간단한 함수를 앞에서 배운 예제를 참고하여 컴파 일 후 실행시켜 보겠습니다. func1.c func2.c main.c func.h Include.h 함수 구현
26 Real-Time Computing and Communications Lab., Hanyang University 26 Real-Time Computing and Communications Lab., Hanyang University Example 위의 예제 파일은 다음과 같이 간단하게 구성되어 있습니 다. func.h func1.c func2.c main.c
27 Real-Time Computing and Communications Lab., Hanyang University 27 Real-Time Computing and Communications Lab., Hanyang University Example GCC 위의 예제를 gcc 를 이용해 컴파일 했습니다. 컴파일을 위해 명령어를 많이 쳐야 함을 확인할 수 있습니다.
28 Real-Time Computing and Communications Lab., Hanyang University 28 Real-Time Computing and Communications Lab., Hanyang University Example Makefile 같은 예제를 Makefile 을 만들어 컴파일하였습니다. $vim Makefile 을 통해 작성합니다. Makefile 을 작성할 때 공백과 위의 제시된 문법에 주의해서 작성해 야합니다.
29 Real-Time Computing and Communications Lab., Hanyang University 29 Real-Time Computing and Communications Lab., Hanyang University Example Makefile $make 명령어를 입력하면, Makefile 에 구현된 gcc 명령어 가 한번에 입력되고 똑같은 결과를 얻을 수 있습니다.
30 Real-Time Computing and Communications Lab., Hanyang University 30 Real-Time Computing and Communications Lab., Hanyang University Quiz 아래의 관계를 갖고, 다음과 같이 출력되는 프로그램을 구 현하고 기술 파일 (Makefile) 을 이용해 컴파일 하시오. memo.c calendar.c main.c diary.h memo.o calendar.o main.o diary
31 Real-Time Computing and Communications Lab., Hanyang University 31 Real-Time Computing and Communications Lab., Hanyang University Quiz 출력 예시 Makefile 내에는 clean 부분이 정의되어 있어야 한다.
32 Real-Time Computing and Communications Lab., Hanyang University 32 Real-Time Computing and Communications Lab., Hanyang University 과제 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 : io.c 의 함수를 이용해 파일 내용을 읽고, option 에 따라 sort.c 에 구현된 정 렬을 수행한 뒤 output.txt 파일에 정렬된 결과를 출력 (global.h, io.h, sort.h, main.c)
33 Real-Time Computing and Communications Lab., Hanyang University 33 Real-Time Computing and Communications Lab., Hanyang University 과제 1 (Makefile Implementation) 전체 Linking 관계 global.h io.h sort.h main.c io.c sort.c Include I/O 관련 함수 구현 Include Sorting 함수 구현 main.o io.o sort.o sorting
34 Real-Time Computing and Communications Lab., Hanyang University 34 Real-Time Computing and Communications Lab., Hanyang University 과제 1 (Makefile Implementation) 입출력 화면 Input.txt output.txt
35 Real-Time Computing and Communications Lab., Hanyang University 35 Real-Time Computing and Communications Lab., Hanyang University 과제 1 (Makefile Implementation) Due : 2015/03/27 실습 수업시간 제출물 앞에 슬라이드의 전체 Linking 관계에 표시 된 각 파일 소스 보고서 맨 뒤에 첨부 보고서 표지 Makefile 사용법에 대한 요약 정리 과제 내용 요약 구현한 Makefile 설명 결과 및 분석 ( 결과 화면 첨부할 것 ) 후기 ( 느낀 점, 조교에게 바라는 점 )
36 Real-Time Computing and Communications Lab., Hanyang University 36 Real-Time Computing and Communications Lab., Hanyang University 과제 1 (Makefile Implementation) 문의사항 이름 : 김연준 이름 : 하태욱 실습관련 질문 시 제목을 아래의 양식에 맞춰서 메일을 보내주세요. ex> [ 운영체제 ] 학번 _ 이름 지연제출에 대해서는 감점이 있을 수 있음.
37 Real-Time Computing and Communications Lab., Hanyang University 37 Real-Time Computing and Communications Lab., Hanyang University Kernel Source Download Kernel Source Download 로 접속
38 Real-Time Computing and Communications Lab., Hanyang University 38 Real-Time Computing and Communications Lab., Hanyang University Kernel Source Download Download kernel source Copy kernel URL link Kernel version : (longterm)
39 Real-Time Computing and Communications Lab., Hanyang University 39 Real-Time Computing and Communications Lab., Hanyang University Kernel Source Download Download kernel source “wget” 을 통해 URL link 로 kernel source code 를 다운로드 $ sudo wget [URL address]