Check 학습기간후복습하기가능합니다 1.1, 1.2 수정된 Quiz 다시해보세요 자기소개게시판추천왕을모십니다 설문은중간시험까지쭈욱계속됩니다 모바일콘텐츠를원하시나요? telnet 117.16.244.59» Windows 명령프롬프트또는 Linux 셸터미널에서 telnet 117.16.244.59 입력 login: s 자기학번 Password: s**** vi 편집기는» http://marvel.incheon.ac.kr/~mysung» 2012 년 2 학기 unixlinux programming 5. 유틸리티를참고하세요 2.1
Chapter 2. 시스템구조 (System Structures) 1. 서비스 (Operating-System Services) 2. 사용자인터페이스 (User Operating-System Interface) 3. 시스템호출 (System Calls) 4. 시스템호출의유형 (Types of System Calls) 5. 시스템프로그래밍 (System Programs) 6. 설계및구현 (Operating-System Design and Implementation) 7. 구조 (Operating-System Structure) 8. 가상기계 (Virtual Machines) 9. 생성 (Operating-System Generation) 10. 시스템부트 (System Boot) 2.2
OS 6 팩 프로세스메모리 저장장치 입출력 보호보안네트워크 2.3
시스템구성 (System Components) 프로세스관리 (Process Management) 메모리관리 (Main-Memory Management) 저장장소관리 (Storage Management) 입출력시스템관리 (I/O System Management) 보호와보안관리 (Protection and Security) 네트워크 ( 분산 ) 관리 (Distributed System) 2.4
서비스 (Operating-System Services) 프로그램수행 (programs execution) 입출력작업 (I/O operation): file I/O, device I/O 파일시스템조작 : read/write/create/delete files 통신 (communication)» in the same system shared memory» in the different system message passing 오류탐지 (error detection): I/O, memory, network, program errors 자원할당 (resource allocation): multiusers, multiprogramming 회계 (accounting): usage statistics 보호 (protection)» 보호 (protection) : 정보보호, process 보호, 자원보호, 시스템보호» 보안 (security) : password 2.5
서비스개관 일반사용자의 OS services 이용방법» 명령해석기 (Command Interpreter)» 그래피컬사용자인터페이스 (Graphical User Interface) 프로그램개발자의 OS services 이용방법» 시스템호출 (System Calls) : assembly language high-level language» 시스템프로그래밍 (System Programming) 2.6
사용자인터페이스 (Operating-System Interface) 명령해석기 (Command Interpreter)» 다음명령문받아실행 제어카드해석기 (control-card interpreter) 명령라인해석기 (command-line interpreter): MS-DOS command.com 셸 (shell)» user 과 OS 사이의 interface 로서다음명령을받아실행 ( 프로세스관리 ~ 분산 )» 위치 Kernel 안에 : 항상존재 (MS-DOS 의내부명령 ) $ man builtins 보조기억장치에 : 필요할때만실행 (MS-DOS 의외부명령, Unix)» sophisticated user 는복잡하고배우기어려워도 Unix shells 같은강력한명령해석기선호 그래피컬사용자인터페이스 (Graphical User Interface)» 1973 최초 user friendly GUI: Xerox Palo Alto 컴퓨터» 1980 년대 : Macintosh 의 mouse-based, icon-based Aqua 인터페이스» Microsoft Windows 가채택» Unix/Linux GNOME(GNU Network Object Model Environment) KDE(K Desktop Environment) 2.7
Bourne Shell Command Interpreter 2.8
The Mac OS X GUI 2.9
시스템호출 (System Calls) Process OS 의기능 system calls $ vi /usr/include/asm/unistd_32.h 고급언어로직접호출 : C, Bliss, BCPL, PL/360 ( 예 ) fd = open( file, 0); 0: r, 1: w, 3:rw nread = read(fd, buf, n); 시스템호출에필요한파라미터전달 1. 레지스터전달 fastcall 2. 파라미터블록또는테이블의주소를전달 ( 그림 2.4) 3. 스택으로전달 asmlinkage #define fastcall attribute ((regparm(3))) #define asmlinkage CPP_ASMLINKAGE attribute ((regparm(0))) 2.10
Table 로매개변수전달 2.11
시스템호출과정 /usr/include/asm/unistd_32.h /usr/src/kernels/linux-2.6.38.6/arch/x86/include/asm/unistd_32.h main { syscall ( NR_newsyscall); } syscall() { movl 349, %eax int $0x80 } IDT: Interrupt Descriptor Table = IVT: Interrrupt Vector Table 0x0 divide_error() degug() nmi() IDT(IVT) 0x80 system_call() 0 1 2 3 4 ENTRY(system_call) /*arch/x86/kernel/entry_32.s 496*/ SAVE_ALL. call *sys_call_table(,%eax,4). ENTRY(sys_call_table) /*arch/x86/kernel/syscall_table_32.s*/ sys_restart_syscall() sys_exit() sys_fork() sys_read() sys_write() 349 sys_newsyscall() /*real handler*/ asmlinkage int sys_newsyscall() { printk( ); } 2.12
시스템호출이사용되는예 한파일의내용을다른파일로복사하는일련의시스템호출 $./mycp $ input file name: a $ output filename: b 입력파일이름획득화면에프롬프트출력입력받아들임출력파일이름획득화면에프롬프트출력입력받아들임입력파일열기파일이존재하지않을경우, 비정상적으로종료출력파일생성파일이존재할경우, 비정상적으로종료루프입력파일로부터읽어들임출력파일에씀읽기가실패할때까지입력파일닫기출력파일닫기화면에완료메시지출력정상적으로종료 2.13
(Lab.1) 시스템호출을사용하는 mycp.c 프로그래밍 1. Hint Programs coding & compile & run 1 hint1.c 2 hint2.c 3 hint3.c 2. mycp.c coding & compile & run & submit 소스파일 & 실행파일 에러메시지를제외한모든연산을시스템호출을사용하여구현하세요 1 2 3 4 5 입력파일이름획득 출력파일이름획득 입력파일열기 출력파일생성 입력파일로부터읽어들임 6 출력파일에씀 3. 제출방법» 2 Electronic versions: 1 2 이러닝제출 http://cyber.incheon.ac.kr 117.16.244.59 ( 집에서도접속가능합니다 ) 지정디렉토리 /home/os2013hwa 또는 os2013hwb 에자기학번의디렉토리만들고소스파일과실행파일복사 2.14
vi 를이용한기본텍스트편집 커서의이동» hjkl 이용 H J K L [Vi mode] 4j» G 명령으로원하는행으로이동 7G G : 마지막행으로» 화면이동 ^F ^B ^D ^U 텍스트추가, 삽입, 수정 a(append) i(insert) o(open) O(Open) R(Replace) 텍스트의삭제및취소 (undo) x(exclude?) d(delete) dw db d$ d^ r(replace) u(update) U(Update) 최근명령재실행. 파일관리» Vi 를벗어나지않고저장하기 : :w» 저장않고끝내기 : :q!» 또다른파일편집 : :e xx 또는 :e! xx» 다른파일을읽어와덧붙이기 : :r xx http://marvel.inchon.ac.kr/ 의 Information 참조 2.15
append insert open replace ( 실습 ) $ vi rain a A esc i I esc o O esc R esc $ vi filename $ :q! ( 기록않음 ) ~ ~ vi mode(vi 명령모드 ) ~ ZZ( 기록 ) :wq :x :syntax on off x dd r 커서이동 H J K L Unix/Linux 2.16
(hint1.c) #include <stdio.h> #include <unistd.h> #define NAME_LENGTH 25 int main(void) { char in_file[name_length], out_file[name_length]; FILE *in, *out; int c; printf("enter source file name: "); scanf("%s",in_file); printf("enter destination file name: "); scanf("%s",out_file); if ( (in = fopen(in_file,"r")) == NULL) { fprintf(stderr,"cannot open %s for reading\n",in_file); return -1; } if ( (out = fopen(out_file,"w")) == NULL) { fprintf(stderr,"cannot open %s for writing\n",out_file); return -1; } while ( (c = getc(in))!= EOF) putc(c,out); fclose(in); fclose(out); } 시스템호출확인 $ vi /usr/include/asm/unistd_32.h $ gcc hint1.c o hint1 $./hint 2.17
(hint2.c) 3/28 야 #include <stdio.h> #include <stdlib.h> #define PERMS 0644 main(int argc, char *argv[]) { int f1, f2, n; char buf[bufsiz]; } if (argc!= 3) printf("usage: %s a b\n", argv[0]); if ((f1 = open(argv[1], O_RDONLY, 0)) == -1) printf("can't open %s\n", argv[1]); if ((f2 = open(argv[2], O_RDWR O_CREAT O_APPEND )) == -1) printf("can't creat %s\n", argv[2]); while ((n = read(f1, buf, BUFSIZ)) > 0) if (write(f2, buf, n)!= n) printf("write errono"); close(f1); close(f2); exit(0); 2.18 $ gcc hint2.c o hint2 $./hint2 xx yy $ man f read $ man f write 수정 1: #include <fcntl.h> 수정 2: PERMS 수정 3: O_TRUNC 수정 4: O_EXCL
(hint3.c) 3/28 야 #include <stdio.h> main() { int n; char* message="enter file name: "; char filename[25]; write(1, message, 18); n=read(0, filename, 25); write(1, filename, n); //filename[n]='\0'; //filename[n-1]='\0'; printf("filename is \"%s\"\n", filename); } $ gcc hint3.c o hint3 $ hint3 수정 1: 첫번째주석문적용수정 2: 두번째주석문적용 $ vi /usr/include/unistd.h (211행) #define STDIN_FILENO 0 /* Standard input. */ #define STDOUT_FILENO 1 /* Standard output. */ #define STDERR_FILENO 2 /* Standard error output. */ 2.19
HW 제출을위한숙제방만들기 $ cd /home/os2013hwa ( 또는 os2013hwb) $ mkdir 자기학번 (s 없이숫자만 ) $ chmod 700 자기학번 $ cd 자기학번 $ cp ~ 자기아이디 /osprog/mycp.c*. ( 점 ) 2.20
HW 제출을위한 ftp (Linux Windows) 시스템등록정보 고급 환경변수 새로만들기 PATH=C:\WINDOWS\system32 윈도우즈명령프롬프트에서 C:\>D: [Enter] D:\>ftp 117.16.244.59 Connected to 117.16.244.59. 220 (vsftpd 2.3.4) User (117.16.244.59:(none)): 자기아이디 331 Please specify the password. Password: 230 Login successful. ftp> binary 200 Switching to Binary mode. ftp> cd osprog 250 Directory successfully changed. ftp> ls 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. REMOTEHOST=10.80.77.247 REMOTEHOST=117.16.244.61 mycp mycp.c 226 Directory send OK. ftp: 109 bytes received in 0.00Seconds 109000.00Kbytes/sec. ftp: 109 bytes received in 0.00Seconds 109000.00Kbytes/sec. ftp> mget mycp* 200 Switching to Binary mode. mget mycp? y 200 PORT command successful. Consider using PASV. 150 Opening BINARY mode data connection for mycp (5830 bytes). 226 Transfer complete. ftp: 5830 bytes received in 0.00Seconds 5830000.00Kbytes/sec. mget mycp.c? y 200 PORT command successful. Consider using PASV. 150 Opening BINARY mode data connection for mycp.c (1102 bytes). 226 Transfer complete. ftp: 1102 bytes received in 0.00Seconds 1102000.00Kbytes/sec. ftp> bye 221 Goodbye. D:\> 2.21
(C 언어보충 ) 명령라인매개변수 (Command-line Arguments) Source code $ cat myecho.c #include <stdio.h> main(int argc, char *argv[]) argv: { int i; for (i = 1; i < argc; i++) printf("%s%s", argv[i], (i < argc-1)? " " : ""); printf("\n"); return 0; } Compile & Run $ gcc myecho.c o myecho $./myecho hello world! Output hello world! argc & argv argc=3 argv[0]:./myecho argv[1]: hello argv[2]: world! 0./myecho\0 hello\0 world!\0 2.22
(C 언어보충 ) argc & argv: optional flag necho.c ( 숫자 option 처리 ) $ cat necho.c #include <stdio.h> main(int argc, char *argv[]) { int i, j, n=0; for (i = 1; i < argc; i++) { if (argv[i][0] == '-') n = atoi(&argv[i][1]); } for (i = 1; i < argc; i++) for (j = 1; j <= n; j++) if (argv[i][0]!= '-') printf("%s%s", argv[i], (i<argc-1 j<n)? " " : ""); $ gcc necho.c o necho $./necho -2 a b $./necho a b -3 c $./necho a b c d -4 } printf("\n"); return 0; 2.23
Example of Standard API Consider the ReadFile() function in the Win32 API (Application Programming Interface) a function for reading from a file A description of the parameters passed to ReadFile()» HANDLE file 읽을파일» LPVOID buffer 데이터가읽혀지거나쓸데이터가저장된버퍼» DWORD bytestoread 버퍼로읽혀질바이트수» LPDWORD bytesread 마지막으로읽혀진바이트수» LPOVERLAPPED ovl Overlapped I/O 가사용중임을표시 2.24
API System Call OS Relationship 2.25
Standard C Library Example C program invoking printf() library call, which calls write() system call 2.26
Solaris 10 dtrace Following System Call 2.27
시스템호출 5 개그룹» Linux: /usr/include/asm/unistd_32.h» Unix: /usr/include/sys/syscall.h 1프로세스제어 (process control) 2화일관리 (file manipulation) 3장치관리 (device manipulation) 4정보유지보수 (information maintenance) 5통신 (communication) 6보호 (protection) 2.28
Examples of Windows and Unix System Calls 2.29
시스템호출 6 개그룹 1 1 프로세스와작업제어 (Process and Job Control)» 작업제어를위한시스템호출들 프로세스제어 (load, execute) ld, exec 프로세스생성 (create process or submit job) fork, vfork, clone 프로세스속성획득과설정 (get process attribute and set process attribute) getpid, setpid, getpgrp, setpgrp 프로세스종료 (terminate process) exit, abort 시간대기 (wait time) sleep, pause 사건대기 (wait event) wait, pause 사건신호 (signal event) kill 기억장치할당및해제 malloc, free» 디버깅을위한시스템호출들 od, dump, dtrace, ptrace» 시간프로필 (time profile): 특정부분수행시간의양추적 time $ time ls» 프로세스실행비교 ( 그림 2.7, 그림 2.8) single-tasking system MS-DOS: 새프로세스생성없음» TSR (Terminate and Stay Resident) 프로그램 제한적동시수행 : hooks an interrupt 후 TSR system call 과함께 exit: 자신의 subroutine 을 interrupt routine 으로설정하여 interrupt 를가로챔 TSR system call: MS-DOS 가덮어쓰지못하게함 multitasking system UNIX: fork 로새프로세스생성 fork + exec 2.30
MS-DOS 실행 At System Start-up Running a Program 2.31
FreeBSD 다중프로그램수행 2.32
시스템호출 6 개그룹 2 2 화일관리 (File Manipulation)» 생성 (create) creat» 삭제 (delete) unlink» 열기 (open), 읽기 (read), 쓰기 (write), 재위치 (reposition), 닫기 (close) open, read, write, lseek, close» 화일속성획득과설정 (get file attribute and set file attribute) fcntl 3 장치관리 (Device Management)» 요구 (request) ioctl, mount» 열기 / 닫기 (open/close) open, close» 읽기 / 쓰기 (read/write) read, write» 재위치 (reposition) ioctl, lseek 4 정보유지관리 (information maintenance)» time time» date (syscall) gettimeofday, settimeofday, (shell) date» 사용가능 memory 크기등 (syscall) getrusage, quotactl (shell) du, df, quotacheck 2.33
시스템호출 6 개그룹 3 5 통신 (Communication)» 메시지전송모델 (message-passing model ) get hostid, get processid gethostname, getpid open connection, close connection socket, connect, close read message, write message read, write daemon(accept connection) accept» 공유기억장치모델 (shared-memory model) 다른프로세스에소유된기억장소에대한접근을위한것 map memory shmget, shmat, shmdt, shmctl 6 보호 (protection)» 파일접근권한 set permission, get permission chmod, umask, chown» 호스트접근허가권한 allow user, deny user usermod, passwd» 서비스접근허가권한 cron, at cron.allow, cron.deny, at.allow. at.deny 2.34
통신모델 (Communication Models) Message Passing Shared Memory 차이점? 2.35
시스템프로그램 (System Programs) 시스템프로그램의종류» 파일조작 : create, delete, copy, rename, print, dump, list..» 상태정보 : date, time, memory...» 파일수정 : text editors» 프로그래밍언어지원 : compilers, assemblers, interpreters» 프로그램적재와수행 : absolute loader, relocatable loaders, linkage editors, overlay loader, debugging tool» 통신 :e-mail, remote login, telnet 명령해석기 : 가장중요한시스템프로그램» 자체가실행코드가짐 : MS-DOS 의 command.com 명령첨가하면재컴파일» 실행될파일인식그것에매개변수전달 : Unix ( 예 ) delete G: delete 실행파일적재후실행 작고새명령첨가쉬움 $ man builtins $ ls /bin /sbin wc -w 2.36
시스템구조 (System Structure) 1 1 간단한구조 (Simple Structure)» MS-DOS (Microsoft Disc Operating System) 최소의메모리공간최대기능 덜모듈화 ROM BIOS (Read Only Memory Basic Input Output System) 직접이용 : low level 기능직접접근으로전체시스템 crashes 가능 하드웨어보호없음 : dual mode 없음 (Intel 8088 has no mode bit)» 초기 UNIX 구성» Kernel: bulky» Systems programs Kernel 의분할과축소» Mach (microkernel: small set of necessary primitives)» AIX (Advanced Interactive executive) : 2 kernel part System Call : programmer interface Shell : user interface 2.37
MS-DOS 계층구조 2.38
UNIX 시스템구조 2.39
시스템구조 (System Structure) 2 2 계층적접근 (Layered Approach)» modular operating system ( 모듈화된 ) 강력한제어 내부시스템변경의자유로움 정보은폐 (information hiding) 각계층 = 추상객체 (abstract object) 구현 : 자료가캡슐화 (encapsulation) 된것 자신보다하위계층에의해제공되는연산들만사용» 장점 modularity debugging 쉽고 verification 쉽다.» 단점 비효율적 처리시간 overhead( 일련의 trap 의연속 )» ( 예 ) THE(Technische Hogeschool Eindhoven) 계층구조 Venus 계층구조 OS/2 계층구조 : multitasking, dual-mode, MS-DOS 보다더계층화됨 Windows NT: highly layered 성능향상위해사용자영역의계층들을 kernel 로흡수» 추세 : 모듈화그러나계층은적게 2.40
Layered Operating System 2.41
OS/2 계층구조 2.42
시스템구조 (System Structure) 3 3 마이크로커널 (Microkernel)» Mach (CMU; Carnegie Mellon University) microkernel approach» essential kernel» nonessential system and user-level programs client 와 server 는 microkernel 에게 message passing 하여교신 새로운서비스추가되어도 kernel 수정거의없음 이식성 (portability), 보안성 (security), 신뢰성 (reliability) 좋음» Digital Unix (OSF/1) Unix interface Mach kernel 로구현됨» Unix system call 을사용자수준서비스에대한 message 들로연결» Apple Mac OS X Server Mach kernel 기반» Windows NT layered approach 다양한응용 (Win32, OS/2, POSIX) 실행가능 user space 에서 server 및 client 프로그램실행 kernel 이 client 와 server 사이의 message passing 중재 2.43
시스템구조 (System Structure) 4 4 모듈 (Modules)» 동적적재커널모듈 (dynamically loadable kernel modules) Scheduling classes File systems Loadable system calls Executable formats STREAMS modules Miscellaneous Device and bus drivers» Unix, such as Solaris» Linux» Mac OS X (Darwin) 혼합구조 (hybrid structure) (Mach + BSD)» Mach microkernel: RPC (remote procedure calls), IPC (interprocess communication)» BSD kernel: BSD command line interface (POSIX APIs) device drivers 개발위한 I/O kit 제공 동적적재모듈 (dynamically loadable modules) 지원 (kernel extensions) 2.44
Solaris Modular Approach 2.45
Mac OS X Structure 2.46
Windows XP 클라이언트 / 서버구조 3/28 주 Server ( 쉬어가기 ) 1 + 5 + 3 = 148? 1 + 5 + 3 = 8? 2.47
가상기계 (Virtual Machines) 1 가상적 (Virtual) = illusion( 환상 ) 가상기계 (Virtual machine) ( 그림 2.15)» 계층적접근의결과» OS kernel 도 bare hardware 로간주» ( 예 ) IBM VM Operating System "VM/CMS" Virtual Machine / Conversational Monitoring System» 각프로세스에게실제컴퓨터의복사본을제공하여각프로세스들이자신의프로세서에서자신의메모리를가지고수행되는것같은 ( 모든하드웨어를사용하는것같은 ) 환상 (illusion) 을만들어주는기계 CPU 스케줄링 가상기억장치 (virtual memory) 기법이용 가상기계의디스크시스템» 3 disk drives 7 VM 가상디스크 (virtual disk, ( 예 ) minidisks in IBM) 로해결 물리적디스크에서필요한만큼의 track 할당 가상기계의» 각사용자기자신의 OS 를수행» ( 예 ) IBM VM OS 의 CMS : single user interactive system 2.48
시스템모델 Non-virtual Machine Virtual Machine 2.49
가상기계 (Virtual Machines) 2 가상기계소프트웨어가하는일» 실제기계상에서가상기계 (multiple virtual machine) 를다중프로그래밍 (multiprogramming) 기계의정확한복제가쉬운일이아님» 기계 : 2 modes(user mode, monitor mode)» 가상기계소프트웨어 : monitor mode 에서동작 ( 진짜 OS)» 가상기계자체는 user mode 에서만동작 : virtual user mode 에서 system call virtual monitor mode 다중가상기계의다중프로그래밍» 매우느림 ( 특권명령들을 simulate) 가상기계의장점» 시스템자원의완벽한보호 ( 예 ) 서로다른화일시스템 : cf. UNIX multiuser: 1 화일시스템» 시스템개발시간의제거 : system programmer 의가상기계에서시스템개발 (Cf.) 보통시스템에서는시스템변경과검사동안시스템사용불가 가상기계의단점» 자원공유가어려움 해결 1. minidisk 를공유 ( 물리적공유디스크를소프트웨어적으로구현 ) 2. 가상기계네트워크 ( 물리적통신망을소프트웨어적으로구현 ) 2.50
가상기계 (Virtual Machines) 3 돌아온 VM» VMs are coming back into fashion» 시스템조화성 (compatibility) 문제의해결책» ( 예 ) SunSparc 에서 MS-DOS 프로그램수행 본래의프로세서위에가상인텔기계 (Virtual Intel machine) 를생성 (MS-DOS run) Intel 명령을번역 SunSparc 명령어세트로변환 Intel based system 에서수행되는것같은환상제공 ( 예 )» JVM (Java Virtual Machine)» Vmware http://www.vmware.com» VPC http://www.connectix.com/index_win.html 2.51
자바 (Java) 자바기술 : 1995 이후나타난 Sun Microsystems 의기술 자바기술의 3 구성요소» Programming-language specification object oriented: class 들로구성 architecture-neutral: 자바가상기계 (JVM; Java Virtual Machine) 에서수행되는명령어인바이트코드출력 (bytecode output,.class) 생성 distributed: 원래 applets( 제한된자원에접근하며웹브라우저에서수행되는프로그램 ) 지원으로 internet programming 에서인기, networking 지원, distributed objets(rmi; Remote Method Invocation) 지원 multithreaded language: multiple flows of control secure: Chapter 19 memory managing: garbage collection» API(Application-Programming Interface) base API: graphics, I/O, utilities, networking(java.lang, java.awt, java.io, java.net) 지원 standard API: enterprise, commerce, security, media 지원» Virtual machine specification JVM: class loader 와 Java interpreter 로구성» class loader:.class files 적재» Java interpreter: interpreter 또는 JIT(just-in-time) compiler Java platform: JVM + Java API 2.52
자바 (Java) Java platform» 구현방법 on top of a host OS: Unix, Windows as part of a web browser: Micosoft Explorer, Netscape communicator in hardware: cellular phones (JavaOS)» Java application 또는 applet 이실행 (main() method 실행 ) 될때마다 JVM 의 instance 생성» 구현방법은시스템마다다르나표준적인프로그래밍인터페이스 (architectureneutral interface) 제공 Java 개발환경» compile-time environment: java source(java program 또는 applet) 를 bytecode 로변환» run-time environment: host computer 를위한 Java platform(jvm) Java compiler byte code JVM 기계어명령 H/W( 그림 3.15) 2.53
자바가상기계 (Java Virtual Machine) 2.54
자바플랫폼 (Java Platform) 2.55
플랫폼에무관한 Java.class 파일 2.56
자바개발환경 (Java development environment) 2.57
VMware Architecture http://www.vmware.com 2.58
(Lab.2) Linux Kernel Compile 실습요약 ( 커널소스다운로드 ) # wget http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.2.37.tar.gz # tar xvfz linux-3.2.37.tar.gz # ln s linux-3.2.37 mylinux ( 커널수정 & 컴파일 & 설치 & 재부팅 ) 1 # vi /usr/src/mylinux/arch/x86/include/asm/unistd_64.h 파일수정 312 번 NR_newsyscall 추가 2 # vi /usr/include/x86_64-linux-gnu/asm/unistd_64.h 파일수정 312 번 NR_newsyscall 추가 3 # vi /usr/src/mylinux/arch/x86/kernel/syscall_table_32.s newsyscall() 등록 4 # vi /usr/src/mylinux/include/linux/syscalls.h newsyscall() 등록 5 # vi /usr/src/mylinux/kernel/newsyscall.c newsyscall() 처리함수코딩 6 # vi /usr/src/mylinux/kernel/makefile obj -y = 라인에 newsyscall.o 추가 7 # cd /usr/src/mylinux ( 커널소스의상위디렉토리로이동 ) 8 # make mrproper ( 기존의커널설정제거 ) 9 # cp../linux-headers-3.2.0-29-generic/.config./ 10 # make oldconfig ( 실행후선택문모두엔터 ) 11 # make bzimage ( 컴파일, 새커널생성 ) 12 # make modules ( 모듈컴파일 ) 13 # make modules_install ( 모듈인스톨 ) 14 # make install ( 새커널설치 ) 15 # vi /boot/grub/grub.cfg default=0 첫번 menuentry 에자기이름입력 15+1 # reboot ( 실습결과제출 ) 1 Linux Kernel Compile Work Sheet 작성하여제출 2 사용자수준응용코딩 & 컴파일 & 실행하여결과확인화면캡처하여제출 2.59 /* 커널코드 /usr/src/mylinux/kernel/newsyscall.c 작성 */ #include <linux/linkage.h> #include <linux/unistd.h> #include <linux/errno.h> #include <linux/kernel.h> #include <linux/sched.h> asmlinkage int sys_newsyscall() { printk("hello Linux, 자기학번, 자기이름 is in Kernel\n"); return 0; } /* 사용자코드 test1.c 작성 */ #include <linux/unistd.h> #include <errno.h> #include <stdio.h> main() { int i; i=syscall( NR_newsyscall); printf( %d\n, i); } $ gcc o test1 test1.c 컴파일 $./test1 실행
(Lab.2) Linux Kernel Compile Work Sheet 학번 ( ) 이름 ( ) Linux Ubuntu Kernel linux-3.2.37 커널에 newsyscall() 을추가하는프로그래밍실습을수행하면서아래각물음에답하여제출하세요 1. 시스템이부팅될때부트프로그램에의해구동되며메모리에상주하면서시스템의자원을관리하며사용자에게서비스를제공하는의핵심부분을무엇이라하나요? 2. 오늘현재시점에서가장최신의안정한 (stable) 커널버전은무엇인가요? ( http://www.kernel.org/ ) 3. 리눅스파일시스템의어느디렉토리위치에서커널소스코드를다운로드해야하나요? 4. 커널항목들을커널에포함시킬지모듈로동작하게할지등을설정 (configuration) 을하기위해실행해야하는명령은무엇인가요? 5. 새시스템호출의명칭과번호를어느파일에새로할당해주어야할까요? ( 두개파일의전체경로로답하세요 ) 6. 시스템호출을수행하는 system_call() 함수가실행될때참조하는테이블로서새시스템호출함수를등록해줘야하는테이블은무엇인가요? ( 전체경로로답하세요 ) 7. 커널이미지생성 (make bzimage) 에걸린시간은얼마나되나요? 8. 모듈컴파일 (make modules) 에걸린시간은얼마나되나요? 9. 모듈설치 (make modules_install) 에걸린시간은얼마나되나요? 10. $ dmesg tail 수행결과로화면에출력된내용을무엇인가요? 2.60
(Lab.2) Linux Kernel Compile 제출방법 ( 숙제화면캡처하기 ) 1 재부팅후그래픽모드에서시스템호출프로그램 test1.c test2.c test3.c 를실행한다 : printk() 는커널모드로출력하는프로그램이기때문에유저모드의그래픽화면에아무런내용이출력되지않는다 2$ dmesg tail 명령을입력하여시스템메시지끝부분을출력한다 3 화면에출력된내용을확인하고키보드의 [Print Screen] 키를눌러화면을캡쳐한다 4 파일이름을영문 ( 예, capture.png) 으로하여 /root 에저장한다 ( 숙제방에복사하기 ) capture.png 가위치한디렉토리에서 1$ ftp 117.16.244.59 2Name: s 자기학번 3Passwd: ******* 4ftp> cd /home/2013hwa ( 또는 b) 5ftp> cd 자기학번 6ftp> binary 7ftp> put capture.png ( 숙제방만들기 ) 1$ telnet 117.16.244.59 2login: s 자기학번 3passwd: ******* 4 숙제방디렉토리이동 : $ cd /home/os2013hwa ( 또는 b) 5 자기학번으로자기숙제방생성 : $ mkdir 자기학번 ( 앞에 s 없이 ) 6 디렉토리에퍼미션설정 : $ chmod 700 학번 (Windows 에서 Linux 숙제방접근하기 ) Windows 명령프롬프트창에서 1 C:\>D: [Enter] 2 D:\>ftp 117.16.244.59 3 User (117.16.244.59:(none)): 자기아이디 4 Password: ******* 5 ftp> cd /home/os2013hwa ( 또는 b) 6 ftp> binary 7 ftp> ls 8 ftp> get capture.png 9 get capture.png? y 10 ftp> bye 2.61
2 장정리 Questions of the day 1. 에서매개변수를전달하는일반적인방법 3 가지는무엇인가요? 2. 설계자가가상기계구조를사용하는것의주요장점은무엇인가요? OS Services in 3 Views» Users 명령해석기 (Command Interpreter) 그래피컬사용자인터페이스 (Graphical User Interface)» Programmers 시스템호출 (System Calls) 시스템프로그래밍 (System Programming)» OS designers 구성요소와그들의상호연결 (component and interconnections) 2.62
( 참고 ) 시스템설계및구현 (System Design and Implementation) 설계목적 (Design Goals)» 최상위결정 하드웨어와시스템형태 (batch, time-shared, single-user, multiuser, distributed, real-time, general-purpose)» Requirements( 요구사항 ) 사용자목적 (User goals)» 배우기쉽고 (easy to learn),» 사용하기쉽고 (easy to use),» 신뢰할수있고 (reliable),» 안정적이고 (safe),» 빠를것 (fast) 시스템목적 (System goals)» 설계, 구현, 유지가쉽고 (easy to design, implement, maintain),» 유연하고 (flexible),» 신뢰할수있고 (reliable),» 오류없고 (error-free),» 효율적일것 (efficient) 2.63
( 참고 ) 시스템설계및구현 (System Design and Implementation) 기법과정책 (Mechanisms and Policies)» 기법 (Mechanisms) : how to do something ( 예 ) CPU 보호기법은 Timer로» 정책 (Policies) : What will be done ( 예 ) timer out 시간결정» 정책결정 기법결정 A general mechanism이면정책변경이몇몇매개변수변경만유도 ( 예 ) CPU-intensive VS I/O intensive 정책» Microkernel-based OS(Mach) 기법과정책의확실한분리» Apple Mac OS 기법과정책의혼합 (interface가 Kernel안에 Same look& feel)» 정책결정은자원할당과스케줄링에중요 2.64
( 참고 ) 시스템설계및구현 (System Design and Implementation) 구현 (Implementation)» OS 를고급언어로구현하는추세 최초 : Burroughs computer 의 Master Control Program(MCP) : ALGOL 의변형 MULTICS(MIT) : PL/1 Prime Computer 의 Primos OS : FORTRAN 의일종 UNIX, OS/2, Windows/NT(C++ 약간 ) : C UNIX: CPU Scheduler 와 device deriver 부분의 6% 인 900 여줄만 Assembly 어로쓰임, 94% 는 C 로 JVM: Java» OS 를고급언어로구현하는장점 1. Faster writting : 코드작성이빠르고 2. Compact codes : 코드가간결하고 3. Easier to understand and debug : 이해와수정이쉽고 4. Easier to port : 쉽게이식됨» MS-DOS : 8088 assembly 어로쓰임 Intel 계열 CPU 에만» Unix : C 로쓰임 Intel 80X86, Motorola 680X0, SPARC, MIPS RX000» OS 를고급언어로구현하는단점 1. Reduce speed : 속도가느리고 2. Increase storage : 기억장치가많이필요 그러나좋은 Compiler 로보완 성능의관건 : 자료구조와알고리즘 (code 가 assembly 로되었거나고급언어로되었거나 ) 성능향상» critical routines(memory manager, CPU scheduler) 의병목 (bottlenecks) assembly 어로대체 2.65
( 참고 ) 시스템설계및구현 (System Design and Implementation) 시스템생성 (System Generation)» OS 는다양한기종에수행되어야하므로특정컴퓨터 site 를위해시스템을 configure/generate( 구성 / 조립 / 생성 )» SYSGEN( 특별프로그램 ) : System generation» 질문 What CPU is to be used? 사용 CPU 는? How much memory is available? 사용가능한기억장치는? What devices are avilable? 사용가능한주변장치는? What operating-system options are desired, or what parameter values are to be used? 안에선택사항과매개변수는?» 보통은컴파일해서 OS 의새버전생성 (Tailored)» 다른방법 1. Precompiled library : 미리준비된라이브러리에서선택 ( 예 ) device driver 선택 ( 재컴파일없고시스템생성빠르나너무일반적일수있음 ) 2. Table driven : 모든코드는항상시스템안에, 시스템테이블의값대로실행시간에선택 ( 시스템테이블생성만으로시스템생성 )» OS 가생성되면 (generation) hardware 가 booting 하여이용 ROM 의 bootstrap loader 또는 bootstrap program OS load MS-DOS : bootstrap loader bootstrap program( 보조기억장치안에 ) OS load 2.66
( 참고 ) Operating-System Debugging 디버깅 (debugging) : 오류 ( 버그 ) 를발견하고수정 OS 는오류정보 log files 생성 프로세스가실패하면프로세스가사용하던메모리를캡쳐한 core dump 파일생성 OS 가실패하면커널메모리상태를 crash dump 파일에저장 Crashes 외, 성능조정 (performance tuning) 이시스템성능을최적화 Kernighan s 법칙 : 우선디버깅은코드를작성하는것보다두배만큼어렵다. 그러므로가능한영리하게코드를작성한다고하더라도, 정의대로라면디버깅한것만큼똑똑한것은아니다 Kernighan s Law: Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. Solaris, FreeBSD, Mac OS X 에서사용가능한 DTrace 툴은동적인추적도구» 코드가실행되면검사점 (probes) 은커널에의해관리되는상태데이터를캡쳐해서그검사점소비자에게보낸다 2.67
( 참고 ) Solaris 10 dtrace Following System Call 2.68
( 참고 ) 생성 (Operating System Generation) OS 는모든기계에서동작하도록설계되어야한다 ; 그러므로 OS 시스템은특정컴퓨터를위해구성 (configured) 될수있어야한다 SYSGEN 프로그램은하드웨어시스템의특정구성에대한정보를구성한다 부팅 (Booting) 커널을로드하여컴퓨터를시동시킨다 부트스트랩프로그램 (Bootstrap program) 커널을찾아서메모리로로드하여실행시키는 ROM 에저장된작은코드이다 시스템부트 (System Boot)» OS 는생성된후에하드웨어에의해사용가능해야한다» bootstrap loader 라는작은조각코드가커널을찾아메모리로로드하고시작시킨다» 때로는 boot block 이 bootstrap loader 를로드하는 2-step 절차도있다» 전원을켜면, 메모리특정위치의실행이시작된다» 최초의코드는일반적으로 firmware 에저장되어있다 2.69