새소식

운영체제

fork(), exec(), pipe()에 대한 정리

  • -

 로그인 -> 사용자를 위한 shell process를 만들어준다.

    -> 프롬프트가 뜬다. ( I'm ready ! )

    -> command 작성 ( 실행파일명을 쓴다 )

    ex) prompt> sort.0 


* 파일시스템은 tree 형태이다. 유닉스는 1970년대에 만들어졌다. 그래서 모든 용어는 1970년대 이전에 쓰던 것이다.

core dump 는 메인메모리의 문제가 있다는 뜻이다.


* command interpreter란?

프로그램을 실행하기 위해 shell (child process) 를 만드는 것


* 유닉스에서 모든 system call은 리턴값이 있어 음수면 실패라는 의미이다.


command 뒤에 ' & ' 가 있으면 emper == 1 -> 백그라운드 실행

   없으면 emper == 0 -> wait



if ( fork() == 0 )

{

자식 프로세스

}

else

{

부모 프로세스

}



@ 리다이렉션 (redirection) 이란?


   (input)

process -> File    (프로세스가 실행할 때 필요한 입력을 제공하거나 출력을 받는 것을 File이라고 한다.) 

<-            ex) 터미널,

  (output)



@ 파일 디스크립터 (File descriptor) 


create -> 파일을 만듬

open -> 파일을 사용하게 해달라고 요청

read    => fd = open() , fd를 파라미터로 입력!

write

close

delete -> 파일을 지움


** open ~ close를 하나의 session이라고 한다.









-> 기본적으로       stdin   0
                                 stdout 1
                                 stderr  2
    


@ 리다이렉션 (redirection


$ sort.0 > f3






File descriptor 테이블에서 stdout이 f3로 바뀌면 output이 f3파일로 출력된다.



@ pipe()


> parallel : 60개 책상을 10명이 6개씩 나눠서 옮긴다.


> pipeline : 자동차를 각자 담당 부품만 조립한다.


이를 생산자 - 소비자 관계라고 한다


    



$ cat f1 | wc


위 명령어는 f1파일의 내용이 wc 명령어의 input이 된다. 따라서 cat 명령어가 먼저 끝나야된다.


* 이것을 통해 맨 마지막에 만들어지는 프로세스에 가장먼저 실행될 명령이 있어야됨을 알 수 있다.





정리하면, shell은 command (실행파일명)을 갖는다. shell이 하는 일은 fork 하는 일이다. 자식프로세스는 exec 명령을 통해서 변한다.

exit()를 통해 프로그램을 죽인다. 만약 프로그램에 exit 이 없으면 compiler가 프로그램 끝에 exit()를 넣어준다.


> & : 백그라운드 실행

> > : 리다이렉트

> | : 파이프라인









'운영체제' 카테고리의 다른 글

프로세스의 개념 및 API  (0) 2018.09.15
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.