[질문]프로세스 관련해서 질문드립니다.~

ftfuture의 이미지

실행중인 명령어를 kill 명령으로 죽였을때..
미리 할당해 놓은 메모리는 어떻게 되는건지 궁금합니다..

apue 같은 책을 뒤저보면 종료시에는 사용중인 메모리, file descriptor등은
어쨌든 다 회수하는 커널 모듈이 동작한다고 되어 있는데요..

그러면 vfork,_exit 같은 함수들 은 어떻게 되는건지요 ??

_exit가 호출되면 사용중인 메모리등을 해제 하지 않는다고 하는데요..
어떤 방식인지 궁금합니다..

그럼.

용가리의 이미지

100% 정확한 답변은 아니고요, 제가 아는 한도내에서만 설명을
드리도록 하겠습니다. 일단 _exit라고 fd나 다른 메모리를 시스템에
반환하지 않는건 아닙니다. 물론 명시적인 반환이 없으면 그런 위험성을
항상 내포하고 있다고 말할 수 있는데, 최근에 나오는 상용 OS나
linux 같은 것들은 OS 내에서 메모리 관리를 일정 부분 해주기
때문에 시스템에 반환을 다 한다고 보셔도 됩니다. 하지만 100%라고
장담은 못하지요! 그리고 맨페이지만 보셔도 _exit는 fd와 같은
것들을 close한다고 나와 있습니다.
그리고 vfork()가 같은 경우에는 자식 프로세스 생성시 메모리 복사로
인한 오버헤드를 줄이기 위하여 메모리 복사를 하지 않습니다.
물론 이 부분도 최근의 OS들이 copy-on-write 기법을 이용하기 때문에
다른 fork()와 같은 콜들도 꼭 필요한 부분 외에는 프로세스가
메모리를 변경시키기 전까지는 메모리 복사를 하지 않습니다.
하지만 fork()와 vfork()는 약간 용도가 틀립니다. 즉, child를 생성하는데
fork()는 이후 child의 이미지를 다른 프로세스로 대체하기 위하여
execXXX 계열의 콜을 호출한다 하더라도 그 전에 일정량의 메모리
복사가 일어나는데 비하여, vfork()는 이런 경우의 오버헤드를
줄이기 위하여 부모 프로세스의 메모리(page table)을 즉시
복사하지 않습니다. 대신에 그 기간을 defer하여 execXXX가
좀더 효율적으로 이루어지게 하는데 목적이 이습니다.
따라서 그냥 자식을 똑같은 이미지로 쓸때는 fork()를 사용하고
vfork()는 자식을 생성하기 위해 하는 것이 아니라 다른 프로세스로
이미지를 대체하고자 할 때 좀더 좋은 성능을 얻기 위해 사용되는
겁니다. 원하시는 답변이 되었는지 모르겠네요....
아 그리고 메모리 회수기에 대한 자세한 내용은
unix internal이나 understanding linux kernel의 mem management
부분을 참고하시기 바랍니다.
그럼 수거하세여!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.