chap12(process).hwp

Size: px
Start display at page:

Download "chap12(process).hwp"

Transcription

1 제 12 장프로세스 프로세스는파일과더불어유닉스운영체제가제공하는핵심개념중의하나이다. 유닉스시스템을깊이있게이해하기위해서는프로세스에대해정확히이해해야한다. 이장에서는프로그램이시작되는과정, 프로세스의구조, 프로세스생성및프로그램실행메커니즘, 프로세스사이의시그널등에대해서자세히살펴본다 프로그램시작및종료 유닉스에서프로그램은어떻게실행이시작되고종료될까? 프로그램은 12.3절에서살펴볼 exec 시스템호출에의해실행된다. 이호출은실행될프로그램의시작루틴에게명령줄인수 (command-line arguments) 와환경변수 (environment variables) 를전달한다. C 프로그램을컴파일하면실행파일에는 C 프로그램의코드와더불어 C 시작루틴 (start-up routine) 이포함된다. 이시작루틴은 exec 시스템호출로부터전달받은명령줄인수, 환경변수를다음과같이 main 함수를호출하면서 main 함수에다시전달한다. main 함수에서부터프로그램이실행되고실행이끝나면반환값을받아 exit 한다. exit( main( argc, argv) ); exec 시스템호출에서부터 C 시작루틴, main 함수로프로그램실행이시작되는과정은그림 12.1과같다. 그림 12.1 프로그램실행의시작 exec() 시스템호출은실행되는프로그램에게명령줄인수를전달하는데실행되는프로그램의 main 함수는 argc와 argv 매개변수를통해서명령줄인수의수와명령줄인수에대한포인터배열을전달받는다

2 int main(int argc, char *argv[]); argc : 명령줄인수의수 argv[] : 명령줄인수리스트를나타내는포인터배열 명령줄인수리스트를나타내는포인터배열 argv 의구성은그림 12.2 와같다. 그림 12.2 명령중인수리스트 argv 구성 또한전역변수 environ을통해환경변수리스트도전달받는데그구성의예는그림 12.3과같다. 그림 12.3 환경변수리스트 environ 의구성 예제 12.1 프로그램은모든명령줄인수와환경변수를프린트한다. 명령줄인수의개수 argc와 for 루프를이용하여명령줄인수를하나씩프린트한다. 포인터변수 ptr을이용하여환경변수리스트의시작위치인 environ에서부터시작하여 1씩증가하면서각환경변수를프린트한다. 예제 12.1 printall.c - 2 -

3 /* 모든명령줄인수와환경변수를프린트한다. */ int main(int argc, char *argv[]) int i; char **ptr; extern char **environ; for (i = 0; i < argc; i++) /* 모든명령줄인수프린트 */ printf("argv[%d]: %s \n", i, argv[i]); for (ptr = environ; *ptr!= 0; ptr++) /* 모든환경변수값프린트 */ printf("%s \n", *ptr); exit(0); $ printall hello world argv[0]: printall argv[1]: hello argv[2]: world HOME=/user/faculty/chang PATH=.:/usr/local/bin:/bin:/sbin:/usr/bin:/usr/ucb:/etc:/usr/sbin:/ usr/ccs/bin... 이제프로그램이종료하는방법에대해서알아보자. 프로그램의실행을종료하는방법은정상종료 (normal termination), 비정상종료 (abnormal termination) 로크게두가지로나눌수있다. 먼저프로그램이정상적으로종료하는방법부터알아보도록하자. main() 실행을마치고리턴하면 C 시작루틴은이리턴값을가지고 exit() 을호출한다. 프로그램내에서직접 exit() 을호출할수있다. 프로그램내에서직접 _exit() 을호출할수있다. exit() 시스템호출은프로세스를정상적으로종료시키는데종료전에모든열려진스트림을닫고 (fclose), 출력버퍼의내용을디스크에쓰는 (fflush) 등의뒷정리 (cleanup processing) 를한다. 프로세스의종료상태를알리는종료코드 (exit code) 를부모프로세스에게전달한다

4 #include <stdlib.h> void exit(int status); 뒷정리를한후프로세스를정상적으로종료시킨다. _exit() 시스템호출역시프로세스를정상적으로종료시키는데뒷정리를하지않고즉시종료된다는점이 exit() 시스템호출과다르다. #include <stdlib.h> void _exit(int status); 뒷정리를하지않고프로세스를즉시종료시킨다. 프로그램이비정상적으로종료하는방법은 2 가지가있다. abort() 시스템호출은프로세스에 SIGABRT 시그널을보내어프로세스를비정상적으로종료시킨다. 시그널에의한종료 : 프로세스가실행중에시그널을받으면갑자기비정상적으로종료하게된다. 시그널에대한자세한사항은 12.6 절에서자세히다룬다 프로세스구조 프로세스 (process) 란무엇인가? 프로세스에대한정의혹은설명은여러가지가있지만가장쉬운정의는실행중인프로그램 (executing program) 을프로세스라고생각하는것이다. 다시말하면프로그램이실행되면프로세스가되는것이다. 한프로그램은여러번실행될수있으므로한프로그램으로부터여러개의프로세스를만들수있으며프로그램그자체가프로세스는아니라는점을주의하자. 프로세스는실행중인프로그램이다. 프로그램을실행즉프로세스를유지하기위해서는무엇이필요할지생각해보자. 먼저프로세스관리를위한커널내의프로세스에대한정보가필요할것이다. 또한프로그램실행을위해서는그림 12.4와같이실행코드, 데이터, 힙, 스택등을메모리내에배치해야한다. 이러한메모리배치를프로세스메모리이미지라고한다. 프로세스메모리이미지를구성하는프로그램의실행코드, 데이터, 스택, 힙등의영역의역할은다음과같다

5 그림 12.4 프로세스메모리이미지 코드 (code) 프로세스의실행코드를저장하는영역이다. 데이터 (data) 전역변수 (global variable) 및정적변수 (static variable) 를위한영역이다. 힙 (heap) 동적메모리할당을위한영역이다. 스택 (stack area) 함수호출을구현하기위한 ( 지역변수를포함하는 ) 활성레코드 (activation record) 를저장하기위한실행시간스택 (runtime stack) 을위한영역이다. U- 영역 (user-area) 열린파일디스크립터등과같은시스템관리정보를저장하는영역이다 프로세스생성 각프로세스는프로세스를구별하는번호인프로세스 ID를갖고있다. 실행중인프로그램즉프로세스가 getpid() 를호출하면실행중인프로세스의 ID를리턴한다. 또한 getppid() 를호출하면실행중인프로세스의부모프로세스의 ID를리턴한다

6 int getpid( ); 프로세스의 ID를리턴한다. int getppid( ); 부모프로세스의 ID를리턴한다. 유닉스에서는필요에따라새로운프로세스를생성해야하는데 fork() 시스템호출이프로세스를생성하는유일한방법이다. #include <sys/types.h> #include <unistd.h> pid_t fork(void); 새로운자식프로세스를생성한다. 자식프로세스에게는 0을리턴하고부모프로세스에게는자식프로세스 ID를리턴한다. 부모프로세스 (parent process) 는 fork() 시스템호출을통해새로운자식프로세스 (child process) 를생성한다. 프로세스생성원리를간단히요약하면자기복제 ( 自己複製 ) 라고할수있다. 자식프로세스는부모프로세스 ( 코드, 데이터, 스택, 힙등 ) 를똑같이복제해만들어진다 ( 그림 12.5 참조 ). 그림 12.5 프로세스생성전과후 fork() 시스템호출을하면새로운자식프로세스가즉시생성되며부모프로세스와 자 - 6 -

7 식프로세스에게각각리턴한다. 자식프로세스에게는 0을리턴하고부모프로세스에게는자식프로세스 ID를리턴한다. fork() 시스템호출은한번호출되지만두번리턴된다는점을주의하자. fork() 호출후에부모프로세스와자식프로세스가병행적으로실행을계속한다. fork() 시스템호출은부모프로세스를똑같이복제하여새로운자식프로세스를생성한다. 예제 12.2 프로그램을통해 fork() 호출후에리턴값과실행흐름을살펴보자. 실행결과를보면 fork() 뒤에나오는문장은부모프로세스와자식프로세스에의해각각실행되며부모프로세스에게는생성된자식프로세스의 ID(15066) 이리턴되고자식프로세스에게는 0이리턴됨을확인할수있다. 예제 12.2 fork1.c /* 자식프로세스를생성한다. */ int main() int pid; printf("[%d] 프로세스시작 \n", getpid()); pid = fork(); printf("[%d] 프로세스 : 리턴값 %d\n", getpid(), pid); $fork1 [15065] 프로세스시작 [15065] 프로세스 : 리턴값 [15066] 프로세스 : 리턴값 0 이예제를통해 fork() 호출뒤에나타나는문장은부모프로세스와자식프로세스가병행적으로모두실행한다는것을확인할수있었다. 그러면부모프로세스와자식프로세스가서로다른일을하려면어떻게하여야할까? fork() 호출후에리턴값이다르므로이리턴값을이용하면부모프로세스와자식프로세스를구별하고서로다른일을하도록할수있을것이다. 따라서다음과같은코드를수행하면 fork() 호출후에자식프로세스는자식을위한코드부분을실행하고부모프로세스는부모를위한코드부분을실행한다

