이메일을 적으시면 보안관련 소식을 받을수 있습니다.
이메일:







 




작성자: WhiteHT
편집자: 엔시스



안녕하세요~!

WhiteHT입니다. 오늘은 지난 시간에 조금 빠진 부분이 있어서 보충하는 시간을 갖겠습니다.



 

이번 시간에는 프로세스에 대한 연산(Operations on Processes)에 대해서 살펴보도록 하겠습니다

 

먼저 생성(Process Creation) 부분입니다.


Process
는 동작되는 도중에 여러 프로세스를 생성할 수 있습니다. 이 때 프로세스를 생성하는 프로세스를 부모 프로세스(Parent Process)라고 하고, 생성된 프로세스를 자식 프로세스(Child Process)라고 합니다. 여기서 자식 프로세스는 그것이 필요한 자원을 OS로부터 직접 받을 수도 있고, 부모 프로세스로 한정되어 받을 수도 있습니다. 이를 조금 주의 깊게 보셔야 할 수도 있는데요. 자식 프로세스가 OS로 부터 직접 필요한 자원을 할당 받으면, 자원이 고갈되어 시스템이 다운되는 현상이 발생할 수도 있다는 것이지요. 그리하여 부모프로세스로부터 한정적으로 제공받는 것이 시스템 먹통을 방지하는 하나의 방법이 될 수 있습니다.

 

이렇게 부모 프로세스와 그가 탄생시킨 자식 프로세스의 실행 형태는 어떻게 될까요?


그 형태의 가능성은 부모와 자식프로세스가 병행으로 실행되는 것과 자식프로세스가 완료(Terminate)될 때까지 부모프로세스가 기다리는 형태가 있습니다.

 

아래 C Program을 보고 프로세스의 생성되는 모습을 보도록 하겠습니다.

 

int main()

{

           pid_t pid;

                     pid =fork();

                     if(pid <0){

                                fprintf(stderr, "Fork Failed");

                                exit(-1);

                     }

                     else if(pid==0){

                                execlp("/bin/ls", "ls", NULL);

                     }

                     else{

                                wait(NULL);

                                printf("Child Complete");

                                exit(0);

                     }

}



위 소스에서 fork() System call를 이용하여 프로세스를 생성하게 됩니다.


fork()
를 통해 자식 프로세스를 생성하면 이 프로세스는 부모로부터 주소 공간의 복사본을 할당 받게 됩니다. 위 소스에 보면 execlp() system call이 존재하는데 이는 이를 이용하여 할당받은 기존의 주소공간에 새로운 프로그램을 오버라이팅 한 후 그 프로그램을 수행하는 것입니다.


이렇게 부모프로세스는 계속하여 또 다른 프로세스를 생성할 수 있으며, 더 할 일이 없어지면 wait() system call을 이용하여 자식 프로세스의 종료를 기다리게 됩니다.

 

여기까지 프로세스의 생성을 살펴 보았습니다. 부모가 생성되고 그 부모가 또 자식을 생성하면서 트리형식으로 프로세스를 생성하게 되는 구조였습니다^^

 

생성을 해놨으니까 이젠 종료(teminate)를 살펴 봐야겠지요..

 

프로세스는 자신의 마지막 문장을 수행하면 종료되게 됩니다. 위에 소스코드를 살펴보면 exit(0) 보이시지요?
 
exit() system call
을 이용하여 OS에게 자신이 할 일을 다했음을 알리게 됩니다. 이렇게 종료될 시점에 자식은 부모에게 결과값을 전달할 수 있으며, 부모는 wait() system call을 이용하여 이 데이터를 받게 됩니다. 또 부모는 abort() system call을 이용하여 자식을 강제로 종료시켜 버릴 수 있는 능력도 갖고있지요.


어떤 경우에 강제로 종료를 시켜야 할까요? 다음과 같은 경우입니다

 

 - 할당된 자원을 초과한 경우

 - 자식이 더 이상 할 일이 없을 경우(불필요)

 - 부모가 종료되는 경우(이러한 현상을 cascading termination 이라고 함)


 

이렇게 해서 프로세스의 생성과 종료에 대해서 알아 보았습니다.

 

그럼 이번에는 프로세스들이 어떠한 관계를 갖고, 어떠한 Communication을 하는지 살펴 보겠습니다.

병행 수행되는 프로세스들은 두 가지 형태가 나타납니다.


 - Independent process : 다른 프로세스의 실행에 영향을 주지도 않고 받지도 않는 형태.

 - Cooperating Process : 다른 프로세스의 실행에 영향을 주거니 받거니 하는 형태

 


