Chapter03 프로세스 생성과 복사 fork()와 exec()

Sdílet
Vložit
  • čas přidán 27. 08. 2024
  • 운영체제에서 새로운 프로세스를 생성하기 위해 UNIX 계열에서는 fork(), exec() 함수를 사용하고 윈도우에서는 CreateProcess() Win32 API를 사용합니다. 이들 셋은 비슷하지만 다릅니다. 특히 fork()와 exec()은 내부적인 차이가 꽤 큽니다. 하지만 여러분이 가상 메모리 개념과 PCB를 알고 있다면 좀 더 쉽게 그 차이를 알 수 있습니다.
    [영상에서 소개한 블로그 링크]
    woochan-autobi...
    [가상 메모리 관련 영상]
    • 가상메모리가 없었던 MS-DOS의 치명적 문제
    • 짧게 개념만 이해하는! 가상 메모리 구조
    • Page-in/out, Swap-in/out
    • 앞 영상 다 봤다면 공유 메모리 IPC는 덤

Komentáře • 60

  • @zin7226
    @zin7226 Před 2 lety +2

    불금에도 쉬지않고 올려주시네요. 감사히 잘 보겠습니다.

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 2 lety +2

      휴일 없이 살아온지...좀 됐습니다. ^^;;; 쉬면 병납니다. 감사합니다. ^^;;;

  • @frogkim2933
    @frogkim2933 Před 2 lety +1

    너무 빠른 진도에 비해 느리게 따라가는 시청자입니다.
    저는 저 페이스 대로 따라갈께요... ㅠㅠ
    링크해주신 블로그에 예제를 보니깐 훨씬 좋네요.

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 2 lety +1

      시간 여유는 많습니다. 천천히 하시면 됩니다. 본인 페이스가 중요하지요. ^^

  • @zbflzlxl
    @zbflzlxl Před 2 lety +1

    블로그 방문은 나중에 하더라도 일단 영상 좋아요는 꼭 눌러야겠어요.
    제가 원래 좋아요 누르라고 해도 진짜 안누르는데 정말 잘 보고 있습니다

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 2 lety +1

      좋은 평가와 피드백 감사합니다. 강의 열심히 만들어야 겠네요. ^^;;;

  • @Nyaong220
    @Nyaong220 Před 2 lety +1

    연휴에는 쉬셔도 되는데... 헤헷 😆
    감사해요~

  • @user-sf8mp8qo7h
    @user-sf8mp8qo7h Před 2 lety +1

    프로세스 = 로봇 과 동일 하다고 보고
    fork 로봇을 동일하게 복제
    exec 로봇의 인공지능을 교체
    전 대충 이렇게 이해를....
    왜 저걸 2단계에 걸쳐서 하나 의문이었는데
    일련의 복잡한 과정을 쌈빡하게 건너 뛰고, 알멩이만 바꾸는 효과가 하하
    감사합니다.

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 2 lety +1

      네, 맞습니다. 복잡한 과정을 간단한 구조로 바꿔주는 장점이 있습니다. 피드백 감사합니다. ^^

  • @deokgeunkim8417
    @deokgeunkim8417 Před 2 lety +1

    늘 감사하게 보고 있습니다! 도움이 많이 됩니다 ㅎ

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 2 lety +1

      피드백 감사합니다. 앞으로도 열심히 강의 올리겠습니다. ^^

  • @dentalkiwi
    @dentalkiwi Před 2 lety +1

    감사합니다

  • @gardening3619
    @gardening3619 Před 5 měsíci

    감사히 잘 봤습니다!ㅎㅎ

  • @gugugu2014
    @gugugu2014 Před 2 lety +1

    와 이거 처음 배우고 과제하다 힘들었던 기억이 하하;;😅
    다시 복습하니까 너무 좋네요

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 2 lety +2

      과제...^^;;; 과제는 늘 부담스럽죠. 그래도 이제는 '복습'이니까 다행입니다. ^^;;; 혹시 보완이 필요하다고 생각되는 부분이 복습 중 발견되면 의견주시기 바랍니다. 보강 올리겠습니다. ^^

    • @Makingfunk
      @Makingfunk Před 2 lety +1

      너무 공감되네요 ㅋㅋ 처음 배울땐 고통이였는데 복습은 Fun이네요 ㅎㅎ

  • @marunarae550
    @marunarae550 Před 2 lety +1

    아하.. fork와 exec이 이런 차이였군요. fork는 말그대로 복사하는거고, exec은 그냥 대체생성이군요.

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 2 lety +1

      결국 성능 및 효율의 문제입니다. 멀티 프로세싱보다 멀티스레딩 환경이 더 흔한 요즘에는 큰 차이를 말하기도 모호합니다. 참고하시기 바랍니다. ^^

  • @andodesjoke8742
    @andodesjoke8742 Před 2 lety

    좋은 강의 잘 들었습니다. 감사합니다!

  • @risingjade1182
    @risingjade1182 Před 2 lety +1

    항상 좋은 강의 감사합니다.
    강의내용중 궁금한게 하나 있어 질문드려봅니다.
    Exec()이 부모 프로세스를 통채로 갔다가 쓰는거라 새로 만드는 비용없이 쓰는거 같은데 exec()으로 자식을 만들어 쓰는것이 아니라 그냥 부모에서 처음부터 끝까지 해결하면 안되는경우가 있는건가요..?

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 2 lety +4

      음...탐색기는 무엇인가를 새로 실행합니다. 가령 Excel을 말이죠. 탐색기가 Excel을 대체할 수 있는 기능을 제공하지 않으므로 Excel 새로 실행하는 것 외에 다른 방법은 없어보입니다. 참고하시기 바랍니다. ^^

    • @risingjade1182
      @risingjade1182 Před 2 lety +1

      @@nullnull_not_eq_null 아...이해했습니다 답변 감사합니다!

  • @user-ve7pb3ri9q
    @user-ve7pb3ri9q Před 6 měsíci

    안녕하세요!
    영상 열심히 챙겨보는 학생입니다!
    공부를하다가 궁금한게 생겼는데
    여러 강의 영상들을 보면서 fork를 했을때
    child process를 먼저 반환할 때도 있고
    parent process를 먼저 반환 할 때도 있는데
    이는 어떠한 경우인지 혹시 아시나요?

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 6 měsíci

      음...짧게 답변하기가 어렵겠습니다. 이 글을 참고하시기 바랍니다. :)
      code-lab1.tistory.com/39

  • @user-hf1kc5os1t
    @user-hf1kc5os1t Před 2 lety +1

    제가 c언어 교재 문의를 어디 동영상 아래에 올렸는데 주인장님이 최호성 씨였군요. 유투브로 만나니 반갑습니다.
    mfc 강의는 현재 올라와있는 mfc 기본강의만 들을수 있는가요? 다른 영상은 없는지요?

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 2 lety +1

      네...반갑습니다. 현재 MFC관련 강의로 공개된 것은 게시된 것이 전부입니다. 더 있기는 하지만 공개할 계획이 없습니다. 감사합니다.

    • @user-hf1kc5os1t
      @user-hf1kc5os1t Před 2 lety +1

      ​@@nullnull_not_eq_null 동영상이나 수업을 들으려면 어떻게 해야하나요? 지방인데요

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 2 lety +1

      애석하게도 지금 당장은 없습니다. 음...올 여름이 오기 전에 학습 환경을 만들어 공개하겠습니다. 감사합니다. ^^

  • @user-um6hn8ru5s
    @user-um6hn8ru5s Před 5 dny

    제가 잘 이해를 못해서 그런건지는 모르겠지만 왜 child process를 생성하고 복사를 해야하는지 잘 모르겠습니다.
    예를들어 google chrome를 컴퓨터에 설치하고, 더블 클릭해서 실행을 하면 RAM을 할당받고, parent process가 생성이 되고 chrome에 google 웹사이트가 뜨는데. 여기서 chatGPT를 검색해서 클릭하고 들어가면 child process가 생성이 되는건가요? 아니면 chatGPT 링크를 오른쪽 마우스로 눌러서 '새 페이지로 열기'를 해야 child process가 생성이 되나요? 이게 어떻게 되는건지 잘 모르겠습니다 ㅠㅜ 😢

  • @ConstantSTAN
    @ConstantSTAN Před rokem

    프로그램 언어에서 인스턴스를 복사하는 방법인 얕은 복사와 깊은 복사와 그 개념이 꽤나 비슷하군요 ㅎㅎ 얕은 복사 == fork()!!, 깊은 복사 == exec() !!

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před rokem

      그렇게 이해하는 것도 방법이 되겠습니다. 다만...굳이 그렇게 보자면 C++ '이동 시맨틱'이 더 유사한 측면이 있습니다. 참고하시기 바랍니다.

    • @ConstantSTAN
      @ConstantSTAN Před rokem

      @@nullnull_not_eq_null C++에는 이동 시멘틱이라는게 있나 보군요! 함 살펴보겠습니다 ㅎㅎ

  • @user-rc8hb7is1k
    @user-rc8hb7is1k Před rokem

    안녕하세요 강의 잘 들었습니다!
    부모 프로세스로 자식 프로세스를 복제하고 자식프로세스에맞게 변환시켜서 총 생성비용을 줄이는것으로 이해했어요. 근데, 노트북 바탕화면에 abc.pdf 파일을 더블클릭해서 열면 이땐 부모프로세스가 누구인건지 궁금합니다. 단순히 OS일까요? 그리고 탐색기같은것도 부모프로세스를 OS라고 생각해도 될까요??

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před rokem

      윈도우 바탕화면 자체는 윈도우 OS 쉘 프로그램입니다. 바로 윈도우 탐색기죠. 윈도우 탐색기가 더블 클릭으로 실행하는 모든 프로세스의 부모 프로세스라 하겠습니다. 이러한 관계를 시각적으로 보여주는 프로그램으로 Process explorer가 있습니다. MS에서 공식 배포하는 유틸리티이니 한번 사용해보기를 강력히 권합니다.

  • @EE-rs4oq
    @EE-rs4oq Před 2 lety +1

    fork와 exec에 대해서 궁금했던게 좀 풀리네요.
    근데, fork는 사용 용도가 확실한데, exec는 어떤 경우에 사용한는지가 조금 의문이네요!

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 2 lety

      간단합니다. 부모 프로세스도 그대로 유지되어야 하고 자식 프로세스도 그대로 유지되어야 하는 모든 경우에 그러합니다. 탐색기가 워드를 실행한 후 종료되지 않고 각자 존재하는 경우를 생각해보면 되겠습니다.

    • @EE-rs4oq
      @EE-rs4oq Před 2 lety

      @@nullnull_not_eq_null 오잉 그러면 부모, 자식 process가 모두 살아있는 fork랑 같은거 아닝가요? 답변 보니깐 더 헷갈리네요 ㄷㄷ..

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 2 lety +3

      앗! 혼란을 드려 죄송합니다. 반대로 답변을 드렸네요. ㅜㅜ;;;; fork()에 대한 질문으로 생각하고 답변을 드렸습니다.
      exec()이 필요한 예, 즉 부모가 자식 프로세스를 생성하되 모든 것을 물려주고 대체되는 경우는 주로 운영체제가 부팅할 때 발생합니다. 부팅을 위해 대몬 프로세스가 실행되지만 이후 새로운 프로세스를 띄어주는 것을 끝으로 자신의 역할이 끝나는 프로세스의 경우 굳이 두 프로세스가 공존할 이유가 없습니다. 이 때 exec()은 매우 효율적입니다. 그리고 이 효율은 부팅 속도에도 직접적인 영향을 줄 수 있습니다. 참고하시기 바랍니다.

    • @EE-rs4oq
      @EE-rs4oq Před 2 lety

      @@nullnull_not_eq_null 답변 감사드려요! 일반적인 어플리캐이션 프로그래밍에서는 exec를 자주 볼 일은 없기는 하네용. 예시로 이해되었습니당!

    • @user-ec7ei5xo4q
      @user-ec7ei5xo4q Před rokem +2

      늦은 답글..입니다. "널널한 개발자"님의 답변 왜에 일반 프로그램에서 사용할때도 있습니다. 아래의 예이외에도 또 다른 사용법이 있기도 하지요..
      보통 다른 프로세스와 통신 할 때 둘을 동시에 씁니다.
      예를들어 그림을 화면에 표시하는 프로그램[1]과 그림을 그리는 프로그램[2]이 따로 존재한다고 치면..
      1번프로그램에서 fork를 실행해서 자식프로세스를 만듭니다.
      그럼 1번 프로그램이 2개의 프로세스가 되고, 이 중 자식프로세스에서 exec로 2번프로그램으로 교체합니다.
      그럼 1번 프로그램과 2번프로그램이 동시에 수행되며, 1번프로그램은 2번프로그램이 완료되기를 기다렸다가 완료되면 결과를 화면에 표시합니다.
      이런 식으로 쓰는 데.. 이 과정을 미리 함수로 만들어 두었습니다. popen이라고.. 이 함수가 내부에서는 위의 동작방식으로 처리됩니다.
      하지만 popen은 단방향[읽기와 쓰기가 동시에 안됨]이라 양방향을 만들어야 한다면 이렇게 해서 만들면 됩니다.
      다른 예로 system함수[단순히 외부프로그램 실행]는 위와같이 fork후에 exec로 대체 후 그냥 자식이 종료되기를 기다립니다. 이렇게 구현되어있는 것으로 알고 있는데.. 이 건 효율상 문제가 있어 다른 방식을 사용할 수도 있습니다.
      도움이 되셨기..

  • @1Q81725
    @1Q81725 Před 2 lety

    슨상님, 프로세스와 스레드의 본질은 메모리 인가요? 아니면 다른 무엇인가요?

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 2 lety +1

      음...조금 어려운 질문이네요. '본질'로 이야기하기가 어렵습니다만...굳이 본질적인 접근으로 답변을 드리자면 '실행 단위'라고 생각합니다. 메모리는 그 실행을 돕기 위한 수단이나 환경으로 보는 것이 좋겠습니다. 감사합니다. ^^

  • @user-el7em3mw1i
    @user-el7em3mw1i Před rokem

    어.. 교수님 진도가 너무 빨라요

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před rokem +1

      음...그럼 천천이 나눠 보시면 어떨까요?? ^^;;;;

    • @user-el7em3mw1i
      @user-el7em3mw1i Před rokem

      @@nullnull_not_eq_null ㅎㅎ 아잇 감사합니다ㅎㅎㅎ 농담입니다!
      천천히 따라가보겠습니다

  • @jung339
    @jung339 Před rokem

    fork()이후에무조건 exec()가 호출되는 줄 알았는데 아니었군요 ;;

  • @user-eu3lx2ot6q
    @user-eu3lx2ot6q Před 4 měsíci

    그러면 한 프로세스에 exec를 여러개 생성하면 그건 멀티 스레드 개념으로 봐야 되는건가요?

    • @user-eu3lx2ot6q
      @user-eu3lx2ot6q Před 4 měsíci

      아 exec도 기존의 프로세스에서 새로운 프로세스로 전환하기 때문에 멀티 스레드의 개념과는 많이 다르네요. 저는 내용만 바꿔서 호출한다해서 스레드의 개념으로 생각했는데 전혀 아니었네요. 더 열심히 공부 하겠습니다

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 4 měsíci

      스스로 답을 찾으셨군요. 네, 맞습니다. 멀티스레드 개념은 아닙니다. 관련해서 LWP에 대해 찾아보실 것을 권합니다. :)

  • @jongjinlee_
    @jongjinlee_ Před 2 lety

    win32api가 있다면 win64api도 있나요?

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Před 2 lety +1

      따로 있다고 보기는 어렵겠습니다. 기존 Win32 API는 64비트 환경에서 잘 작동하며 64비트 전용 API가 있다면 그리 칭할 수 있겠습니다만...굳이 분류하지는 않는 것으로 알고 있습니다. 참고하시기 바랍니다.

  • @inro4568
    @inro4568 Před 2 lety

    20220805

  • @user-dz5xt7gg8m
    @user-dz5xt7gg8m Před 11 měsíci

    컴공생의 희망

  • @ryanlee5435
    @ryanlee5435 Před 2 lety +1

    1빠