8 pid = fork(); if ( pid == 0 ) 자식프로세스의실행코드 else 부모프로세스의실행코드 다음예제프로그램은부모프로세스가자식프로세스를생성하며각프로세스가메시지와프로세스 ID를프린트한다. 실행결과를보면자식프로세스는리턴값으로 0을받았으므로 if 문의 then 부분을실행했고부모프로세스는리턴값으로자식프로세스 ID(15800) 을받았으므로 if 문의 else 부분을실행했음을확인할수있다. 예제 12.3 fork2.c #include <stdlib.h> /* 부모프로세스가자식프로세스를생성하고서로다른메시지를프린트한다. */ int main() int pid; pid = fork(); if(pid ==0) // 자식프로세스 printf("[child] : Hello, world pid=%d\n",getpid()); else // 부모프로세스 printf("[parent] : Hello, world pid=%d\n",getpid()); $ fork2 [Parent] : Hello, world pid=15799 [Child] : Hello, world pid=15800 이제하나의부모프로세스가두개의자식프로세스를생성하는다음예제프로그램을살펴보자. 이예제에서부모프로세스는두개의자식프로세스를생성하며각자식프로세스가메시지와프로세스 ID를프린트한다. 예제 12.4 fork3.c #include <stdlib.h> - 8 -

9 /* 부모프로세스가두개의자식프로세스를생성한다. */ int main() int pid1, pid2; pid1 = fork(); if (pid1 == 0) printf("[child 1] : Hello, world! pid=%d\n",getpid()); exit(0); pid2 = fork(); if (pid2 == 0) printf("[child 2] : Hello, world! pid=%d\n",getpid()); exit(0); $fork3 [Child 1] : Hello, world! pid=15741 [Child 2] : Hello, world! pid=15742 QnA 첫번째자식프로세스부분에서 exit(0) 를왜하지요? 만약첫번째자식프로세스가 exit() 를하지않으면 if 문이후에실행을계속하여 fork() 호출을하게됩니다. 결과적으로자식프로세스가또자식프로세스를생성하게되겠지요. 부모프로세스는 wait() 시스템호출을이용하여자식프로세스중의하나가끝나기를기다릴수있다. 자식프로세스가끝나면끝난자식프로세스의종료코드가 *status에저장되며끝난자식프로세스의번호를리턴한다. #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status); 자식프로세스중의하나가끝날때까지기다린다. 끝난자식프로세스의종료코드가 status에저장되며끝난자식프로세스의번호를리턴한다

10 이제 wait() 시스템호출을이용하여부모프로세스가자식프로세스가끝나기를기다리는다음예제프로그램을살펴보자. 부모프로세스는자식프로세스를생성하고자식프로세스가끝나기를기다리며끝난후에는자식프로세스종료메시지와자식프로세스로부터받은종료코드값을프린트한다. 예제 12.5 forkwait.c /* 부모프로세스가자식프로세스를생성하고끝나기를기다린다. */ int main() int pid, child, status; printf("[%d] 부모프로세스시작 \n", getpid( )); pid = fork(); if (pid == 0) printf("[%d] 자식프로세스시작 \n", getpid( )); exit(1); child = wait(&status); // 자식프로세스가끝나기를기다린다. printf("[%d] 자식프로세스 %d 종료 \n", getpid(), child); printf("\t종료코드 %d\n", status>>8); $ forkwait [15943] 부모프로세스시작 [15944] 자식프로세스시작 [15943] 자식프로세스 종료종료코드 프로그램실행 앞에서살펴본것처럼부모프로세스가자식프로세스를생성하면자식프로세스는부모프로세스와같은코드를실행한다. 그렇다면자식프로세스에게새로운일 ( 프로그램 ) 을시키려면어떻게하여야할까? 이를위해서는자식프로세스내에서새로운프로그램을실행시킬수있는방법이있어야한다. exec() 시스템호출을이용하여프로세스내에서새로운프로그램을실행시킬수있으며

11 exec() 시스템호출이프로세스내에서새로운프로그램을실행시키는유일한방법이다. exec() 시스템호출의원리를간단히요약하면자기대치 ( 自己代置 ) 라고할수있다. 프로세스가 exec() 호출을하면, 그프로세스내의프로그램은완전히새로운프로그램 ( 코드, 데이터, 힙, 스택등 ) 으로대치된다. 그리고새프로그램의 main() 부터실행이시작한다. 그림 12.6 프로그램실행 exec() 시스템호출은프로세스내의프로그램을새로운프로그램으로대치하여새로운프로그램을실행시킨다. exec() 호출이성공하면그프로세스내에기존의프로그램은없어지고새로운프로그램으로대치되므로 exec() 호출은리턴할곳이없어진다. 따라서성공한 exec() 호출은절대리턴하지않는다는점을유의하자. exec() 호출은실패할경우에만리턴한다. #include <unistd.h> int execl(char* path, char* arg0, char* arg1,..., char* argn, NULL) int execv(char* path, char* argv[ ]) int execlp(char* file, char* arg0, char* arg1,..., char* argn, NULL) int execvp(char* file, char* argv[ ]) 호출한프로세스의코드, 데이터, 힙, 스택등을 path가나타내는새로운프로그램으로대치한후새프로그램을실행한다. 성공한 exec( ) 호출은리턴하지않으며실패하면 -1을리턴한다. exec() 시스템호출에는 execl() 과 execv() 가있다. execl() 시스템호출은명령줄인수를하나씩나열하고 NULL은인수끝을나타낸다. execv() 시스템호출을할때는명령줄인수를하나씩나열하지않고명령줄인수리스트를포인터배열로만들어이배열의

12 이름을전달한다. execlp() 와 execvp() 는각각 execl() 과 execv() 와같으며실행할파일을환경변수 PATH가지정한디렉터리들에서자동으로찾는다는점만다르다. 보통다음과같이 fork() 시스템호출후에 exec() 시스템호출하는경우가일반적이며새로실행할프로그램에대한정보를 arguments로전달한다. exec() 시스템호출이성공하면자식프로세스는새로운프로그램을실행하게되고부모는계속해서다음코드를실행하게된다. exec() 시스템호출이실패하면자식프로세스는 exit(1) 를호출하여종료한다. if ((pid = fork()) == 0 ) exec( arguments ); exit(1); // 부모계속실행 예제 12.6 프로그램을살펴보자. 이프로그램은자식프로세스를생성하여자식프로세스로하여금 echo 명령어를실행하게한다. 여기서는 execl() 시스템호출을사용하였으며명령줄인수로 "hello" 스트링을주고 NULL은인수끝을나타낸다. execl("/bin/echo", "echo", "hello", NULL); 자식프로세스는 echo 명령어를실행하여명령줄인수로받은 "hello" 스트링을그대로프린트한다. 예제 12.6 execute1.c /* 자식프로세스를생성하여 echo 명령어를실행한다. */ int main( ) printf(" 부모프로세스시작 \n"); if (fork( ) == 0) execl("/bin/echo", "echo", "hello", NULL); fprintf(stderr," 첫번째실패 "); exit(1); printf(" 부모프로세스끝 \n"); $ execute1 부모프로세스시작

13 hello 부모프로세스끝 예제 12.7 프로그램은세개의자식프로세스를생성한다. 첫번째프로세스는 echo 명령어를두번째프로세스는 date 명령어를세번째프로세스는 ls 명령어를실행한다. 예제 12.7 execute2.c /* 세개의자식프로세스를생성하여각각다른명령어를실행한다. */ int main( ) printf(" 부모프로세스시작 \n"); if (fork( ) == 0) execl("/bin/echo", "echo", "hello", NULL); fprintf(stderr," 첫번째실패 "); exit(1); if (fork( ) == 0) execl("/bin/date", "date", NULL); fprintf(stderr," 두번째실패 "); exit(2); if (fork( ) == 0) execl("/bin/ls","ls", "-l", NULL); fprintf(stderr," 세번째실패 "); exit(3); printf(" 부모프로세스끝 \n"); $ execute2 부모프로세스시작부모프로세스끝 hello 2012년 2월 28일화요일오후 08시 43분 47초총 50 -rwxr-xr-x 1 chang faculty 월 28일 20:43 execute2 -rw-r--r-- 1 chang faculty 556 2월 28일 20:42 execute2.c

14 지금까지살펴본프로그램은정해진명령어만실행시킨다. 이제명령줄인수로받은임의의명령어를실행시키는프로그램을작성해보자. 예제 12.8 프로그램은명령줄인수로받은명령어의실행을위해자식프로세스를생성하고자식프로세스로하여금그명령어를실행하게한다. 부모프로세스는자식프로세스가끝날때까지기다리며자식프로세스가종료하면자식프로세스종료메시지와자식프로세스로부터받은종료코드를프린트한다. 이러한실행과정을그림 12.7과같이표현할수있다. wait() fork() exec() exit() 그림 12.7 프로그램실행및기다리는과정 예제 12.8 execute3.c /* 명령줄인수로받은명령을실행시킨다. */ int main(int argc, char *argv[]) int child, pid, status; pid = fork( ); if (pid == 0) // 자식프로세스 execvp(argv[1], &argv[1]); fprintf(stderr, "%s: 실행불가 \n",argv[1]); else // 부모프로세스 child = wait(&status); printf("[%d] 자식프로세스 %d 종료 \n", getpid(), pid); printf("\t종료코드 %d \n", status>>8); 이프로그램을이용하여명령줄인수로받은임의의명령어를실행시킬수있다. 예를들어다음과같이 wc 명령어를실행시킬수있다. $ execute3 wc execute2.c