쉽게 개인플레이만 하는 녀석과 공동체를 좀 아는 녀석이라고 보면 될 듯합니다^^ 공동체가 아무래도 여러가지 좋은 점이 있을 텐데요. Cooperating Process의 이점이라고 하면 무엇이 있을까요? 바로 정보의 공유, 일 처리 가속화, 모듈화, 편의성이 있습니다. 협력을 하다보니 같은 정보는 공유하고, 계산도 나누어서 하고, 기능을 분리하며, 사용자에게 동시 수행할 수 있는 편의를 제공하지요.

 

이제는 프로세스 간의 통신을 좀 살펴보겠습니다


IPC(Interprocess Communication)
는 프로세스가 같은 주소 공간을 공유하지 않아도 프로세스 간에 통신과 그들이 동기화 될 수 있는 메커니즘을 제공합니다


제공 되는 메커니즘 중에 메세지 전달(Message Passing)을 먼저 알아 보겠습니다.


이는 데이터의 공유 없이 프로세스 간에 통신을 할 수 있게 해주는 것입니다. 기본적으로 두가지 연산을 제공하게 되는데요 바로.

 - send(msg)

 - receive(msg)

입니다. 여기서 메세지의 크기는 가변적일 수도, 고정되어 있을 수 있습니다.


, 그리고 두 프로세스 간에 Communication이 이루어지기 위해서는 프로세스간에 링크가 필요하게 됩니다. 물리적으로 하드웨어 bus나 메모리 공유를 통해 해결 할 수도 있고 논리적으로 구현을 할 수도 있습니다.

논리적인 구현에는 직,간접 통신, 대칭,비대칭 통신, 자동,명시적 버퍼링, 주소 전달 식의 방법이 존재합니다.

 

간단하게 직접통신을 살펴보면 직접통신은 각 프로세스의 수신자 또는 송신자의 이름을 명백하게 제시를 하면 자동으로 링크가 설정됩니다. 이름만 알고 있으면 된다는 소리가 되겠지요. 직접적으로 연결되니, 연결된 두 개의 프로세스만 관련이 있다는 것을 알 수 있습니다.


간접통신은 메일박스나 포트를 통해 메세지를 전달하는 것입니다. 두 개의 프로세스가 통신을 하기 위해서는 메일박스가 서로 공유되어야 합니다. 그렇다 보니까 여러 개의 프로세스가 연관이 될 수 있습니다. 여러 개의 링크가 존재하게 된다는 것입니다.

 

후암, 오늘은 딱딱하게 글이 많았던 것 같습니다; 참조하고 있는 영문서가 이 부분이 다소 지루하게 표현되고 있네요^^;; 지루하시겠지만 후루룩~ ~ 한번 읽어 주시면 감사하겠습니다^^/


 

다음 시간에는 전시간에 약속 드린 스레드(thread)에 대해서 계속해서 포스팅 하도록 하겠습니다~

 

그럼 늦은 시간(?)까지 함께 해주셔서 감사합니다~~^^)



****************************************************************************************************

본 포스팅의 저작권은 보안인닷컴과 작성자에 있으며 상업적 이용을 배제하며 콘텐츠 이용시에는 반드시 출처와 링크를 이용해 주시기 바랍니다. 무단도용은 저작권법에 저촉을 받습니다..

****************************************************************************************************

Posted by 비회원

댓글을 달아 주세요

  1. Favicon of https://eva1717.tistory.com BlogIcon eva1717 2009.04.16 12:14 신고  댓글주소  수정/삭제  댓글쓰기

    역시 모든 깊게 들어가면 어렵네요...^^;
    간단히 fork()로 생성하고 exit()로 terminate 하는줄로만 알았지...>ㅁ<;;
    항상 WhiteHT님 포스팅 보면서 노력하고 있어요..^^
    오늘도 새로운 정보를 주셔서 감사합니다..!!

  2. Favicon of https://extraman.tistory.com BlogIcon ^________________^ 2009.04.16 12:42 신고  댓글주소  수정/삭제  댓글쓰기

    수박 겉만 핥은저로서는..ㅋㅋ 깊게 갈수록 어렵슴당..
    잘 읽었슴당...

  3. Favicon of https://boanin.tistory.com BlogIcon 보안인닷컴 2009.04.17 09:59 신고  댓글주소  수정/삭제  댓글쓰기

    운영체제를 바로 알아 가는 군요..잘 보았습니다.

  4. 심규남 2009.04.21 11:03 신고  댓글주소  수정/삭제  댓글쓰기

    언제나 이해하기 쉽게 포스팅해주셔서 감사합니다..ㅎㅎ

  5. nkey 2009.05.18 23:55 신고  댓글주소  수정/삭제  댓글쓰기

    공부했던 내용은 복습, 그 밖에 추가로 알아가는 부분으로 참 유용합니다.. 감사합니다^^