프로세스 몇개가 같이 도는 프로그램을 만드는데요...

은영신랑의 이미지

프로세스를 여러개 만들어서 돌리는 프로그램을 만드는데요,

이 프로세스들은 목적은 각각의 하드웨어 장치를 읽어들이고,
통신하고 그러는 것인데요. 3개가 있고요.

하나의 Digital Input에서 몇개의 값을 읽고,
다음 프로세스에서 그 값을 serial1 을 이용하여 write하고,
또 serial2를 이용하여 write하는것입니다.
우선 각각의 일을 프로세스로 정의하고, 공유메모리를 사용하여서
처음 입력이 잘되었으면 serial 1,2를 차례로 쓰게 해야 되구요.
각각의 일들이 처음에 초기화 과정을 거친후에는 계속해서 자기차례가 되면
그 일만 처리하면 될것 같습니다.
또 각각의 일들이 에러없이 잘 되었나, 에러가 생긴다면 임의의
파일에 에러 프로세스와 시간을 기록하는 모니터링 하는 프로세스를 두고 싶고요.
하나의 프로세스에서 fork -> execl을 통하여 각각의 프로세스를 실행하고, 순서는
각각 프로세스의 세마포어를 두어 서로 주고 받으면 어떨까 하는데요.

어떤 방식으로 해야하는지 하면 할수록 생각할께 많고 쉽지가 않네요.
방법좀 알려주시면 감사하겠네요.

datamind의 이미지

말씀하신 구조도 잘 되었지만,
실시간 모니터링을 하신다면 pip 통신을 하시는 것은 어떤지요,
한쪽은 생성하고 한쪽은 블락킹 모드로 대기를 하는 구조 입니다.

만일 반드시 fork -> execl 을 해야한고,
데이타의 양이 많이 않으시다면, message 를 이용하는 것도 좋습니다.

그럼, 참고하시기 바랍니다.

moonzoo의 이미지

polling..
1 Digtal input   --------->  ------------------               =======
2 Digtal input   --------->  - A Process    -   ==>       PIPE
N Digtal input   --------->  ------------------               ======= 
                                  =
                                  V
                            ------------
                           공유메모리(or File..등)                                     
                            ------------- 
                                  =
                                  V

        =======  polling. ----------------
         PIPE          --->     - B Process -   ==> serial1, serial2..
        =======           ---------------

간단히 심심해서--; 그림을 그려보았습니다..

A Process에서 n개의 input에 polling을 하고 있다가..(poll or select)

input이 발생하면(event..) 공유메모리에 쓰고..

다 썻다고 pipe에 (named pipe를 쓰면 간단하겠죠..)

1바이트 정도 써주고..

B process는 pipe에 polling 하고 있다가 pipe에 무언가 써지면 읽고.

공유 메모리에 가서 Data를 읽어서

serial 1, serial2 등등에 써주면 되겠네요..

간단히 하면 fork()을 쓰실 필요는 없지만

굳이 쓴다면 A process에서 n개의 input에 대해 event 발생시

각각 fork 하여 각각의 pipe와 공유메모리 영역을 구분해서 쓸수도 있겠네여.

그러면 B process에서도 각각의 pipe에 대해서 fork하여 serial 을 구분해서

쓰는 것도 가능할테구요..

답변이 되었는지 모르겠습니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.