15 execute2.c [26470] 자식프로세스 종료 종료코드 입출력재지정 쉘은다음과같이명령어를실행하면명령어의표준출력이파일에저장되는입출력재지정기능을제공한다. $ 명령어 > 파일 이러한입출력재지정기능을어떻게구현할수있을까? dup() 혹은 dup2() 시스템호출을이용하여입출력재지정을구현할수있다. #include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd); 성공하면복사된새로운파일디스크립터를리턴하다. 실패하면 -1을리턴한다. dup() 는파일디스크립터 oldfd에대한복사본을생성하여리턴한다. dup2() 는파일디스크립터 oldfd을 newfd에복사한다. 파일디스크립터 oldfd와복사된새로운디스크립터는같은파일을공유하게된다. 두시스템호출모두성공하면복사된새로운디스크립터를리턴하다. 에러가발생하면 -1을리턴한다. 출력재지정을어떻게구현할수있을까? 그기본원리는다음과같이파일디스크립터 fd 를표준출력을나타내는 1번파일디스크립터에 dup2() 하는것이다. fd = open(argv[1], O_CREAT O_TRUNC O_WRONLY, 0600); dup2(fd, 1); 이제 fd가나타내는파일을 1번파일디스크립터도나타내게된다. 따라서 1번파일디스크립터를통해나오는출력 ( 표준출력 ) 은이제모두파일에저장될것이다. 이러한원리를예제 12.9 프로그램을통해확인해보자. 이예제는표준출력을통해프린트되는간단한인사말을명령줄인수로받은파일에저장한다. 일단명령줄인수로받은파일을 7번줄에서연다. 그리고 8번줄에서 dup2() 시스템호출을통해이파일디스크립터를 1번파일디스크립터에복사한다. 이제표준출력은모두이파일에저장될것이다. 10째줄에서프린트하는문자열은이파일에저장된다. 그러나 11번째줄에서출력되

16 는문자열은표준오류를통해출력되므로파일에저장되지않고모니터에출력된다. 예제 12.9 redirect1.c 1 2 #include <fcntl.h> 3 4 /* 표준출력을파일에재지정하는프로그램 */ 5 int main(int argc, char* argv[]) 6 7 int fd, status; 8 fd = open(argv[1], O_CREAT O_TRUNC O_WRONLY, 0600); 9 dup2(fd, 1); /* 파일을표준출력에복제 */ 10 close(fd); 11 printf("hello stdout!\n"); 12 fprintf(stderr,"hello stderr!\n"); 13 $ redirect1 out Hello stderr! $ cat out Hello stdout! 이제자식프로세스가실행하는명령어의표준출력이모두파일에재지정되도록하려면어떻게하여야할까? 기본원리는위의예제와같다. 단지명령어를실행하기전에해당파일디스크립터를 1번파일디스크립터에 dup2() 하면된다. 그이후에실행된명령어의표준출력은모두해당파일에저장될것이다. 예제 프로그램은자식프로세스로하여금명령어를실행하게하는예제 12.8 프로그램을표준출력을파일에재지정하도록수정한것이다. 첫번째명령줄인수로받은파일에두번째명령줄인수로받은명령어의표준출력이모두저장된다. 이를위해 11번째줄에서 dup2() 시스템호출을한후에명령줄인수로받은명령어를실행시키기위해 13 번째줄에서 exec() 시스템호출을하였다. 이제새로실행된프로그램의표준출력내용은모두파일에저장된다. 예제 redirect2.c 1 2 #include <fcntl.h> 3 4 /* 자식프로세스의표준출력을파일에재지정한다. */

17 5 int main(int argc, char* argv[]) 6 7 int child, pid, fd, status; 8 9 pid = fork( ); 10 if (pid == 0) 11 fd = open(argv[1], O_CREAT O_TRUNC O_WRONLY, 0600); 12 dup2(fd, 1); /* 파일을표준출력에복제 */ 13 close(fd); 14 execvp(argv[2], &argv[2]); 15 fprintf(stderr, "%s: 실행불가 \n",argv[1]); 16 else 17 child = wait(&status); 18 printf("[%d] 자식프로세스 %d 종료 \n", getpid(), child); $ redirect2 out wc execute2.c [26882] 자식프로세스 종료 $ cat out execute2.c 기타시스템호출 각프로세스는현재작업디렉터리를가지고있다. chdir() 시스템호출은현재작업디렉토리를매개변수가지정한경로 pathname으로변경한다. 이시스템호출이성공하려면프로세스는그디렉토리에대한실행권한이있어야한다. #include <unistd.h> int chdir (char* pathname); 현재작업디렉토리를 pathname으로변경한다. 성공하면 0 실패하면 -1를리턴한다. 각프로세스마다사용자 ID가있는데프로세스의사용자 ID는로그인하여그프로세스를실행시킨사용자를나타낸다. 다음시스템호출은프로세스의소유주의사용자 ID와그룹 ID를각각리턴한다. #include <sys/types.h>

18 #include <unistd.h> int getuid(); 프로세스의사용자 ID를리턴한다. int getgid(); 프로세스의그룹 ID를리턴한다. 또한다음시스템호출은프로세스의소유주를매개변수로지정해준사용자 ID와그룹 ID로각각변경한다. #include <sys/types.h> #include <unistd.h> int setuid(uid_t uid); 프로세스의사용자 ID를 uid로변경한다. int setgid(gid_t gid); 프로세스의그룹 ID를 gid로변경한다 시스템부팅 시스템부팅과정을생각해보자. 시스템이부팅되면서여러개의프로세스가생성되는데이과정은어떻게이루어질까? 시스템부팅과정에서앞에서배운 fork/exec 시스템호출은매우유용하게사용된다. 시스템부팅은 fork/exec 시스템호출을통해이루어진다. 부팅이시작되면커널내부에서프로세스 ID가 0인첫번째프로세스 swapper가만들어진다. swapper는프로세스를스케쥴링하는기능을한다. 이프로세스는 fork/exec를수행하여 1번프로세스인 init 프로세스를생성한다. init 프로세스는역시 fork/exec를반복적으로수행하여시스템운영에필요한다양한프로세스들 ( 주로서버데몬프로세스 ) 을새로생성한다. 이 init 프로세스는모든프로세스의조상이라고할수있다. 그림 10.7은이러한부팅과정을보여주고있는데예를들어 sshd와같은 ssh 데몬프로세스나 getty 프로세스를생성한다. 이그림에서괄호안의수는프로세스 ID를나타낸다. 데몬프로세스중에는 getty( 리눅스경우에는 mingetty) 프로세스가있는데이프로세스로부터로그인과정이시작된다. 이프로세스는화면에로그인프롬프트를띄우고사용자의 ID가입력되기를기다린다. 입력이들어오면 fork() 시스템호출은하지않고바로 exec() 시스템호출을하여 login 프로그램 (/bin/login) 을실행한다. 이프로그램이패스워드등을검사하고성공하면다시 exec() 시스템호출을하여 shell 프로그램 ( 예를들어 /bin/sh) 을실행한다

19 그림 12.8은이러한로그인과정을보여주고있는데 getty 프로세스가 login 프로세스, shell 프로세스로변화하지만 fork() 시스템호출은하지않고 exec() 시스템호출만하기때문에프로세스 ID는모두같다는점을유의하자. 그림 12.8 부팅및로그인과정 각프로세스에대한보다자세한설명은다음과같다. swapper( 스케줄러프로세스 ) swapper는커널내부에서만들어진프로세스로프로세스스케줄링을한다. 이프로세스는커널내의코드를실행하기때문에별도의실행파일이존재하지않는다. init( 초기화프로세스 ) init 프로세스 (/etc/init 혹은 /sbin/init ) 는 /etc/inittab 파일에기술된대로시스템을초기화하는데이파일내에서다시 /etc/rc* 즉 rc로시작되는이름의쉘스크립트들을실행한다. 이러한과정을통해서파일시스템마운트, 서버데몬프로세스생성, getty 프로세스생성등의작업을수행하여시스템을초기화한다. getty 프로세스 getty 프로세스 (/etc/getty 혹은 /etc/mingetty) 는로그인프롬프트를내고키보드입력을감지한다. 아이디, 패스워드를입력하면로그인절차를진행하기위해로그인프로그램 (/bin/login) 을실행한다. login 프로세스 login 프로세스는 /etc/passwd 파일을참조하여사용자의로그인아이디및패스워드를검사한다. 로그인절차가성공하면쉘프로그램 (/bin/sh, /bin/csh 등 ) 을실행한다. shell 프로세스

20 shell 프로세스는시작파일을실행한후에쉘프롬프트를내고사용자로부터명령어를기다린다. 명령어가입력되면해석하여명령어를실행시킨다. 명령어실행후에다시쉘프롬프트를내고이과정을반복한다 시그널 시그널종류 프로그램실행도중에예기치않는사건이발생하면이를실행중인프로그램에알려줄수있어야한다. 예를들어연산중에 0으로나누는오류가발생하면재빨리이를프로그램에알려야하고프로그램에서는이를적절히처리해야한다. 이렇게예기치않은사건이발생할때그림 12.9와같이해당프로세스에게이를알리는시그널이보내진다. 이러한의미에서시그널 (signal) 은예기치않은사건이발생할때이를알리는소프트웨어인터럽트라고할수있다. 시그널은예기치않은사건이발생할때이를알리는소프트웨어인터럽트이다. 예를들어다음과같은경우에시그널이발생한다. 부동소수점오류 정전 알람시계울림 자식프로세스종료 키보드로부터종료요청 (Ctrl-C) 키보드로부터정지요청 (Ctrl-Z) 그림 12.9 프로세스에시그널전달 유닉스에는총 31개의시그널이 /usr/include/signal.h에정의되어있다. 각시그널이름은 SIG로시작되며주요시그널은표 12.1과같다

