Operating System 3 주차 - About Linux - Real-Time Computing and Communications Lab. Hanyang University jtlim@rtcc.hanyang.ac.kr yschoi@rtcc.hanyang.ac.kr shpark@rtcc.hanyang.ac.kr
Contents Linux Shell Command Foreground & Background gcc compiler Makefile Quiz Kernel Source Download 과제1 설명 2 2
Linux Shell Command man Linux Programmer s Manual 보기 Usage : man [name] Ex> $ man ls $ man fork 다양한명령어와시스템콜등에대한자세한정보를찾아볼수있다. 3 3
Linux Shell Command ls 현대폴더의파일과폴더목록을출력 Option : -a ( 숨김파일도모두표시 ), -l ( 파일상세정보표시 ) Ex> $ ls $ ls a $ ls l $ ls al $ ls../ $ ls /usr 그밖의 Option 은 $ man ls 를통해서확인할수있다. 4 4
Linux Shell Command cd 디렉터리이동 Usage : cd (target directory) 1. 현재디렉터리기준, 다운로드디렉터리로이동 2. 상위디렉터리로이동 3. /usr/src/linux 디렉터리로이동 4. 현재디렉터리기준, kernel 디렉터리로이동. : 현재디렉터리,.. : 상위디렉터리의미 5 5
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] ( 해당폴더와하위파일까지모두지우는명령 ) 6 6
Linux Shell Command 7 7
Linux Shell Command cp 파일복사 Usage : cp [original filename] [target filename] mv 파일위치변경 Usage : mv [original filename] [target filename / target location] 8 8
Linux Shell Command find 파일검색 Usage : find [path] [option] [target filename] 등다양한포맷가능 자세한옵션은 $ man find를통해서확인하고사용한다. Ex> $ find [path] name [filename] 9 9
Linux Shell Command ps 프로세스목록출력 Usage : ps [options] 10 10
Linux Shell Command sudo 일반사용자가루트권한이부분적으로필요할때사용 Usage : sudo [option] [command] jobs 실행중인작업출력 11 11
Linux Shell Command top 시스템사용량확인 12 12
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 : 실행된명령어 13 13
Foreground & Background 프로세스를실행하는방법은크게 2 가지가있다. Foreground 기본적으로모든프로세스는 foreground 로실행된다. 키보드와연결되어있으며결과를직접적으로스크린혹은터미널창에출력한다. 꽤긴시간동안동작하는프로그램을실행시켰을경우에는그시간동안터미널을이용할수없게되므로, 곤란한경우가생기게된다. Background 키보드와연결되지않은상태로실행된다. 만약이프로세스가키보드입력을필요로할경우에는, 입력을기다린다. Background 로프로세스를실행하는것의장점은한프로세스가동작하고있는동안에도다른프로세스를실행시킬수있다는점이다. $./a.out & 를통해백그라운드로실행할수있다. 14 14
Foreground & Background Example> matrix source code 단순하게 100 x 100 행렬을 10^5 제곱하는함수. 참고로아래프로그램은 input_matrix 의초기화가생략되어있습니다. 15 15
Foreground & Background Example> Foreground & Background Foreground 실행 -> 프로세스가종료할때까지다른작업못함 Background 실행 -> 다른작업가능 ctrl + z 프로세스중지 -> foreground 프로세스중지 16 16
Foreground & Background Example> Foreground & Background command jobs 현재실행되고있는프로세스들의상태와, job 번호를알수있다. Background -> Foreground $ fg %job 번호 (ex> fg %2) 17 17
Foreground & Background Foreground -> Background $ bg %job 번호 foreground 에서 background 로바꾸려면, 먼저 foreground 로실행되고있는프로세스를 ctrl + z 로중지시킨후해야한다. 18 18
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 파일을만듭니다. 19 19
Make 프로젝트가커지면서소스파일의개수가많아지고, 각파일에대해서로다른컴파일러와어셈블러를사용하고, 각기다른옵션을적용해야한다면그것을일일이 gcc 명령으로처리하기에문제발생 따라서이런문제점들을해결하기위해 Make 라는유틸리티를사용 Make 는파일관련유틸리티로각파일간의종속관계를파악해기술파일 (Makefile) 에기술된대로컴파일혹은쉘명령을순차적으로내릴수있다. 프로젝트에 Make 를도입하면컴파일시간을절약할수있고, 프로그램의종속구조를파악하는데용이하다. 20 20
Makefile 사용법 기본구조 Target : Command 에의해서수행되어나온결과파일을지정, 일반적으로목적파일이나실행파일 Dependent files : 생성되는파일인대상 (Target) 과의존하는파일들의관계 Command : Dependent files 의내용이바뀌거나 Target file 이존재하지않을경우 Command 부분이실행됨 (Shell Command) 21 21
Makefile 사용법 간단한 Makefile 만들기 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 22 22
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 23 23
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 24 24
Example 다음의간단한함수를앞에서배운예제를참고하여컴파일후실행시켜보겠습니다..h 함수구현 func.h Include func1.c func2.c main.c 25 25
Example 위의예제파일은다음과같이간단하게구성되어있습니다. func1.c func.h func2.c main.c 26 26
Example GCC 위의예제를 gcc 를이용해컴파일했습니다. 컴파일을위해명령어를많이쳐야함을확인할수있습니다. 27 27
Example Makefile 같은예제를 Makefile 을만들어컴파일하였습니다. $vim Makefile 을통해작성합니다. Makefile 을작성할때공백과위의제시된문법에주의해서작성해야합니다. 28 28
Example Makefile $make 명령어를입력하면, Makefile 에구현된 gcc 명령어가한번에입력되고똑같은결과를얻을수있습니다. 29 29
Quiz 아래의관계를갖고, 다음과같이출력되는프로그램을구현하고기술파일 (Makefile) 을이용해컴파일하시오. diary.h memo.c calendar.c main.c memo.o calendar.o main.o diary 30 30
Quiz 출력예시 Makefile 내에는 clean 부분이정의되어있어야한다. 31 31
Kernel Source Download Kernel Source Download http://www.kernel.org 로접속 32 32
Kernel Source Download Download kernel source Copy kernel URL link Kernel version : 3.18.27 (longterm) 33 33
Kernel Source Download Download kernel source wget 을통해 URL link 로 kernel source code 를다운로드 $ sudo wget [URL address] 34 34
Kernel Compile Required tools to build kernel build-essential : gcc 등프로그램개발을위한도구 Installation : $ sudo apt-get install build-essential libncurses5-dev : text 환경에서윈도우형태의 GUI 를표현해주는라이브러리, menuconfig 를위해필요 Installation : $ sudo apt-get install libncurses5-dev 35 35
Kernel Compile - 수정 Kernel configuration Compile menuconfig $ cd /usr/src/linux $ sudo make menuconfig 36 36
Kernel Compile - 수정 Kernel configuration 37 37
Kernel Compile Build Kernel image and modules Build kernel image Usage : $ sudo make Module compilation Usage : $ sudo make modules Module installation Usage : $ sudo make modules_install Kernel installation Usage : $ sudo make install 38 38
Kernel Compile Using multi-core for building kernel 자신의 CPU 의 core 개수확인 Usage : $ cat /proc/cpuinfo grep cores make 에 -j<n> option 추가 Usage : $ sudo make -j<n> n : 일반적으로 n = 자신의 cpu개수 + round(cpu개수 * 20%) Example : cpu cores = 2이면 n = 2 + round(0.4) = 2 39 39
Previous Linux Booting $ sudo vim /etc/default/grub 여기서 grub는 GNU 프로젝트의부트로더이다. 아래의그림처럼 # 을이용해주석처리한다. $ sudo update-grub $ sudo reboot 40 40
Previous Linux Booting booting 시다음과같이 version 을선택할수있게된다. 41 41
Kernel Version Check $ uname r 혹은 uname a 를통해현재커널버전을확인할수있다. 42 42
과제 1 (Kernel Build) Kernel Build Kernel.org 홈페이지에서 3.18.27 커널을다운로드하여 Make 하여확인하기, 커널이초기에부팅하였을경우 dmesg 를통해 Hello Kernel : 이름 을확인할수있도록수정하여 Make 하기. Cscope 와 Ctags 를활용, 수정해야될소스는커널버전 /Init/main.c 의 start_kernel 에서수정하면확인이가능하다. 43 43
과제 1 (Kernel Build) Example> 44 44
과제 1 (Kernel Build) Due : 2016/03/25 실습수업시간 보고서 표지 결과파일 과제내용요약 정상적으로빌드하는과정사진및설치한결과화면 ( uname r ) 과 cat < /var/log/dmesg > txt 로학생이름이정확하게출력되는화면을보고서에첨부 다음주실습시간때직접 Virtual Machine 혹은멀티부트가설치된 PC 에서직접설치하여결과검사 타 PC 에설치를위해 System.map, bzimage, Module 파일을 USB 에가지고올것. 45 45
과제 1 (Kernel Build) 문의사항 이름 : 임정택 Tel : 010-4780 - 9294 E-Mail : jtlim@rtcc.hanyang.ac.kr 이름 : 최윤식 Tel : 010-7970 - 0906 E-Mail : yschoi@rtcc.hanyang.ac.kr 이름 : 박성현 Tel : 010-6612 - 8957 E-Mail : shpark@rtcc.hanyang.ac.kr 실습관련질문시제목을아래의양식에맞춰서메일을보내주세요 ex> [ 운영체제 ] 학번 _ 이름 지연제출에대해서는감점이있을수있음. 46 46