21 시그널이름의미기본동작 SIGABRT abort() 에서발생되는종료시그널종료 ( 코어덤프 ) SIGALRM 알람시계 alarm() 울림종료 SIGCHLD 프로세스의종료혹은중지를부모에게알리는시그널무시 SIGCONT 중지된프로세스를계속시키는시그널무시 SIGFPE 0 으로나누기종료 ( 코어덤프 ) SIGHUP 연결끊김종료 SIGILL 잘못된하드웨어명령어수행종료 ( 코어덤프 ) SIGIO 비동기화 I/O 이벤트알림종료 SIGINT 터미널에서 CTRL-C 할때발생하는인터럽트시그널종료 SIGKILL 잡을수없는프로세스종료시키는시그널종료 SIGPIPE 파이프에쓰려는데리더가없을때종료 SIGPIPE 끊어진파이프종료 SIGPWR 전원고장종료 SIGSEGV 유효하지않은메모리참조종료 ( 코어덤프 ) SIGSTOP 프로세스중지시그널종료 ( 코어덤프 ) SIGSTP 터미널에서 CTRL-C 할때발생하는중지시그널정지 SIGSYS 유효하지않은시스템호출종료 ( 코어덤프 ) SIGTERM 잡을수있는프로세스종료시그널종료 SIGTTIN 후면프로세스가제어터미널을읽기정지 SIGTTOU 후면프로세스가제어터미널에쓰기정지 SIGUSR1 사용자정의시그널종료 SIGUSR2 사용자정의시그널종료 표 12.1 주요시그널 alarm() 시스템호출은매개변수로받은초후에 SIGALRM 시그널을발생시킨다. 프로그램이실행중에이시그널을받으면 경보시계 (Alarm clock)" 메시지를출력하고프로그램은종료된다. 예제 프로그램을살펴보자. 이프로그램에서는 5초후에 SIGALRM 시그널이발생된다. while 루프는 1초에한번씩 1초경과 라는메시지를출력하다가 5초가되면해당시그널을받아 경보시계 (Alarm clock)" 메시지를출력하고프로그램은종료된다. 마지막 printf 문은무한루프뒤에위치해있으며무한루프실행중에 SIGALRM 시그널을받으면프로그램이종료되므로절대로실행되지않음을주의하자. 예제 alarm.c

22 /* 알람시그널을보여주는프로그램 */ int main( ) alarm(6); printf(" 무한루프 \n"); while (1) sleep(1); printf( 1초경과 \n"); printf(" 실행되지않음 \n"); $ alarm 무한루프 1초경과 1초경과 1초경과 1초경과 1초경과경보시계 (Alarm Clock) 시그널처리 앞의예에서본것처럼발생한시그널을따로처리하지않으면시그널에따라다르지만많은경우에프로그램은거기서종료된다. 따라서시그널이발생하면이를잡아서적절히처리할수있어야한다. 이를위해서다음과같은의미로시그널에대한처리함수를지정할수있다. 이시그널이발생하면이렇게처리하라 시그널에대한처리함수지정은 signal() 시스템호출을통해할수있는데 signal() 시스템호출은다음과같은형태로각시그널에대한처리함수를지정한다. func은 SIG_IGN, SIG_DFL 혹은사용자정의함수이름이다. #include <signal.h> signal(int signo, void (*func)( ))) signo에대한처리함수를 func으로지정한다. 기존의처리함수를리턴한다

23 세종류의처리함수의의미는다음과같다. SIG_IGN 발생된시그널을무시하겠다는의미로 SIGKILL, SIGSTOP을제외한시그널은필요하면무시할수있다. SIG_DFL 시그널에대한처리함수로디폴트처리함수를사용하겠다는의미이다. 각시그널마다미리정해진디폴트처리함수가있으며따로지정하지않으면이처리함수가수행된다. 사용자정의함수 시그널에대한처리함수로지정한사용자정의함수를사용하겠다는의미이다. 이제시그널처리함수를이용한예제 프로그램을살펴보자. 이프로그램은알람시그널이발생하면 alarmhandler() 가수행되도록등록하고무한루프에들어간다. 그사이에알람시그널이발생하면디폴트처리함수가수행되지않고등록된 alarmhandler() 함수가실행되어메시지를프린트하고프로그램을종료한다. 예제 almhandler.c #include <signal.h> void alarmhandler(); /* 알람시그널을처리한다. */ int main( ) signal(sigalrm,alarmhandler); alarm(5); /* 알람시간설정 */ printf(" 무한루프 \n"); while (1) sleep(1); printf("1초경과 \n"); printf(" 실행되지않음 \n"); void alarmhandler() printf(" 일어나세요 \n");

24 exit(0); $ almhanlder 무한루프 1초경과 1초경과 1초경과 1초경과일어나세요 pause() 시스템호출은시그널을받을때까지해당프로세스를정지시키는데이시그널은무시되지않는것이어야한다. pause() 는시그널을받았을때만반환하는데이경우해당시그널이처리되고나서 -1을리턴하며오류를나타내는전역변수인 errno는 EINTR로설정된다. 무시되는시그널을받은경우에는해당프로세스가깨어나지않는다. #include <signal.h> pause() pause() 시스템호출은시그널을받을때까지해당프로세스를잠들게만든다. 예제 프로그램은인터럽트시그널이발생하면 inthandler() 가수행되도록등록하고 pause() 시스템호출을하여정지된다. 인터럽트시그널 ( 보통 Ctrl-C에의해발생 ) 이발생하면이프로세스는깨어나서등록된 inthandler() 함수가실행되어메시지를프린트하고프로그램은종료된다. 예제 inthandler.c #include <signal.h> void inthandler(); /* 인터럽트시그널을처리한다. */ int main( ) signal(sigint,inthandler); while (1) pause(); printf(" 실행되지않음 \n");

25 void inthandler() printf(" 인터럽트시그널처리 \n"); exit(0); $ inthandler 무한루프 ^C인터럽트시그널처리 예제 프로그램은명령줄인수로받은임의의명령어를제한시간내에실행시키는프로그램이다. 이프로그램은명령줄인수로받은임의의명령어를실행시키는예제 12.8 프로그램을알람시그널을이용하여확장하여작성하였다. 명령어실행에제한시간을두기위해서는자식프로세스가명령어를실행하는동안정해진시간이초과되면 SIGALRM 시그널이발생하고이때자식프로세스를강제종료하면된다. 이를위해서두가지작업을수행한다. 먼저 SIGALRM 시그널에대한처리함수 alarmhandler() 를작성하고이를 SIGALRM 시그널에대한처리함수로지정한다. 다음에첫번째명령줄인수 (argv[1]) 로부터제한시간을입력받아알람시계를동작시킨다. 이알람시계로부터 SIGALRM 시그널이발생되면 alarmhandler() 처리함수가자동으로실행되어자식프로세스를강제적으로종료시킨다. 이예제에서는 kill(pid,sigint) 시스템호출을통해자식프로세스에 SIGINT 시그널을보내어강제적으로종료시킨다. 만약 SIGALRM 시그널이발생하기전에자식프로세스가종료하면이프로그램은정상적으로끝나게된다. 예제 tlimit.c #include <signal.h> int pid; void alarmhandler(); /* 명령줄인수로받은명령어실행에제한시간을둔다. */ int main(int argc, char *argv[]) int child, status, limit; signal(sigalrm, alarmhandler); sscanf(argv[1], "%d", &limit); alarm(limit); pid = fork( );

26 if (pid == 0) execvp(argv[2], &argv[2]); fprintf(stderr, "%s: 실행불가 \n",argv[1]); else child = wait(&status); printf("[%d] 자식프로세스 %d 종료 \n", getpid(), pid); void alarmhandler() printf("[ 알람 ] 자식프로세스 %d 시간초과 \n", pid); kill(pid,sigint); $ tlimit 3 sleep 5 [ 알람 ] 자식프로세스 시간초과 [27259] 자식프로세스 종료 프로세스에시그널보내기 상황에따라시그널이자동적으로발생되기도하지만앞에예에서도본것처럼필요에따라특정프로세스에임의의시그널을강제적으로보낼필요가있다. 이러한기능은한프로세스가다른프로세스를제어하는데매우유용하게사용될수있다. 다음의 kill() 시스템호출을이용하여특정프로세스 pid에원하는임의의시그널 signo를보낼수있다. 이시그널보내기가성공하기위해서는보내는프로세스의소유자가프로세스 pid의소유자와같거나혹은보내는프로세스의소유자가슈퍼유저이어야한다. #include <sys/types.h> #include <signal.h> int kill(int pid, int signo); 프로세스 pid에시그널 signo를보낸다. 성공하면 0 실패하면 -1를리턴한다. 시그널을이용하여자식프로세스를제어하는예제 프로그램을살펴보자. 프로그램 10.11은두개의자식프로세스를생성하고실행중인자식프로세스에 SIGSTOP 시그널을보내어정지시키고다시 SIGCONT 시그널을보내어실행을계속하게한다. 이과정을첫번째자식프로세스와두번째자식프로세스에대해서한다. 그후 SIGKILL 시그널을보내어자식프로세스들을강제종료시킨다

27 실행결과를통해서첫번째자식프로세스가정지되었을때는두번째자식프로세스만실행중이고두번째자식프로세스가정지되었을때는첫번째자식프로세스만실행중인것을확인할수있다. 예제 control.c #include <signal.h> /* 시그널을이용하여자식프로세스들을제어한다. */ int main( ) int pid1, pid2; pid1 = fork( ); if (pid1 == 0) while (1) sleep(1); printf(" 프로세스 [1] 실행 \n"); pid2 = fork( ); if (pid2 == 0) while (1) sleep(1); printf(" 프로세스 [2] 실행 \n"); sleep(2); kill(pid1, SIGSTOP); sleep(2); kill(pid1, SIGCONT); sleep(2); kill(pid2, SIGSTOP); sleep(2); kill(pid2, SIGCONT); sleep(2); kill(pid1, SIGKILL); kill(pid2, SIGKILL);

28 $ control 프로세스 [1] 실행프로세스 [2] 실행프로세스 [1] 실행프로세스 [2] 실행프로세스 [2] 실행프로세스 [2] 실행프로세스 [1] 실행프로세스 [2] 실행프로세스 [1] 실행프로세스 [1] 실행프로세스 [1] 실행프로세스 [1] 실행프로세스 [2] 실행프로세스 [1] 실행프로세스 [2] 실행 raise() 시스템호출을이용하여프로세스가자기자신에게시그널을보낼수있다. 사실 raise(signo) 시스템호출은 kill(getpid(), signo) 시스템호출과같다. #include <signal.h> int raise(int sigcode); 프로세스가자신에게시그널 signo를보낸다. 성공하면 0 실패하면 -1를리턴한다

29 핵심개념 프로세스는실행중인프로그램이다. fork() 시스템호출은부모프로세스를똑같이복제하여새로운자식프로세스를생성한다. exec() 시스템호출은프로세스내의프로그램을새로운프로그램으로대치하여새로운프로그램을실행시킨다. 시스템부팅은 fork/exec 시스템호출을통해이루어진다. 시그널은예기치않은사건이발생할때이를알리는소프트웨어인터럽트이다

30 실습문제 1. 알람시그널과 pause() 시스템호출을이용하여 sleep() 함수를구현하시오. 2. 다음과같은기능을포함하는쉘인터프리터를작성하시오. (1) 명령어실행 [shell] cmd (2) 명령어순차적실행 [shell] cmd1; cmd2; cmd3 (3) 후면실행 [shell] cmd & (4) 입출력리디렉션 [shell] cmd > outfile [shell] cmd < infile

31 연습문제 1. 다음프로그램의출력은무엇인가? [ 가정 ] 이프로그램은 100번프로세스에의해수행되고새로생성된자식프로세스의번호는생성된순서에따라 1씩증가한다. #include <stdlib.h> int main( ) int pid1, pid2; pid1 = fork(); printf("hello, world! pid=%d\n",pid1); pid2 = fork(); printf("goodbye, world! pid=%d\n",pid2); 2. 다음프로그램의출력은무엇인가? #include <stdlib.h> int main( ) int pid1, pid2; if ((pid1 = fork()) == 0) printf("hello, world pid=%d\n", getpid()); if ((pid2 = fork()) == 0) printf("goodbye, world pid=%d\n", getpid()); 3. 다음프로그램의출력을무엇인가. #include <stdlib.h> int main() int pid;

32 printf("1: pid %d \n", getpid()); if ((pid = fork())==0) printf("2: ppid %d -> pid %d \n", getppid(), getpid() ); else printf("3: pid %d \n", getpid() ); if ((pid = fork()) ==0) printf("4: ppid %d -> pid %d \n, getppid(), getpid() ); else printf("5: pid %d \n", getpid() ); 4. 다음프로그램의출력을무엇인가. #include <stdlib.h> int main() int pid; printf("1: pid %d \n", getpid()); pid = fork(); if (pid == 0) printf("2: pid %d \n", getpid() ); else execl("/bin/echo", "echo", "3: 100", NULL); pid = fork(); if (pid == 0) printf("4: pid %d \n", getpid() ); else execl("/bin/echo", "echo", "5: 101", NULL); 5. 다음프로그램은몇개의자식프로세스를생성하는가? 그이유를설명하시오. #include <stdlib.h> int main( ) int pid; pid = fork(); pid = fork(); pid = fork();

33 - 33 -

<C1A63130C0E5C7C1B7CEBCBCBDBA2E687770>

<C1A63130C0E5C7C1B7CEBCBCBDBA2E687770> 제 10 장프로세스프로그래밍 프로세스시작 / 종료 자식프로세스생성 프로세스내에서새로운프로그램실행 시그널 시스템부팅 10.1 프로그램시작및종료 Unix 에서프로그램은어떻게실행이시작되고종료될까? 프로그램은 10.3 절에서살펴볼 exec 시스템호출에의해실행된다. 이호출은실행될프로그램의시작루틴에게명령줄인수 (command-line arguments) 와환경변수 (environment

More information

제9장 프로세스 제어

제9장 프로세스 제어 제 9 장프로세스제어 리눅스시스템프로그래밍 청주대학교전자공학과 한철수 제 9 장 목차 프로세스생성 프로그램실행 입출력재지정 프로세스그룹 시스템부팅 2 9.1 절 프로세스생성 fork() 시스템호출 새로운프로그램을실행하기위해서는먼저새로운프로세스를생성해야하는데, fork() 시스템호출이새로운프로세스를생성하는유일한방법임. 함수프로토타입 pid_t fork(void);

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 시그널 2 11.1 시그널 시그널 시그널은예기치않은사건이발생할때이를알리는소프트웨어인터럽트이다. 시그널발생예 SIGFPE 부동소수점오류 SIGPWR 정전 SIGALRM 알람시계울림 SIGCHLD 자식프로세스종료 SIGINT 키보드로부터종료요청 (Ctrl-C) SIGSTP 키보드로부터정지요청 (Ctrl-Z) 3 주요시그널 시그널이름 의미 기본처리 SIGABRT

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.

More information

1장. 유닉스 시스템 프로그래밍 개요

1장.  유닉스 시스템 프로그래밍 개요 Unix 프로그래밍및실습 7 장. 시그널 - 과제보충 응용과제 1 부모프로세스는반복해서메뉴를출력하고사용자로부터주문을받아자식프로세스에게주문내용을알린다. (SIGUSR1) ( 일단주문을받으면음식이완료되기전까지 SIGUSR1 을제외한다른시그널은모두무시 ) timer 자식프로세스는주문을받으면조리를시작한다. ( 일단조리를시작하면음식이완성되기전까지 SIGALARM 을제외한다른시그널은모두무시

More information

ABC 11장

ABC 11장 12 장고급응용 0 수행중인프로그램 프로세스 모든프로세스는유일한프로세스식별번호 (PID) 를가짐 유닉스에서는 ps 명령을사용하여프로세스목록을볼수있음 12-1 프로세스 $ ps -aux USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND blufox 17725 34.0 1.6 146 105 i2 R 15:13 0:00

More information

10.

10. 10. 10.1 10.2 Library Routine: void perror (char* str) perror( ) str Error 0 10.3 10.3 int fd; /* */ fd = open (filename, ) /*, */ if (fd = = -1) { /* */ } fcnt1 (fd, ); /* */ read (fd, ); /* */ write

More information

제8장 프로세스

제8장 프로세스 제 8 장프로세스 리눅스시스템프로그래밍 청주대학교전자공학과 한철수 제 8 장 목차 쉘과프로세스 프로그램실행 프로그램종료 프로세스 ID 프로세스이미지 2 8.1 절 프로세스 프로세스 (process) 는파일과더불어리눅스운영체제의핵심개념중하나임. 리눅스시스템을깊이있게이해하기위해서는프로세스에대하여정확히이해해야함. 프로세스는실행중인프로그램이라고간단히말할수있음. 프로그램이실행되면프로세스가됨.

More information

좀비프로세스 2

좀비프로세스 2 Signal & Inter-Process Communication Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 좀비프로세스 2 좀비프로세스 (zombie process) 좀비프로세스란프로세스종료후메모리상에서사라지지않는프로세스 좀비프로세스의생성이유. 자식프로세스는부모프로세스에게실행결과에대한값을반환해야한다.

More information

제8장 프로세스

제8장 프로세스 제 8 장프로세스 리눅스시스템프로그래밍 청주대학교전자공학과 한철수 1 목차 쉘과프로세스 프로그램실행 프로그램종료 프로세스 ID 프로세스이미지 2 8.1 절 프로세스 프로세스 (process) 는파일과더불어리눅스운영체제의핵심개념중하나임. 리눅스시스템을깊이있게이해하기위해서는프로세스에대해서정확히이해해야함. 프로세스는간단히실행중인프로그램이라고할수있음. 프로그램이실행되면프로세스가됨.

More information

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBA20BBFDBCBAB0FA20BDC7C7E0205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBA20BBFDBCBAB0FA20BDC7C7E0205BC8A3C8AF20B8F0B5E55D> 학습목표 프로세스를생성하는방법을이해한다. 프로세스를종료하는방법을이해한다. exec함수군으로새로운프로그램을실행하는방법을이해한다. 프로세스를동기화하는방법을이해한다. 프로세스생성과실행 IT CookBook, 유닉스시스템프로그래밍 2/24 목차 프로세스생성 프로세스종료함수 exec 함수군활용 exec 함수군과 fork 함수 프로세스동기화 프로세스생성 [1] 프로그램실행

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 프로세스생성과실행 IT CookBook, 유닉스시스템프로그래밍 학습목표 프로세스를생성하는방법을이해한다. 프로세스를종료하는방법을이해한다. exec함수군으로새로운프로그램을실행하는방법을이해한다. 프로세스를동기화하는방법을이해한다. 2/24 목차 프로세스생성 프로세스종료함수 exec 함수군활용 exec 함수군과 fork 함수 프로세스동기화 3/24 프로세스생성 [1]

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 4 장파일 컴퓨터과학과박환수 1 2 4.1 시스템호출 컴퓨터시스템구조 유닉스커널 (kernel) 하드웨어를운영관리하여다음과같은서비스를제공 파일관리 (File management) 프로세스관리 (Process management) 메모리관리 (Memory management) 통신관리 (Communication management) 주변장치관리 (Device

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode] Unix Process Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 유닉스기반다중서버구현방법 클라이언트들이동시에접속할수있는서버 서비스를동시에처리할수있는서버프로세스생성을통한멀티태스킹 (Multitasking) 서버의구현 select 함수에의한멀티플렉싱 (Multiplexing)

More information

리눅스 프로세스 관리

리눅스 프로세스 관리 프로세스 (Process) Process 프로그램이나명령어를실행하면메모리에적재되어실제로실행되고있는상태를의미 이러한프로세스들은프로세스가시작하면서할당받는프로세스식별번호인 PID(Process ID), 해당프로세스를실행한부모프로세스를나타내는 PPID(Parent Process ID), UID 와 GID 정보를통해해당프로세스가어느사용자에속해있는지, 프로세스가파일에대해갖는권한및프로세스가실행된터미널,

More information

Microsoft PowerPoint - 10_Signal

Microsoft PowerPoint - 10_Signal Operating System Laboratory 시그널 - IPC - 시그널의종류 - 시그널구현함수 IPC 프로세스간통신 (Inter-Process Communication) 실행중인프로세스간에데이터를주고받는기법 IPC 에는매우많은방법이있다! File Pipe/Named pipe Socket Shared memory Message passing Remote

More information

6주차.key

6주차.key 6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running

More information

제12장 파일 입출력

제12장 파일 입출력 제 4 장파일입출력 리눅스시스템프로그래밍 청주대학교전자공학과 한철수 1 시스템호출 (system call) 파일 (file) 임의접근 (random access) 주요학습내용 2 4.1 절 커널의역할 (kernel) 커널 (kernel) 은운영체제의핵심부분으로서, 하드웨어를운영관리하는여러가지서비스를제공함 파일관리 (File management) 디스크 프로세스관리

More information

Microsoft PowerPoint - 10_Process

Microsoft PowerPoint - 10_Process Linux 프로세스프로그래밍 Programming - 프로세스생성 : fork, exec - 프로세스동기화 : wait - 프로세스관리함수 프로세스관련함수 프로세스생성과종료 함수 의미 fork 자신과완전히동일한프로세스를생성한다. exec 계열지정한실행파일로부터프로세스를생성한다. exit 종료에따른상태값을부모프로세스에게전달하며프로세스를종료한다. atexit exit

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 UNIX 및실습 8 장. 프로세스와사용자 명령익히기 1 학습목표 유닉스에서프로세스가무엇인지그개념을이해한다. 프로세스와관련된유닉스명령의사용방법을익힌다. 포그라운드처리와백그라운드처리의차이를이해한다. 사용자정보를보는명령의사용방법을익힌다. 2 01. 프로세스의개념과종류 프로세스 (process) 현재시스템에서실행중인프로그램 프로세스는고유번호를가진다. Process

More information

Microsoft PowerPoint - chap9 [호환 모드]

Microsoft PowerPoint - chap9 [호환 모드] 제 9 장프로세스관계 숙대창병모 1 Contents 1. Logins 2. Process Groups 3. Sessions 4. Controlling Terminal 5. Job Control 숙대창병모 2 로그인 숙대창병모 3 터미널로그인 /etc/ttys: 1 line per terminal device getty: opens terminal device

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

Microsoft PowerPoint - 09-Pipe

Microsoft PowerPoint - 09-Pipe 9. 파이프 상명대학교소프트웨어학부 파이프 시그널은이상한사건이나오류를처리하는데는이용하지만, 한프로세스로부터다른프로세스로대량의정보를전송하는데는부적합하다. 파이프 한프로세스를다른관련된프로세스에연결시켜주는단방향의통신채널 2 pipe() Usage #include int pipe(int filedes[2]); 3 < ex_1.c > #include

More information

/chroot/lib/ /chroot/etc/

/chroot/lib/ /chroot/etc/ 구축 환경 VirtualBox - Fedora 15 (kernel : 2.6.40.4-5.fc15.i686.PAE) 작동 원리 chroot유저 ssh 접속 -> 접속유저의 홈디렉토리 밑.ssh의 rc 파일 실행 -> daemonstart실행 -> daemon 작동 -> 접속 유저만의 Jail 디렉토리 생성 -> 접속 유저의.bashrc 의 chroot 명령어

More information

System Programming Lab

System Programming Lab System Programming Lab Week 4: Shell Schedule for your own shell 1 st shell 기본기능 fork / exec Background Processing/ Sequential Execution ls, find, grep 2 nd Environment variables/ Shell variables built-in

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

<4D F736F F F696E74202D BDC3B1D7B3CEB0FA20BDC3B1D7B3CE20C3B3B8AE2E707074>

<4D F736F F F696E74202D BDC3B1D7B3CEB0FA20BDC3B1D7B3CE20C3B3B8AE2E707074> 10 장시그널과시그널처리 시그널과시그널처리 - sigemptyset, sigfillset - sigaddset, sigdelset, sigismember - sigaction - sigprocmask - kill, raise - alarm - pause 1 1. 서론 시그널의종류 이름설명 DA SIGABRT abort() 를호출할때발생 SIGALRM 설정된알람시간이경과한겨우발생

More information

Microsoft PowerPoint - SP6장-시그널.ppt [호환 모드]

Microsoft PowerPoint - SP6장-시그널.ppt [호환 모드] UNIX System Programming Ki-Hyun, JUNG Email : kingjung@paran.com 구성 1 장 : 기본적인개념들과기초적인용어들 2 장 : 파일을다루는시스템호출 primitives 3 장 : 파일에대한문맥상의특성 4 장 : 유닉스디렉토리개념 5 장 : 유닉스프로세스의기본적인성질과제어 6 장 : 프로세스간통신 7 장 : 유용한유닉스프로세스간통신기법

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 유닉스프로그래밍및실습 9 장. 시그널 1. 시그널개념 시그널생명주기 시그널이발생한다. 커널이해당시그널을쌓아둔다.( 동일한시그널이오는경우하나만 ) 가능한시점에서커널이적절하게처리한다 커널의처리방법 시그널무시 아무런동작을하지않는다 절대무시할수없는시그널 SIGKILL SIGSTOP 시그널을붙잡아처리 현재코드경로를따라가는실행을중단하고, 시그널마다등록된함수로점프 기본동작

More information

<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D> 학습목표 통신프로그램이무엇인지이해한다. 을이용한 IPC 기법을이해한다. 함수를사용해프로그램을작성할수있다. IT CookBook, 유닉스시스템프로그래밍 2/20 목차 의개념 함수 해제함수 의보호모드변경 파일의크기확장 매핑된메모리동기화 데이터교환하기 의개념 파일을프로세스의메모리에매핑 프로세스에전달할데이터를저장한파일을직접프로세스의가상주소공간으로매핑 read, write

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 메모리매핑 IT CookBook, 유닉스시스템프로그래밍 학습목표 통신프로그램이무엇인지이해한다. 메모리매핑을이용한 IPC 기법을이해한다. 메모리매핑함수를사용해프로그램을작성할수있다. 2/20 목차 메모리매핑의개념 메모리매핑함수 메모리매핑해제함수 메모리매핑의보호모드변경 파일의크기확장 매핑된메모리동기화 데이터교환하기 3/20 메모리매핑의개념 메모리매핑 파일을프로세스의메모리에매핑

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 6 장 중급소켓프로그래밍 (2) 목차 제 6 장중급소켓프로그래밍 6.1 소켓옵션 6.2 시그널 6.3 넌블로킹입 / 출력 6.4 멀티태스킹 6.5 멀티플렉싱 6.6 다수의수신자처리 2 시그널 (Signal) 시그널이란? 예상치않은이벤트발생에따른일종의소프트웨어인터럽트 Ex) ctrl + c, ctrl + z, 자식프로세스의종료 외부에서프로세스에게전달할수있는유일한통로

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 소켓 2 1 소켓 클라이언트 - 서버모델 네트워크응용프로그램 클리이언트 - 서버모델을기반으로동작한다. 클라이언트 - 서버모델 하나의서버프로세스와여러개의클라이언트로구성된다. 서버는어떤자원을관리하고클라이언트를위해자원관련서비스를제공한다. 3 소켓의종류 소켓 네트워크에대한사용자수준의인터페이스를제공 소켓은양방향통신방법으로클라이언트 - 서버모델을기반으로프로세스사이의통신에매우적합하다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 UNIX 및실습 8 장. 프로세스와사용자명령 익히기 1 학습목표 유닉스에서프로세스가무엇인지그개념을이해한다. 프로세스와관련된명령의사용방법을익힌다. 포그라운드처리와백그라운드처리의차이를이해한다. 사용자정보를보는명령의사용방법을익힌다. 2 Section 01 프로세스란 프로세스 (process) 현재시스템에서실행중인프로그램 프로세스는고유번호를가진다. Process ID

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

Microsoft PowerPoint - chap6 [호환 모드]

Microsoft PowerPoint - chap6 [호환 모드] 제 6 장프로세스 (Process) 숙대창병모 1 내용 프로세스시작 / 종료 명령중인수 / 환경변수 메모리배치 / 할당 비지역점프 숙대창병모 2 프로세스시작 / 종료 숙대창병모 3 Process Start Kernel exec system call user process Cstart-up routine call return int main(int argc,

More information

Microsoft PowerPoint - ch09_파이프 [호환 모드]

Microsoft PowerPoint - ch09_파이프 [호환 모드] 학습목표 파이프를이용한 IPC 기법을이해한다. 이름없는파이프를이용해통신프로그램을작성할수있다. 이름있는파이프를이용해통신프로그램을작성할수있다. 파이프 IT CookBook, 유닉스시스템프로그래밍 2/20 목차 파이프의개념 이름없는파이프만들기 복잡한파이프생성 양방향파이프활용 이름있는파이프만들기 파이프의개념 파이프 두프로세스간에통신할수있도록해주는특수파일 그냥파이프라고하면일반적으로이름없는파이프를의미

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 파이프 IT CookBook, 유닉스시스템프로그래밍 학습목표 파이프를이용한 IPC 기법을이해한다. 이름없는파이프를이용해통신프로그램을작성할수있다. 이름있는파이프를이용해통신프로그램을작성할수있다. 2/20 목차 파이프의개념 이름없는파이프만들기 복잡한파이프생성 양방향파이프활용 이름있는파이프만들기 3/20 파이프의개념 파이프 두프로세스간에통신할수있도록해주는특수파일 그냥파이프라고하면일반적으로이름없는파이프를의미

More information

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,

More information

슬라이드 1

슬라이드 1 7.4 프로세스간통신 Interprocess Communication 기본적인프로세스간통신기법 데이터스트림과파이프 data stream and pipe 정보의송수신에사용되는일련의연속된데이터 a sequence of data used to send or receive information 예 : 프로세스와파일 ( 파일디스크립터을통하여 ) 을연결해주는데이터스트림

More information

슬라이드 1

슬라이드 1 Task 통신및동기화 : 시그널 (Signal) Chapter #10 Cooperating Processes Signal 개요 Signal 처리 Signal 전송 타이머처리 강의목차 Unix System Programming 2 Cooperating Processes (1) Independent process cannot affect or be affected

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

Microsoft PowerPoint oshw1.ppt [호환 모드]

Microsoft PowerPoint oshw1.ppt [호환 모드] 제출일 : 4월 5일 ( 목 ) 까지 과제내용» 연습문제풀이 1 1.6 2 2.8 3 3.8» 프로그래밍과제 4 5 과제 1 : 기본이해 # ftp 211.119.245.75 (id: anonymous, passwd: 자기 loginid) 또는 (id: ftp, passwd:ftp) 한다음 # cd pub 하고 # get p.c 하여 p 프로그램의 version

More information

Microsoft PowerPoint oshw1.ppt [호환 모드]

Microsoft PowerPoint oshw1.ppt [호환 모드] 과제 1 : 기본이해 제출일 : 4월 10일 ( 목 ) 까지 과제내용» 연습문제풀이 1 1.6 2 2.8 3 3.8» 프로그래밍과제 4 $ ftp 211.119.245.75 (id: anonymous, passwd: 자기loginID) 또는 (id: ftp, passwd:ftp) 한다음 # cd pub 하고 # get p.c 하여 p 프로그램의 version

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

학번 : 이름 : 1. 다음파일트리구조를가진유닉스시스템이있다고가정하자. / /bin/ /home/ /home/taesoo/ /usr/ /usr/lib/ /usr/local/lib /media 모든폴더에파일이하나도없다고가정했을때사용자가터미널에서다음 ls 명령입력시화면출력

학번 : 이름 : 1. 다음파일트리구조를가진유닉스시스템이있다고가정하자. / /bin/ /home/ /home/taesoo/ /usr/ /usr/lib/ /usr/local/lib /media 모든폴더에파일이하나도없다고가정했을때사용자가터미널에서다음 ls 명령입력시화면출력 학번 : 이름 : 1. 다음파일트리구조를가진유닉스시스템이있다고가정하자. / /bin/ /home/ /home/taesoo/ /usr/ /usr/lib/ /usr/local/lib /media 모든폴더에파일이하나도없다고가정했을때사용자가터미널에서다음 ls 명령입력시화면출력을예측하시오. $ cd /usr $ ls..? $ ls.? 2. 다음그림은어떤프로세스가다음코드를수행했다는가정에서도시되었다.

More information

Microsoft PowerPoint oshw1&2.ppt [호환 모드]

Microsoft PowerPoint oshw1&2.ppt [호환 모드] 과제 1 : 기본이해 (4 월 8 일까지 ) 1. 1장 & 2장연습문제풀이 1 1.4 2 1.17 3 2.3 4 2.7 2. 프로그래밍과제 1» 연습문제 2.18 프로그램안에서가능한한많은 system call을사용한다. ptrace, dtrace 시스템호출추적방법은테스트한후수업시간에설명할예정이다. 3. 프로그래밍과제 2 ( 교재 p138 Chapter 3 프로젝트

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용

More information

고급 프로그래밍 설계

고급 프로그래밍 설계 UNIT 12 프로세스제어 광운대학교로봇 SW 교육원 최상훈 init 프로세스 2 init 프로세스 프로세스 ID : 1 시스템부팅젃차마지막에커널에의해실행됨 커널부팅이후 UNIX 시스템을뛰우는역핛을함 시스템의존적초기화파일들 /etc/rc* 파일들, /etc/inittab 과, /etc/init.d 의파일들을읽고시스템을특정핚상태 ( 이를테면다중사용자상태 ) 로설정함

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

슬라이드 1

슬라이드 1 / 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file

More information

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터

More information

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap06-5 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.

More information

Chap04(Signals and Sessions).PDF

Chap04(Signals and Sessions).PDF Signals and Session Management 2002 2 Hyun-Ju Park (Signal)? Introduction (1) mechanism events : asynchronous events - interrupt signal from users : synchronous events - exceptions (accessing an illegal

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 소켓프로그래밍활용 IT CookBook, 유닉스시스템프로그래밍 학습목표 소켓인터페이스를활용한다양한프로그램을작성할수있다. 2/23 목차 TCP 기반프로그래밍 반복서버 동시동작서버 동시동작서버-exec함수사용하기 동시동작서버-명령행인자로소켓기술자전달하기 UDP 프로그래밍 3/23 TCP 기반프로그래밍 반복서버 데몬프로세스가직접모든클라이언트의요청을차례로처리 동시동작서버

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 15 고급프로그램을 만들기위한 C... 1. main( ) 함수의숨겨진이야기 2. 헤더파일 3. 전처리문과예약어 1. main( ) 함수의숨겨진이야기 main( ) 함수의매개변수 [ 기본 14-1] main( ) 함수에매개변수를사용한예 1 01 #include 02 03 int main(int argc, char* argv[])

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

chap7.key

chap7.key 1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

Microsoft PowerPoint APUE(File InO).pptx

Microsoft PowerPoint APUE(File InO).pptx Linux/UNIX Programming 문양세강원대학교 IT대학컴퓨터과학전공 강의목표및내용 강의목표 파일의특성을이해한다. 파일을열고닫는다. 파일로부터데이터를읽고쓴다. 기타파일제어함수를익힌다. 강의내용 파일구조 (UNIX 파일은어떤구조일까?) 파일관련시스템호출 시스템호출의효율과구조 Page 2 What is a File? A file is a contiguous

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

학번 : 이름 : 1. 다음파일트리구조를가진유닉스시스템이있다. / /bin/ /home/ /home/taesoo/ /home/taesoo/downloads /usr/ /usr/lib/ /usr/local/lib /media 모든폴더에파일이하나도없다고가정했을때사용자 (t

학번 : 이름 : 1. 다음파일트리구조를가진유닉스시스템이있다. / /bin/ /home/ /home/taesoo/ /home/taesoo/downloads /usr/ /usr/lib/ /usr/local/lib /media 모든폴더에파일이하나도없다고가정했을때사용자 (t 학번 : 이름 : 1. 다음파일트리구조를가진유닉스시스템이있다. / /bin/ /home/ /home/taesoo/ /home/taesoo/downloads /usr/ /usr/lib/ /usr/local/lib /media 모든폴더에파일이하나도없다고가정했을때사용자 (taesoo) 가터미널에서다음 ls 명령입력시화면출력을예측하시오. $ ls /usr/.. $

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 4 가지중하나. (1) 프로그램수행직후, (2) kill 명령실행직후, (3) 15 #include <signal.

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 4 가지중하나. (1) 프로그램수행직후, (2) kill 명령실행직후, (3) 15 #include <signal. 학번 : 이름 : 1. 다음가정하에서아래프로그램의출력물을예측하세요. 가정 : 부모프로세스의 process id=20100, 자식프로세스의 process id=20101. int glob = 31; /* external variable in initialized data */ char buf[] = "a write to stdout\n"; int main(void)

More information

vi 사용법

vi 사용법 네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o

More information

슬라이드 1

슬라이드 1 프로세스 (Process) (2) Chapter #9 강의목차 Process 관련시스템호출 Simple Shell Session Unix System Programming 2 프로세스정보 프로세스 ID 정보 프로세스정보 (1) PID(Process ID) 프로세스에할당되는유일한 ID( 정수값 ) PPID(Parent Process ID) 부모프로세스 ID PGID(Porcess

More information

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBABFCD20BBE7BFEBC0DA20B8EDB7C920C0CDC8F7B1E22E >

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBABFCD20BBE7BFEBC0DA20B8EDB7C920C0CDC8F7B1E22E > 8 장. 프로세스와사용자명령익히기 Contents 학습목표 프로세스의개념을이해한다 프로세스관련유닉스명령의사용방법을익힌다 포그라운드처리와백그라운드처리의차이를이해한다 사용자정보를보는유닉스명령의사용방법을익힌다 내용 프로세스의개념과종류 프로세스관리명령 포그란운드와백그라운드프로세스 사용자정보보기 01. 프로세스의개념과종류 프로세스 실행중인프로그램 종류 시스템프로세스

More information

Microsoft PowerPoint UNIX Shell.ppt

Microsoft PowerPoint UNIX Shell.ppt 컴퓨터특강 () 2006 년봄학기 문양세강원대학교컴퓨터과학과 Shell? Shell이란명령어해석기 (Command Processor or Command Interpreter): 사용자가입력하는명령을읽고해석하는프로그램프로그래밍언어 : Shell이해석할수있는스크립트 (shell script) 라는프로그램을작성유닉스를사용하는데있어주요한인터페이스 Page 2 1 Shell

More information

<4D F736F F F696E74202D20BFEEBFB5C3BCC1A6BDC7BDC D31C7D0B1E229202D20BDA92E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BFEEBFB5C3BCC1A6BDC7BDC D31C7D0B1E229202D20BDA92E BC8A3C8AF20B8F0B5E55D> 쉘 (Shell) 환경 운영체제실습 목차 Ⅴ. 쉘 (shell) 환경 5.1 쉘 (shell) 이란? 5.2 쉘 (shell) 기능 5.3 쉘 (shell) 변수 5.4 기타기능 5.5 쉘 (shell) 프로그래밍 5.1 쉘 (shell) 이란? 쉘 (Shell) 사용자가입력한명령어를해석해주는명령어해석기 (Command interpreter) 사용자와운영체제

More information

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD> 2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

C 프로그램의 기본

C 프로그램의 기본 C 프로그램의기본 목차 C 프로그램의구성요소 주석 main 함수 출력 C 언어의입력과출력 변수 printf 함수 scanf 함수 2 예제 2-1 : 첫번째 C 프로그램 3 2.1.1 주석 주석의용도 프로그램에대한설명 프로그램전체에대한대략적인정보를제공 프로그램수행에영향을미치지않는요소 4 2.1.1 주석 주석사용방법 /* 과 */ 을이용한여러줄주석 // 을이용한한줄주석

More information

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다 10 강. 쉘스크립트 쉘스크립트 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다른운영체제로이식되지않음 -스크립트언어를사용하면컴파일과정이없고인터프리터가소스파일에서명령문을판독하여각각의명령을수행

More information

슬라이드 1

슬라이드 1 Task 통신및동기화 : 파이프 (Pipe) Chapter #11 파이프 (Unamed Pipe) 표준입출력과파이프 FIFO(Named Pipe) 강의목차 Unix System Programming 2 파이프 (Unnamed Pipe) 파이프 (Pipe) (1) 하나의프로세스를다른프로세스에연결시켜주는단방향의통신채널 입출력채널과동기화기능을제공하는특수한형태의파일

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

슬라이드 1

슬라이드 1 2007 년 2 학기윈도우게임프로그래밍 제 7 강프레임속도의조절 이대현 핚국산업기술대학교 학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용핚다. FPS(Frame Per Sec)

More information

Microsoft PowerPoint - chap4 [호환 모드]

Microsoft PowerPoint - chap4 [호환 모드] 제 5 장 C 표준라이브러리 숙대창병모 1 목표 C 표준라이브러리의깊이있는이해 시스템호출과 C 표준라이브러리관계 숙대창병모 2 C 입출력라이브러리함수 숙대창병모 3 시스템호출과라이브러리함수 System Calls well defined entry points directly into the kernel documented in section 2 of the

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

Microsoft PowerPoint UNIX Shell.pptx

Microsoft PowerPoint UNIX Shell.pptx UNIX SHELL 문양세강원대학교 IT 특성화대학컴퓨터과학전공 Shell? Shell 이란명령어해석기 (Command Processor or Command Interpreter): 사용자가입력하는명령을읽고해석하는프로그램 프로그래밍언어 : Shell 이해석할수있는스크립트 (shell script) 라는프로그램을작성 유닉스를사용하는데있어주요한인터페이스 Page

More information

Microsoft PowerPoint APUE(File InO)

Microsoft PowerPoint APUE(File InO) Linux/UNIX Programming 문양세강원대학교 IT특성화대학컴퓨터과학전공 강의목표및내용 강의목표 파일의특성을이해한다. 파일을열고닫는다. 파일로부터데이터를읽고쓴다. 기타파일제어함수를익힌다. 강의내용 파일구조 (UNIX 파일은어떤구조일까?) 파일관련시스템호출 시스템호출의효율과구조 Page 2 What is a File? A file is a contiguous

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]

More information

The OSI Model

The OSI Model Advanced Socket Programming Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 다중처리기술 2 다중처리기술 Multitasking Multi-process Multi-thread Multiplexing Polling Selecting Interrupt

More information

제2장 리눅스 사용

제2장 리눅스 사용 제 2 장리눅스사용 리눅스시스템프로그래밍 청주대학교전자공학과 한철수 목차 기본명령어 파일및디렉터리 파일속성 입출력재지정및파이프 후면처리및프로세스 문서편집기 2 2.1 절 기본명령어 $ date // 날짜및시간을출력함. $ hostname // 호스트명을출력함. $ uname // 시스템정보를출력함. $ who // 현재로그인한사용자정보를출력함. $ ls //

More information

PowerPoint Presentation

PowerPoint Presentation #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을작성하면서 C 프로그램의구성요소에대하여알아본다.

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 쉽게풀어쓴 C 언어 Express 제 9 장함수와변수 이번장에서학습할내용 변수의속성 전역, 지역변수 자동변수와정적변수 재귀호출 이번장에서는함수와변수와의관계를집중적으로살펴볼것이다. 또한함수가자기자신을호출하는재귀호출에대하여살펴본다. 변수의속성 변수의속성 : 이름, 타입, 크기, 값 + 범위, 생존시간, 연결 범위 (scope) : 변수가사용가능한범위, 가시성생존시간

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Text-LCD Device Control - Device driver Jo, Heeseung M3 모듈에장착되어있는 Tedxt LCD 장치를제어하는 App 을개발 TextLCD 는영문자와숫자일본어, 특수문자를표현하는데사용되는디바이스 HBE-SM5-S4210 의 TextLCD 는 16 문자 *2 라인을 Display 할수있으며, 이 TextLCD 를제어하기위하여

More information

chap2

chap2 Lecture 02: 리눅스사용 상지대학교컴퓨터공학과고광만 kkman@sangji.ac.kr http://compiler.sangji.ac.kr 2018 2.1 기본명령어 간단한명령어사용 $ date $ hostname $ uname $ who $ ls $ clear $ passwd 3 2.2 파일및디렉터리 파일의종류 l 일반파일 (ordinary file)

More information

vi 사용법

vi 사용법 유닉스프로그래밍및실습 gdb 사용법 fprintf 이용 단순디버깅 확인하고자하는코드부분에 fprintf(stderr, ) 를이용하여그지점까지도달했는지여부와관심있는변수의값을확인 여러유형의단순한문제를확인할수있음 그러나자세히살펴보기위해서는디버깅툴필요 int main(void) { int count; long large_no; double real_no; init_vars();

More information

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

More information

Microsoft PowerPoint APUE(File InO).ppt

Microsoft PowerPoint APUE(File InO).ppt 컴퓨터특강 () [Ch. 3] 2006 년봄학기 문양세강원대학교컴퓨터과학과 강의목표및내용 강의목표 파일의특성을이해한다. 파일을열고닫는다. 파일로부터데이터를읽고쓴다. 기타파일제어함수를익힌다. 강의내용 파일구조 (UNIX 파일은어떤구조일까?) 파일관련시스템호출 시스템호출의효율과구조 Page 2 1 What is a File? A file is a contiguous

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

Microsoft PowerPoint - chap2

Microsoft PowerPoint - chap2 제 2 장. 파일입출력 (File I/O) 숙대창병모 1 목표 파일의구조및특성을이해한다. 파일을열고닫는다. 파일로부터데이터를읽고쓴다. 파일현재위치변경 기타파일제어 숙대창병모 2 2.1 파일구조 숙대창병모 3 What is a file? a file is a contiguous sequence of bytes no format imposed by the operating

More information